问题标签 [ddd-repositories]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
domain-driven-design - 加载 List 或 DropdownList 中的 Value 对象,DDD
我需要澄清一些事情。
有人员聚合,2 个 VO(国家,州省)。
我想在我的表示层中加载所有国家(我正在使用 mvc)
Evan 说您只使用存储库 (IPersonRepository) 来处理根实体(它应该始终只返回对聚合根的引用)
我通常会做什么来解决这个问题:
在 IPersonRepository 中添加这个方法
在 Infra 层实现域接口,如下所示:
我的搭档说我错了。
有时你必须牺牲你的领域模型来完成一些任务
做这个的最好方式是什么?
请用代码!:)
asp.net-mvc-3 - MVC-3 项目结构
我有以下项目结构,这些都是单独的项目,有人告诉我这样做,所以不是我的选择。
这是我的问题。我一直在阅读,最好的做法是让控制器保持节食,并且模型/视图模型应该是愚蠢的,因此在我的项目结构中引入了服务层部分。现在的实际问题;这是一个好方法还是我为自己创造了太多的工作?
因此,如果我想说对产品或类别或任何其他实体有一些 CRUD 操作,存储库应该从服务层/业务逻辑层实例化吗?
请输入一些?
asp.net-mvc-3 - EF 4.1 的结构问题
以下有什么建议。我有这样的结构。--应用服务
- 领域
--Infrastructure.Backends
--基础设施.数据
--MVC网络应用
应该把 edmx 文件和生成的 POCO 放在哪里?我在考虑域,如果是这种情况,那么应用程序服务将调用存储库并将数据返回到 MVC 应用程序中的控制器。这是正确的思维方式吗?
存储库接口和存储库的实现在哪里?
c# - 在存储库中尝试 Catch
我看过的关于存储库模式的示例都没有包含任何类型的错误处理。为什么是这样?比如说我有这个:
我们违反约束的实例。我捕获了 DbUpdateException... 如果不在存储库本身中,此错误处理将在哪里进行?
nhibernate - 领域模型 – 存储库 – 跨子系统的通信
我目前正在设计一个系统,该系统将使用多个数据源来使用所需的数据。我正在尝试对下面显示的概念进行建模(将发布图像但没有足够的分数!)客户可以与许多产品相关联。客户将存储在“客户子系统”中,产品和客户产品将存储在您的“产品子系统”中
“客户”实体将物理保存在必须通过 Web 服务访问的系统中。“ConsumerProduct”和“Product”实体将保存在 SQL 数据库中,使用 NHibernate 作为 ORM。
作为设计的一部分,我计划使用存储库将数据持久性技术从域模型中抽象出来。因此,我将有 3 个存储库接口,ICustomerRepository、ICustomerProductRepository 和 IProductRepository。然后,我将为 CustomerProduct 和 Product 存储库创建一个具体的 NHibernate 实现,并为 Customer 存储库创建一个具体的 Web 服务访问实现。
我正在努力解决的是持久存在于不同子系统中的实体将如何交互。理想情况下,我想要一个丰富的域模型,其中 CustomerProduct 实体将具有一个返回 Customer 对象的物理“Customer”属性。但是我不知道这将如何工作,因为需要从不同的数据存储访问 Customer 实体。
我能看到解决此问题的唯一方法是不在 CustomerProduct 实体中维护对 Customer 的完整引用,而是只保留一个引用,然后每次我需要获取对 Customer 的引用时,我都会通过 Customer存储库。
如果有人能就如何解决这个问题提出任何建议,我将不胜感激。
castle-windsor - 在一个普通的类库项目中为 DI 与 Castle 连接的地方
我读过 Windsor 是最好的 DI/IOC 工具,所以我想我会试一试。我看到了许多关于如何使用 MVC 项目连接所有内容的示例,但是我需要使用我的 DDD 模型的其他层连接一些依赖关系映射。
我有一个需要注入 DbContext 的存储库库。我有一个派生自 DbContext 的类,因此这将是需要注入的类。更好的是,我可以为它制作一个界面。IAppDBContext
.
就像我之前所说的,所有的样本都在Global.asax
web 项目的文件中进行了布线。在一个普通的类库项目中,我会在哪里连接东西?
linq-to-sql - 如何使 POCO 在 DDD 中与具有复杂关系的 Linq-to-SQL 一起工作
当我的域模型不是表驱动时,我正在努力寻找一种使 POCO 与 Linq-to-Sql 一起工作的方法——这意味着我的域对象与数据库模式不匹配。
例如,在我的域层中,我有一个 Appointment 对象,它具有 Recurrence 类型的 Recurrence 属性。这是一个基类,有几个子类,每个子类都基于特定的重复模式。
在我的数据库中,当 Appointment 记录与其重复出现之间始终存在一对一的关系时,拥有单独的 AppointmentRecurrences 表是没有意义的。因此,Appointments 表具有 RecurrenceType 和 RecurrenceValue 列。RecurrenceType 与 RecurrenceTypes 表具有外键关系,因为重复类型(模式)和 Appointments 表之间存在一对多的关系。
除非有办法在 Linq-to-Sql 中创建这两个模型之间的正确映射,否则我只能手动解决代码中的阻抗不匹配问题。
当使用规范模式查询数据库时,这变得更加困难。例如,如果我想返回当前约会的列表,我可以轻松地创建一个使用以下表达式的 Specification 对象:appt => appt.Recurrence.IsDue
。但是,这不会转化为 Linq-to-SQL 空间,因为表达式的源类型不是 L2S 识别的类型(例如,它不是 L2S 实体)。
那么如何在 Linq-to-SQL 中创建复杂的映射来支持我的域模型呢?
或者,在这种情况下是否有更好的方法来实现规范模式?我曾考虑过使用由我的域对象和 L2S 实体(通过部分)实现的接口,但由于两个对象图的阻抗不匹配,这是不可能的。
建议?
design-patterns - Active Record 模式、Repository 模式和可测试性(在 java 中)
以下旨在从Active Record模式和Repository模式中获得最佳效果的方法有什么缺点(例如在可测试性方面)?
每个持久对象都暴露了 save() 和 delete() 方法,但没有静态方法来加载自身,或者加载类似对象的列表:从上层加载是通过直接调用存储库来完成的,以避免持久对象中的静态方法。
“save()”和“delete()”方法只是外观,它们被委托给存储库。
可测试性真的是这种方法的一个问题吗?即使使用纯 Active Record 方法:是否存在数据库逻辑仅代表整个业务逻辑的一小部分的信息系统,并且在哪里模拟数据库访问会很有趣?
编辑:这种方法需要持久对象从实现“save()”和“delete()”的AbstractPersistentObject继承,它可以防止业务继承,但我读到最好避免业务继承,并用组合替换它,所以这可能是一个优势,而不是一个缺点......?
EDIT2:也许这篇文章会更好地解释我要解决的问题:http: //moleseyhill.com/blog/2009/07/13/active-record-verses-repository/
c# - Nhibernate - 与 Cascade all-delete-orphan 的一对一映射,不删除孤儿
我有一个“面试”实体,它与“表单提交”实体具有一对一的映射关系,可以说面试实体是主要的一面,映射是:
这两个实体都是聚合的一部分,采访充当聚合根。我正在尝试通过采访实体保存/更新/删除表单提交,因此我已将关联的采访结束映射为 cascade="all-delete-orphan"。例如,我可以像这样创建一个新的 FormSubmission:
...这工作得很好,FormSubmission 被保存了。但是,我似乎无法删除我正在尝试这样做的 FormSubmission:
...但这似乎并没有删除 FormSubmission。我尝试将 null 分配给关联的双方:
我什至尝试在 FormSubmission 端设置 cascade="all-delete-orphan" ,但似乎没有任何效果。我错过了什么?
domain-driven-design - 有人在 NWorkspace 模式上取得成功吗?
我刚刚开始深入研究域驱动设计的第一个实验,并且正在利用 NWorkspace 模式。这种模式似乎很有意义,但是我无法找到很多成功使用这种模式甚至公开记录的地方的例子。在深入了解我的实现之前,我想知道是否有人成功地使用了这种模式,或者是否有人可以指出我在任何开源项目中使用 NWorkspace 的任何参考资料,我可以从中学习。还有我应该知道的这种模式的更好或更知名的替代方案吗?
NWorkspace 的简要背景
对于那些可能不熟悉 NWorkspace 的人来说,它是Jimmy Nisson引入的一种模式,它抽象了查询和持久性职责。在他的《应用领域驱动设计和模式》一书中,Jimmy Nilsson 展示了如何使用 NWorkspace 来抽象 DDD 存储库的基础设施部分,并提供一种机制来执行与持久性有关的跨存储库原子性。