- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个经典的 DDD 问题;我有一个做一些事情的域服务“DetectPriority”。
PM 要求我创建 2 个不同的服务;一个 INTERNAL(包含完整的业务规则并涉及许多其他领域模型)和另一个 ETERNAL(一个简单的 API 调用)。
域内有一个接口(interface)“DetectPriorityInterface”。
两个实现必须同时处于事件状态;一种“混合”必须实时选择一个而不是另一个。
问题是:这些实现(两个实现)应该放在哪里:在域层或基础设施层?
内部实现充满了业务规则,应该驻留在领域层。
外部实现是一个简单的调用,应该存在于基础设施中。
我们应该把两者都放在基础设施层吗?
谢谢
编辑
实际上,我们有一个接口(interface)“DetectPriority”和三个实现,都在我们的域层中(临时“错误”解决方案):
最佳答案
简短的回答是,您应该在域层实现内部服务,在基础设施层实现外部服务,正如您在问题中所说的那样。这样,一切都会在它的位置。
另一个需要考虑的重要事情是决定调用哪个服务的代码也应该在域层中。正如我从您的问题中可以想象的那样,您可以使用某些业务规则来决定使用哪个检测器。一个检测器在您的应用程序中实现,而另一个检测器未实现这一事实只是您系统的实现细节。实际上,您只是根据某些条件决定使用一组业务规则或另一组业务规则。这是一个商业决策。
DDD 通常是关于艰难的妥协。但是当你正在寻找一个好的折衷方案时,我会建议 从不将域逻辑移到域层之外,从不将领域层的引用添加到其他层。
这是必不可少的。
这是一个示例,说明如何在不违反这些规则的情况下解决此任务:
// Names in this code should be changed to something with business
// meaning. For example `externalDetector` can be `governmentDetector`
// and `internalDetector` can be `corporateDetector`.
// Declare a service interface in the domain layer
public interface DetectPriority {}
// Inject both detectors in the domain service.
// Your dependency injection code should inject here
// an internal implementation and an external one,
// implemented in the infrastructure layer.
// So your DI code knows about different implementations
// but the domain service doesn't.
// For the domain service it's just two implementations
// of domain interface IDetector
IDetector _externalDetector;
IDetector _internalDetector;
// Implement the method of the domain service like this:
public Priority Detect()
{
if (weShouldUseExternalSetOfRules)
{
return _externalDetector.Detect(); // this one is implemented in your infrastructure layer
}
else
{
return _internalDetector.Detect(); // this one is implemented in your domain
}
}
在此解决方案中,您可以看到:
IDetector
接口(interface),但是这个接口(interface)是在领域层声明的。 externalDetector
执行。 MixerDetector
应该在应用层DetectPriority
接口(interface)-在域层InternalDetector
在域层ExternalDetector
在基础设施层InternalDetector
和
ExternalDetector
.
关于domain-driven-design - DDD - 域服务实现 : Domain or Infrastructure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64010238/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 1年前关闭。 社区上个月审查了是否重新打开此
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我与我们的开发团队进行了讨论,以在应用程序服务器上安装本地MTA,或者是否应该使用内部网络上的MTA服务器发送电子邮件。两种解决方案都各有利弊。 优点:发送电子邮件的程序可以将其传递到本地MTA,而不
文档说( Terminating an Instance ),已终止的实例暂时保留在状态为已终止的实例列表中。 从控制台中删除终止的实例是否有任何特定的时间限制? 最佳答案 终止 API 调用成功后停
我从一个全局变量的地址得到了一个 *TypeB 类型的常量指针,我需要将它转换为一个 *TypeA 类型的指针,其中 TypeB 不同于 TypeA 但也是有效的 TypeA。 例如 TypeA 可能
我无法可靠地允许启用了istio的Google Kubernetes Engine集群通过extensible service proxy连接到Google Cloud Endpoints(服务管理A
我对云没有经验。我在 Oracle Cloud 中创建了一个计算实例。但是,当我尝试使用公共(public) i/p 通过 ssh 访问它时,它显示“无法连接到主机端口 22:操作超时”。我已经为实例
我正在使用 FuentMigrator 和 FluentMigrator.Runner 3.1.3 我的迁移工作正常并针对数据库执行。但是当我尝试执行嵌入式资源 sql 时,我收到以下错误消息: 无法
我试图将我的网站上传到服务器。它在我的本地主机上运行良好,所以我将本地主机 wwwroot 文件夹中的所有内容上传到服务器并更改了连接字符串。 但是有这个错误: Exception informati
当我尝试访问我的应用时,我收到以下错误。 AppRegistryNotReady: The translation infrastructure cannot be initialized befor
您好,我已经使用下单方法在软层上订购了 block 存储设备。我想知道订购设备的名称和 ID。怎么会知道呢。下订单方法不返回 id 或名称作为响应。我需要 id 才能在 softlayer 上调用一些
引导卷是指包含操作系统文件的磁盘卷吗?引导卷和块卷的定义是什么? 最佳答案 是的,通常启动卷用作计算实例的操作系统磁盘,块卷用作数据存储,但启动卷也是一种块卷。 一些差异: 启动实例不需要块卷,但需要
我在 Macbook Pro 上创建了一个网络(位于 WiFi 列表下方),并且有 2 个 iOS 7(iPad 2 和 iPod Touch)设备加入到该网络。当我开始浏览设备时,我只是在 nati
全部,我正在编写一个 Powershell cmdlet。让我的本地机器上的 cmdlet 一切正常。查看访问远程计算机所需的内容,似乎我需要在我的项目中引用 Microsoft.Management
我正在沉浸在 DDD 中,并且有一个关于什么属于该域以及什么是基础设施问题的问题。 描述域的简化示例: 应用程序中的上下文之一是关于允许用户检查网页以获取某些信息的便利功能。即.. “用户想要检查网页
本文整理了Java中pl.allegro.tech.hermes.infrastructure.zookeeper.ZookeeperPaths类的一些代码示例,展示了ZookeeperPaths类的
本文整理了Java中pl.allegro.tech.hermes.infrastructure.zookeeper.ZookeeperTopicRepository类的一些代码示例,展示了Zookee
本文整理了Java中pl.allegro.tech.hermes.infrastructure.zookeeper.ZookeeperSubscriptionRepository类的一些代码示例,展示
本文整理了Java中pl.allegro.tech.hermes.infrastructure.zookeeper.ZookeeperGroupRepository类的一些代码示例,展示了Zookee
伙计们,我对添加对 Microsoft.Web.Infrastructure.dll 的引用感到非常痛苦,也许有人可以帮我解决这个问题。 我正在尝试添加对 Microsoft.Web.Infrastr
我是一名优秀的程序员,十分优秀!