我试图围绕服务层的域驱动设计概念,包括应用程序服务和域服务。我遇到的几乎所有示例都与带有数据库的 CRUD 应用程序有关。我无法理解这些概念如何映射到图形应用程序,例如我为这个问题选择的示例应用程序,它是用 .NET/C# 开发的 Microsoft Paint 的克隆。
我阅读了DDD 中服务层的基本概念和扩展说明。我选择了以下应用层:
基础设施(跨领域)
- 日志记录
数据(文件系统)
- 位图图像、PngImage 等
领域
- 画布、图像、选择、形状、画笔等
应用
演示文稿(本地客户端 WPF)
- 意见
- 视图模型
我正在尝试设计的一个用例是用户在画布上绘制一个矩形。从我读过的,由于用例需要多个域对象的合作,因此域服务 DrawingService 是有意义的。
另一个用例是用户加载要显示的文件。同样,从我读过的内容来看,由于这个用例是一个命令和一个工作流,一个应用程序服务 FileLoadingService 是有意义的。
正如 Martin Fowler 所描述的,我相信 Microsoft Paint 足够复杂,可以保证一个服务子系统,这里基于主题行为。然而,随着应用程序的增长,服务层可以重构为领域模型的分区,例如 CanvasService、SelectionService 等。那么现在是否需要另一个抽象层,也许是应用程序外观,因为多个服务必须协作?
更新1:
最初的评论表明 DDD 架构不适合绘图应用程序。有什么替代方案的建议吗?