Domain driven design 实例化对象-多态性
我有一个处理“债券”的财务应用程序。我需要Domain driven design 实例化对象-多态性,domain-driven-design,ddd-service,domain-data-modelling,Domain Driven Design,Ddd Service,Domain Data Modelling,我有一个处理“债券”的财务应用程序。我需要 为应用程序建模以避免贫血模型(我理解这是不好的) 根据债券的类型实例化不同的实现 系统从外部系统获取指令,并将指令应用于指定的绑定。因此我有一个指令实体 Instruction[Id,BondReference,Action,Value] e、 g.指示对通过的债券决议投票“是” 以及债券实体 Bond { Id: 1, Reference: Bond1 Resolutions: [
Instruction[Id,BondReference,Action,Value]
e、 g.指示对通过的债券决议投票“是”
以及债券实体
Bond
{
Id: 1,
Reference: Bond1
Resolutions: [
{Resolution1: We have resolved to increase our stake in Google},
{Resolution2: We have resolved to fire the CEO}
...
]
Instructions: [Inst1,Inst2,Inst3...]
}
但是,一条指令通常不止做一件事(实际上是一条指令中的多条指令),例如,取消前一条指令的指令,这意味着,首先它取消前一个事务,然后需要重新计算某些值。此外,一条指令可能会过载,它可以是取消上一条指令以及投票支持一个决议
我被建议使用域服务来处理新指令
BondService
{
public void Apply(Instruction newInstruction)
{
var bond = _bondRepository.GetByReference(newInstruction);
bond
.RecalculateNominalValue(newInstruction)
.CalculateInterest(newInstruction)
.CancelInstruction(newInstruction)
.Approve(newInstruction);
}
}
我看到这种结构的问题是,对于每一条指令,即使方法不相关,也会调用所有方法。我可以使用一些if语句,但是代码看起来会不整洁
现在我的问题是,
似乎用于命令DTO和用于存储审核跟踪的值对象。将这两个概念解耦指令
实体是金融领域的典型实体,要求。实际上,通过存储所有指令和分辨率,您已经做到了。把它说清楚。如果您将对绑定的任何更改显式地作为域事件进行,则可能不需要存储所有指令。一条指令可能导致多个事件债券
- 域服务的示例实际上是一个或一个命令处理程序。应用程序服务协调存储库和对域对象的委托。为了最好地实现应用程序服务,将尽可能多的业务逻辑委托给域对象,在本例中是一种
。因此,让Bond
实体精确地决定要调用的子行为,以便应用程序服务只调用实体上的单个方法Bond
- 要提供多态性,请创建一个值对象以允许表示不同的键类型。将键实体委托给此多态键类型值。您可能需要一个工厂来初始化这个绑定类型VO,但是一旦它与绑定实体相关联,您就不再需要调用工厂,绑定只引用绑定类型VO
BondService
{
public void Apply(Instruction newInstruction)
{
var bond = _bondRepository.GetByReference(newInstruction);
bond
.RecalculateNominalValue(newInstruction)
.CalculateInterest(newInstruction)
.CancelInstruction(newInstruction)
.Approve(newInstruction);
}
}