域驱动设计:“如果E存在,则A,否则B”逻辑属于应用程序服务还是域服务?

时间:2018-11-05 08:00:34

标签: domain-driven-design

说我想根据是否存在特定实体来采取不同的操作,例如:

item := itemRepository.Find(id)
if item != nil {
    item.Description = newItem.Description
    ...  // More actions
    itemRepository.Save(item)
} else {
    ...  // More actions
    itemRepository.Save(newItem)
}

我相信这段代码应该属于应用程序服务或域服务,但不能真正确定哪一个是正确的。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

两者都不是。依赖于域状态的逻辑属于域模型。

item = items.Find(id)
item.doTheCleverThing(newItem)
items.Save(item)

这里的分支逻辑属于存储库。

Find (Id id) {
    state = database.Fetch(id)
    if (null == state) {
        return factory.defaultItemWithId(id)
    } else {
        return factory.item(state)
    }
}

免责声明:通过阅读Evans中的原始文本,不是很明显。他关于生命周期的章节确实不能很好地解释创建方式,并且他对存储库的描述也很薄。