【发布时间】:2021-11-22 08:08:31
【问题描述】:
我有一个使用 Onion 架构的桌面应用程序,用户应该能够在其中创建和编辑磁盘上的本地文件。
我有以下几层:
Presentation->Application->Domain
Infrastructure->
我希望能够在处理文件时向用户展示问题,以便用户可以采取一些操作,例如选择是否覆盖已经存在的文件。但据我了解 DDD 应用程序层应该不了解基础设施层中的持久性细节。我的想法是异常(例如 FileExistsException)可能是应用程序层中接口契约的一部分,并从基础设施层的实现中抛出,但随后应用程序层会知道存储类型。
这也许可以,因为处理文件是应用程序范围的一部分?
我的问题主要是关于异常处理,但我发现还可以共享其他信息。
更新:
为了稍微扩展问题并更具体地说,用户使用保存为 JSON 文件的数据模型,因此我在域中拥有这些数据模型,并且文件的概念仅在实际持久化时用于基础设施层/更改文件。
如果将来我想给用户一个选项,将存储从本地磁盘更改为数据库,在那里他们将获得完全不同类型的异常来处理,是否也将必要的数据库特定信息添加到域名?
换句话说,如果用户有必要与之交互,即使它不一定是实际业务的一部分,是否可以将实现细节添加到域中?
在我看来,用户存储信息的方式是实现细节,应该远离域?
【问题讨论】:
标签: domain-driven-design onion-architecture