【发布时间】:2018-06-11 17:08:53
【问题描述】:
我读过的一些关于 DDD 的文章表明,应用层中的应用服务或命令 (CQRS) 密切反映了特定的用例。
对于简单的用例,这种映射很有意义,但在需要多个用户交互的更复杂的情况下,我试图了解如何映射 API 的更粗粒度级别,而不将应用程序逻辑推入 UI。
示例: - 想象一个应用服务:
ImportProductData(date_source)
- 从系统/UI 的角度来看,在导入产品数据时,我们希望检查是否有任何产品已经存在,如果存在,则在继续之前提示用户是否要继续。
我通常的做法: 扩展 API 以包括:
DoesIncludeExistingProducts(data_source)
如果返回true,提示用户是否要继续,然后调用。
ImportProductData(date_source, overwrite=True)
我的问题是,这是否会将大部分应用程序逻辑转移到 UI 层? (即 UI 现在正在控制是否可以覆盖产品,以及在导入产品数据之前是否应检查现有产品等)
如果是,我无法想象应用程序层和域层将如何处理这个问题?除了:
调用:
ImportProductData(date_source)
如果失败,检查失败的原因,如果由于产品已经存在,提示用户并再次调用:
ImportProductData(date_source, overwrite=True)
这感觉就像做与上面相同的事情的不同方式。
这可能看起来有点迂腐,但我正在努力使表示层 (MVC) 尽可能轻薄。
关于更优雅的解决方案的想法?
【问题讨论】:
标签: user-interface architecture domain-driven-design ddd-service application-layer