我要寻找的DDD建模和ValueObjects专门嵌套层次一些建议。
采取下面的代码,这是我的域名是如何开始形成的简单化样品。这是所有在我的合同约束方面,并已确定合同中的总根源。这确实让同领域专家基于感过讨论会,但我不知道如果我要对这个错误的方式。
我有这个嵌套的问题是:
1 - 我现在已经失去了创造简洁域事件,如TreatyDetailsCreated而是需要触发事件的水平之上,从而ContractCreated作为例子的能力。
2 - 我的命令又开始遵循这一类似的嵌套形式使他们失去清晰度
3 - 我现在强迫每个我需要更新一些深图中的时间来加载的合同,并且不需要这些价值较高的对象执行不变。
我的问题是我会得到更好的寻找到潜在的具有定义为aggreagtes我的第一级嵌套的对象吗?这样就解决了我的问题筑巢,让我夺回描述域中的事件。我不变量将只在在提交点的合同水平,使合同感觉就像一个逻辑容器比什么都被执行,将有可能被一个域服务内处理因复杂性。
public class CreateContractCommand
{
public CreateTreatyDetails CreateTreatyDetails { get; set; }
}
public class CreateTreatyDetails
{
public string Umr { get; set; }
}
public class Contract : Aggregate
{
internal TreatyDetails TreatyDetails { get; private set; }
private Contract() { }
public static Contract Create(CreateContractCommand command)
{
var contract = new Contract {TreatyDetails = new TreatyDetails(command.CreateTreatyDetails)};
//Raise domain events
return contract;
}
}
public class TreatyDetails : ValueObject
{
//Additional properties removed for simplicity
public Umr Umr { get; private set; }
public TreatyDetails(CreateTreatyDetails createTreatyDetails)
{
Umr = new Umr(createTreatyDetails.Umr);
}
}
public class Umr : ValueObject
{
public string Value { get; private set; }
public Umr(string value)
{
//Validate value
Value = value;
}
}
所以花了一些时间在这里通过搜索结果从“DDD”查询我的沃恩弗农跨越的文章跌跌撞撞这给了我指点,帮我继续我的旅程照看。
根据短文它已经证实了我的悬浮液,我应该有多个聚集的内容。因此,对于我的例子,我将有TreatyDetails和合同,其中合同都会有一个参考(TreatyDeatilsId)回来。