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