问题标签 [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.

0 投票
1 回答
138 浏览

.net - LINQ2SQL、持久性无知和领域模型

这里有没有人使用过 LINQ to SQL 来支持域模型的持久性?

我不打算使用 LINQ2SQL 实体设计器,只是使用普通的手工编码 XML 映射,而且我目前遇到了障碍。

我正在尝试在我正在做的 DDD 示例中使用它,因为我的听众只知道 LINQ2SQL。

0 投票
1 回答
4164 浏览

java - 使用 JPA/Spring 的(通用)DDD 存储库的方法:看起来有问题吗?

我对 DDD 和 JPA 很陌生。

我正在使用 JPA 和 Spring 开发一个通用存储库。我真的很喜欢文章DDD:通用存储库JPA 实现模式:数据访问对象中公开的方法。我的目标是使用 JPA 和 Spring 在领域驱动设计中构建完美的存储库。

遵循第一篇文章的概念,我使用内部通用存储库来尊重域与数据存储的合同。

然后,特定实体(例如:组织)的存储库如下所示。

它看起来像是用 JPA 和 Spring 实现 DDD 存储库的好方法。然后将 OrganizationRepository 注入我的服务层。

我希望有外部观点以避免缺陷或误解。您怎么看?如何改进?

谢谢。


编辑:

  • @Autowired on internalRepository - 感谢 axtavt 指出。
  • read() 可以改进
0 投票
1 回答
2388 浏览

domain-driven-design - 如何有效地将 SQLAlchemy 与多个 DDD 存储库一起使用?

我一直在尝试找到一些如何使用 SQLAlchemy 实现存储库模式的示例。具体来说,实现多个存储库。

在多个存储库的情况下,我相信每个存储库最好通过维护一个单独的 SQLAlchemy 会话来实现。但是,我在尝试将绑定到一个会话的对象实例移动到另一个会话时遇到了问题。

首先,这样做有意义吗?每个存储库是否应该将自己的 UoW 与任何其他存储库分开,或者是否应该认为让整个上下文共享同一个 Session 是安全的?

其次,从一个 Session 分离实例并将其绑定到另一个的最佳方法是什么?

第三,是否有使用 SQLAlchemy 编写的可靠的 DDD 存储库示例?

0 投票
1 回答
1416 浏览

architecture - 将 DDD 应用于罗斯文数据库

我想做一些练习并将 DDD 应用于我应用于 Northwind 数据库的域模型。即使 Northwind 是一个例子,我想它也是为了满足一些“虚拟业务”的要求。所以目标是拥有一个尊重 DDD 的领域模型,并且数据存储在 Northiwnd 数据库中。

考虑这个 EF 持久性模型:

替代文字
(来源:developpeur.org

请注意,我们只有实体和双向关系。我想要一个真正尊重 DDD 的 DM。而且,我的 DM 模型不需要是我的数据库的镜像

  1. 在需要时,您如何将 des 关系更改为只有一种方式的关系或两种方式。

  2. 是否有任何可以更改为一对一的多对一或一对多关系?

  3. 您将如何为聚合建模?

  4. 如果需要,值对象、服务和工厂怎么样?

我知道我可能应该看看业务需求,看看模型应该如何改变,但希望得到你的建议。

如果我的问题不清楚,请随时询问详细信息。

提前致谢。

0 投票
2 回答
879 浏览

c# - DDD:尝试使用 C# 对与 Poco、Repository、DTO 和 DAO 相关的代码排序和过滤?

我从我的存储库中获得了一个项目列表。现在我需要对它们进行排序和过滤,我相信这会在存储库中完成以提高效率。我认为以 DDD 方式执行此操作有两种方法:

  1. 向 Repository 发送一个过滤器和一个充满条件的排序对象(这叫什么)?
  2. 存储库结果会产生一个带有 .filter 和 .sort 方法的对象?(这不会是 POJO/POCO,因为它包含多个对象?)。

那么答案是 1、2 还是其他?你能解释一下为什么吗?我倾向于#1,因为存储库只能发送我想要的数据(或者#2 能够延迟访问像 LazyList 这样的数据?)代码示例(或网站链接)将非常有帮助。

例子:

  1. 产品 product = repo.GetProducts(mySortObject, myFilterObject); // Poco 列表
  2. product.AddFilter("price", "lessThan", "3.99"); product.AddSort("价格", "降序");
0 投票
1 回答
424 浏览

entity-framework - 使用 EF 4 和 DDD 的最佳方式是什么

我想在我的 DDD 项目中使用 EFf 4 作为我的 ORM。我将根据我的类生成我的模型。我应该为消费者的业务对象创建基本上是 dto 对象的类,还是应该在我的 EF 模型中实现实际的 BO 类?

0 投票
2 回答
738 浏览

asp.net-mvc - Linq to Sql、Repositories 和 Asp.Net MVC ViewData:如何删除冗余?

Linq to SQL 创建 IQueryable 且充满关系的对象。
Html Helpers 需要特定的接口对象,例如IEnumerable<SelectListItem>.

我认为可能发生的事情:

  • 重用从 Linq 到 SQL 的对象,而不需要所有的包袱,即,从 Linq 到 SQL 对象返回 Pocos 而不需要额外的域模型类?
  • 提取易于转换为(或现在是)Html 辅助对象的对象,如 SelectListItem 枚举?

有没有办法在不破坏关注点分离的情况下做到这一点? 一些巧妙的 oop 技巧来满足需求?

例如,如果它在存储库中,则 SelectListItem 将不存在。这select new是一种从 Linq 到 SQL 中删除对象而没有包袱的好方法,但它仍然引用了一个不应被引用的类:

0 投票
3 回答
2035 浏览

c# - ASP.NET MVC:什么机制返回 ViewModel 对象?

据我了解,域模型是仅描述数据(聚合根)的类。它们是 POCO,不引用外部库(没什么特别的)。

另一方面,视图模型是包含域模型对象以及所有接口特定对象(如SelectList. 一个 ViewModel 包括using System.Web.Mvc;.

存储库从数据库中提取数据并通过域模型对象将它们提供给我们。 什么机制或设备创建视图模型对象,从数据库中填充它们? 它会是一个可以访问数据库的工厂吗?您会将诸如 System.Web.Mvc 之类的视图特定类引入存储库吗?还有什么?

例如,如果您有一个城市下拉列表,您将在 View Model 对象的根目录中引用一个 SelectList 对象,就在您的 DomainModel 引用旁边:

城市应该来自数据库并采用选择列表对象的形式。希望您不要创建特殊的 Repository 方法来仅提取不同的城市,然后仅创建冗余的第二个 SelectList 对象,以便您拥有正确的数据类型。

0 投票
7 回答
2706 浏览

unit-testing - 如何保持你的单元测试简单和隔离,同时仍然保证 DDD 不变量?

DDD 建议域对象在任何时候都应该处于有效状态。聚合根负责保证不变量和工厂组装具有所有必需部分的对象,以便它们在有效状态下初始化。

然而,这似乎使创建简单的、独立的单元测试的任务复杂化了很多。

假设我们有一个包含 Books 的 BookRepository。一本书有:

  • 一位作家
  • 一个类别
  • 您可以在其中找到这本书的书店列表

这些是必需的属性:一本书必须有作者、类别和至少一个可以购买该书的书店。可能存在 BookFactory,因为它是一个相当复杂的对象,并且 Factory 将使用至少所有提到的属性来初始化 Book。也许我们也会将 Book 构造函数设为私有(以及嵌套的 Factory),这样除了 Factory 之外,没有人可以实例化一个空的 Book。

现在我们要对返回所有书籍的 BookRepository 方法进行单元测试。为了测试该方法是否返回书籍,我们必须设置一个测试上下文(AAA 术语中的排列步骤),其中一些书籍已经在存储库中。

在 C# 中:

鉴于我们可以用来创建 Book 对象的唯一工具是 Factory,因此单元测试现在使用并依赖于 Factory,并且不正确地依赖于 Category、Author 和 Store,因为我们需要这些对象来构建 Book,然后将其放入测试上下文。

您是否会认为这是一种依赖关系,就像在服务单元测试中我们将依赖于服务将调用的存储库一样?

您将如何解决必须重新创建整个对象集群才能测试简单事物的问题?您将如何打破这种依赖关系并摆脱我们在测试中不需要的所有这些 Book 属性?通过使用模拟或存根?

如果你模拟存储库包含的东西,你会使用什么样的模拟/存根,而不是模拟被测对象与之交谈消费的东西?

0 投票
1 回答
1459 浏览

asp.net-mvc - ASP.NET MVC 2:编辑表单中订单/订单行背后的机制

在这个问题中,我正在寻找链接/代码来处理IList<OrderLine>MVC 2 编辑表单中的一个。具体来说,我有兴趣向客户发送完整的订单,然后使用:

Html.EditorFor(m => m.orderlines[i])(其中 orderlines 是一个可枚举对象)将编辑后的订单发布回一个对象(以保持)

编辑具有多个订单行(两个表,Order 和 OrderLine,一对多)的订单显然很困难。 是否有任何链接/示例/模式来建议如何创建此表单,以单个表单(在 C# MVC 2 中)编辑实体和相关实体?

IList 真的让我陷入了一个循环。我应该把它放在那里(同时仍然有一个表格来编辑一个订单)吗?您如何使用服务器端工厂在表单中创建一个空白的 OrderLine,而不将整个表单发送回服务器?我希望我们不要使用单独的保存按钮、删除等来处理单独的订单行(例如,他们可能会打开订单,删除所有行,然后单击取消,这不应该改变订单本身存储库或数据库。

示例类: