【发布时间】:2026-01-08 15:40:01
【问题描述】:
我想减少ApplicationLayer和DomainLayer之间的连接。考虑一下我在域项目中创建了一个 AggregateRoot。如果我直接从 Application 引用 Domain 就可以了。
但是我想使用接口而不是实现,所以我创建了Domain.Contract来保留Domain项目的接口和合同!Domain对这个项目有一个参考来实现接口。如何在应用层使用这个合约。换句话说:
Domain 有 Domain.Contract 的引用。
Application 有 Domain.Contract 的引用。
在域项目中,我有卡片类
在 Domain.Contract 项目中,我有 ICard 接口
在应用程序项目中,我只想引用 Domain.contract 并且我有创建 Card 的 CommandHandlers 方法
CommandHandlerMethod()
{
var card = ICard?!!! //What should I do here?
repository.Save(card);
}
我发现的一种方法是使用工厂。但是工厂现在应该是接口和实现的类,它们在不同的项目中。如果我在 Domain.contract 项目中使用工厂,它将导致引用循环。如果我在 Domain 项目中使用 Factory,应用程序项目将如何使用它?!
【问题讨论】:
-
你想完成什么?
ICard是否包含任何需要抽象的Volatile behavior,还是仅仅是一个数据契约?不要在Contract中定义ICard,而是考虑将Card本身移动到Contract。 -
@Steven 感谢您的关注,我想通过使用域接口或仅域的工厂来松散应用层和域层之间的耦合。在我看来,应用程序不应该知道域将如何构建自己。就我而言,接口只是数据合约。
-
亲爱的@Steven,您现在可以在我的project 的自述文件中看到依赖项
标签: dependency-injection dependencies domain-driven-design