首先,我有一个电子商务网站中的两个独立聚合体购物篮和订单。 购物篮聚合体有两个实体购物篮(作为聚合根)和购物项,定义如下(为简单起见,已删除工厂和其他聚合方法): public class Basket : BaseEntity, IAggregateRoot { public i...
我读过几篇文章(包括书籍《功能域建模》),其中提出了将领域对象的状态与行为解耦的建议,但我无法理解这种方法相对于完整领域模型的优势。 以下是一个完整领域模型的示例: case class Account(id: AccountId, balance: Money) { def activ...
背景: 我有一个Person领域对象,它是一个聚合根。下面是该类的一部分内容。 我正在公开方法来执行对象的行为。例如,要添加银行账户,我有AddBankAccount()方法。虽然我没有包括类的所有方法,但可以说任何公共属性都必须使用方法进行更新。 我将创建一个IPerson存储库来处理C...
我正在面临一个关键的设计问题,与如何将自定义字段附加到我的系统中的实体相关。这些实体在C#中表示,并在RavenDB中持久化。我们大致遵循领域驱动设计的原则,我们的实体是聚合根。 [注意:我想避免任何关于在DDD方法中使用通用功能(例如自定义字段)是否合适的争论。让我们假设我们有一个合法的用...
在DDD中,聚合应该代表事务边界。需要涉及多个聚合的交易通常意味着模型应该被细化,或者事务需求应该被审查,或者两者都需要。 这是否意味着事务边界是每个聚合根实例还是每个聚合? 假设我有一个名为“Node”的聚合根,在每个“Node”中,我有一个“Fields(值对象)”集合。每个“Fiel...
我在理解聚合根如何跟踪子实体的更改方面遇到了一些困难。 假设我有一个聚合: 订单(根) 订单行项目 其中Order类是聚合根。那么,我如何通过Order类来跟踪每个OrderLineItem的更改? 当我创建一个仓储(实现),例如OrderRepository(因为只有聚合根才能拥...
在Effective Aggregate Design中提出了一个具有多个版本的产品域。在这篇文章中,Vaughn得出结论,产品和版本都应该是它们自己的聚合根。 现在假设我们添加了一个功能 作为发布管理器,我希望能够对发布进行排序,以便我可以为用户推出更大的史诗故事 我不是一个有特定...
在领域驱动设计中,如果我想使用一个存储库,我需要为它拥有一个聚合根 - 我的理解是这样的。 因此,我有一个用户,它具有id、登录、电子邮件和密码。用户是一个具有唯一ID的领域实体。 当我想要将用户添加到用户存储库时,是否应该首先构建一个仅包含聚合根的聚合,即我的用户实体,而没有其他内容?在...
我们正在使用事件源和从事件流构建聚合。 我有两个聚合 - A1和A2。A1用作模板以创建A2。 A1的大小可能相当大。 事件源的基本思想是确保对应用程序状态的每个更改都在事件对象中捕获。 因此,为了保存A2,我们必须在第一个事件中存储大量信息。 这种情况常见吗?还是从模板创建不是一个好主意?...
我是一名正在学习领域驱动设计的人。目前,我正在尝试使用DDD设计来编写一个简单的C#应用程序。该应用程序有一个聚合根A,其中可以包含0..n个子实体B。这可以用以下示例表示: class A { public int Id { get; } public IList<B...