【发布时间】:2015-04-01 12:09:46
【问题描述】:
我正试图找出将我的实用程序类放在基于 DDD 的项目中的位置。案例如下:
我有一个名为 CookieAwareWebClient 的类,它是核心工作所必需的。从我在网上阅读的内容来看,这似乎是属于基础设施层的一个类,但是不应该从核心层引用基础设施层。这意味着我不能将核心层所依赖的功能放置在基础设施层中。那么这个 CookieAwareWebClient 类应该放在哪里呢?
【问题讨论】:
-
这个名字听起来显然是基础设施的一部分。如果不进一步了解您的代码和应用程序,我会说当您的核心依赖于此类时,您遇到了设计问题。
-
@Jehof 对此类的依赖源于核心层中的服务类,该服务类从 API 检索数据并将所述数据返回给调用应用程序。我认为在这种情况下,存储库只会过多。你怎么看?
-
所以 CookieAwareWebClient 用于调用您的核心所依赖的外部服务。对吗?
-
没错。它用于连接到 API 并从所述 API 返回数据。我核心中的服务基本上是这个 API 的包装器。
-
你的领域模型和这个服务有什么关系?通常,您会在域模型中声明一个接口并在基础设施层中实现它,就像使用存储库模式(即依赖倒置原则)一样。此类服务通常由应用程序服务使用,而不是由域使用。例如,很少从实体中使用存储库。如果可以,让应用程序层解决依赖关系,但如果这不切实际,您总是可以在方法级别将服务注入实体。使用接口隔离会有所帮助。