根据“域驱动设计”,域服务封装了自然不适合域对象的业务逻辑。域服务的定义很明确,但我如何区分业务操作是属于域对象还是域服务。例如我有一个Account类和一个业务动作调用传输,域服务和域对象都可以完成传输任务。我应该选择哪一个?
public class Account
{
public void Transfer(Account bar)
{
//do something
}
}
public class AccountService
{
public void Transfer(Account foo,Account bar)
{
//do something
}
}
答案 0 :(得分:1)
在“领域驱动设计”中,Eric Evans表示:
当域中的重要流程或转换不是自然责任时 ENTITY或VALUE OBJECT,作为声明为a的独立接口向模型添加操作 SERVICE。
这里最重要的一点可能是自然责任。
由于将资金从一个账户转移到另一个账户并不是账户的实际责任,我会选择服务方式。
如果其他操作可能与转移相关,则会更加清晰。 Account类的职责是封装相关数据。
帐户责任的示例如下:
请注意,所有这些职责仅涉及对象本身或其关联或聚合对象。
答案 1 :(得分:0)
转账是账户的自然责任。它可能需要辅助对象。对象应该是活动的,而不是被动数据持有者。