【发布时间】:2020-05-14 06:04:23
【问题描述】:
我生活和宣扬 DDD,几乎我开发的每一个项目都以以下形式结束:
- Application Layer
- Business Layer
- Domain Layer
- Data Layer
这里的每一层都是一组可执行文件或 dll,它们共同构成了应用程序。每个 dll 都以 net48、dotnetcore3.1 和 netstandard2.1 为目标,以实现最大的可重用性。
最近,在一个爱好项目中,我在跨 WPF 应用程序、WebAPI 和一组 Azure Functions 共享组件和定义方面具有可重用性优势。但是现在,我的需求扩展到包括移动(Xamarin)应用程序,所以我想我会将域层移动到一个 nuget 包中,然后将不同的实现引入到不同的应用程序中。这使得重做专门为新的移动应用程序实现的身份验证、日志记录等事情变得很容易,因为域的定义在一个 nuget 包中。
我想知道我的方法是否合理。拥有 nuget 包的好处在一定程度上是好的,但同时,修复小东西或向实体添加属性需要我重新发布和更新版本。单元测试负责逻辑,但我仍然怀念进行良好老式调试的能力。
您对这种方法有何想法和经验?
【问题讨论】:
-
嘿。有趣的是更多关于不同层代表什么的信息,特别是关于应用程序层和业务层的内容?您认为应用程序是 WebAPI、WPF 等吗?就个人而言,我认为应用程序层是应用程序的服务/网关(包括协调),域端是模型和工厂,它们定义了特定的域参与者(聚合 +)。注意。有多种方法可以解决这个问题,但我想先了解更多。
-
我通常将所有编排类保留在业务层中(以保持稳定)。这就是我将服务类视为结合验证器和存储库的编排器的方式。对我来说,应用层是实际可执行文件所在的层,一个 ASP.NET 项目、UWP 项目、Xamarin 等。领域层仅包含声明、实体、值类型和在其他地方实现的所有接口。
-
我问是因为我认为应用程序是服务和域模型的组合。然后 API、WPF 应用程序等成为您实际应用程序的“接口”(插件)。因此,您实际上想要打包应用程序本身。
标签: c# .net architecture nuget domain-driven-design