我正在使用具有以下层的 Entity Framework 6 开发 WinForms 应用程序:
- 介绍
- 应用
- 领域
- 基础设施
当用户从 UI 中单击保存按钮时,它会调用应用程序层中的应用程序服务并传入请求。然后,应用程序服务使用该请求调用域服务。域服务调用域模型中的多个实体来对请求中使用的数据执行验证。
域模型中的一个或多个验证需要来自存储库的信息,以确定从表示层接收到的请求中的数据是否符合某些业务规则。
我正在考虑两种选择来解决这个问题。
让应用程序服务从存储库中检索验证所需的信息,并将这些值传递给域服务,域服务将调用域模型和实体来验证传入的规则和值请求。然后让应用服务在域服务完成验证后保存请求,这将导致将控制权返回给同步等待验证完成的应用服务。如果我这样做,那么域层将没有对存储库的直接或间接(注入)引用。如果我这样做,域服务的单元测试会更容易,因为没有注入任何东西来执行验证。它需要的一切都已经传入。
在调用域服务以验证请求时,将应用程序服务的实例注入其中。然后,域服务可以使用注入的应用程序服务从存储库中获取信息,其服务合同在域层中定义。一旦所有信息都可用,它会根据需要传递给各种实体以验证规则和值。验证完成后,域服务使用注入的应用程序服务保存请求。当域服务完成并退出时,它会将保存操作的状态返回给一直在等待验证完成的应用程序服务。外部等待的应用程序服务然后可以将保存的结果返回给 UI。
哪种选择或其他行动方案会更好?提前致谢。