- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
OHS ...打开主机服务
AL ...应用层
ACL ...反腐败层
BC ...有界上下文
1.
当我们的 OHS的公共(public)接口(interface)只能由外部BC调用ozt_strong我们的系统,但是不能被我们的 BC用来调用外部系统时,我将在这里使用术语单向。
同样,当外部BC可以使用我们的 OHS的公共(public)接口(interface)来调用我们的系统时,我将使用术语双向,但也可以由我们的 BC 使用它来调用外部系统
a) OHS 是单向的还是双向的?我会说它只能是单向的?
b)同样, AL是是单向的还是可以是双向的?我会说它只能是单向的?
2. 我假设 OHS 不能代替 AL ,而是位于应用程序服务/AL之上?
3.
a)是否应将 OHS 也用于同一应用程序的BC之间的通信,还是应仅将 用于与外部BC的通信?无论答案是什么,请详细说明您的推理?
b)假设BC之间相互通信是同一应用程序的一部分,并且假设我们不使用 OHS -这些BC之间是否应该直接相互通信(即BC将调用 ACL ,这反过来将使直接致电BC)还是通过 AL (即BC会调用 ACL ,后者会调用 AL ,然后直接致电BC)?
我认为这些BC应该直接通信,而不应该通过 AL 进行通信,因为它可能会膨胀 AL的接口(interface),并且还可能向外部系统公开内部功能?
4.
埃里克·埃文(Eric Evan)的DDD书,第16页。 375:
Open Host Service uses a standardized protocol for multiparty integration. It employs a model of the domain for interchange between systems, even though that model may not be used internally by those systems.
1b) An ACL is bidirectional in that data flows in either direction - either when you're sending a message to external service or interpreting a message received from said service.
3b) Assuming BCs communicating with each other are part of the same application and assuming we don't use OHS - should these BCs communicate with each other directly ( ie. BC would call ACL, which in turn would make a direct call to BC ) or via AL ( ie. BC would call ACL, which would call AL, which then would make a direct call to BC )?
如果不使用OHS,请致电另一个BC的应用程序服务。
a)因此,您是说BC应该调用 ACL ,它将调用 AL ,然后可以直接调用另一个BC?
b)同一应用程序内的BC是否共享相同的 AL ?
c)如果内部BC确实共享相同的 AL ,这并不意味着我们可能被迫定义某些应用程序服务,这些服务的唯一目的是使内部BC能够相互通信(因此,外部客户端无意调用这些特定的应用程序服务)。这样,这些应用程序服务是否不会向外部客户端公开内部功能?
说明:我知道,外部客户端只有在引用包含我们应用程序服务的dll的情况下,才能直接调用我们的应用程序服务,但是如果某些客户端确实引用了此类dll的话,则有可能他们可能会调用预期的应用程序服务仅由内部BC互相调用使用?
4.
b)
I assume that we should also define a translation/anticorruption layer sitting between OHS and the rest of our application?
实际上,OHS将是该翻译层。它将委托(delegate)
应用程序服务的所有行为,在适应过程中
用于实现OHS的特定技术。
根据Evans的说法, OHS 应该仅将基础域模型用作其自身模型的基础,这意味着这两个模型应该是单独的“实例”。
领域模型应该完全遗忘除其建模的领域以外的任何内容。不相同的规则也适用于 OHS 模型吗?换句话说, OHS 模型不应该不了解其他层和域,因此不应该将消息从其自身的模型转换为由基础 AL 封装的域模型吗?
C)
Are arguments and return values of Application services defined in terms of application's domain model?
根据DTO定义接口(interface)
假设应用程序服务的接口(interface)是根据DTO定义的: OHS 是根据 OHS 模型定义的,而应用程序服务则封装了域模型,但是什么模型定义了这些DTO?换句话说,这些DTO是 OHS 模型的一部分,还是 AL 封装的域模型的一部分,还是...?
5.
Does BC always use Infrastructure services to call another BC ( of course if BC is using ACL, then BC would call ACL, which in turn would call Infrastructure layer, which would then call the other BC ), regardless if that other BC is external or part of the same application?
可以说,无论被叫BC是内部的还是内部的
在外部,您仍然在某种程度上采用ACL。
a)仅当存在外部模型泄漏到我们模型中的危险时才不应该使用 ACL 吗?
b)由于内部BC(同一应用程序中的BC)应通过 AL彼此对话,我假设您将通过基础结构层将这些BC称为 AL ,因为域层不应该对上层有任何依赖性(即 AL )?
c)因此,您不同意@ mrhobo ,它指出内部BC应该彼此直接相互通信 (如果BC使用 ACL ,则BC将直接称为 ACL ojit,将 ACL称为其他BC),而不通过 AL 吗?为什么?
EULERFX,第二次更新:
1。
b)
If the latter, in 4b) you said OHS itself also acts as a translator, which suggests that ACL used by our BC for calling external systems won't also be used when external systems call our BC, which would imply that ACL can't be bidirectional?
由OHS执行的翻译与ACL类似,是
本质上有所不同,因为它具有技术特征。
因此,Evans的意思是(第368页) “ACL可以是双向的” ,因为如果按照您的建议实现了通信,则 ACL 永远不可能是双向的(而 所使用的 ACL1 可以被使用BC1 a从 BC2 回复,即使 BC2 调用 BC1 ,即使 BC1 和 BCt会内部使用BC2的笔记,也会永远不使用 BC2 ACL ,我只是指出Evans谈论双向 ACL ,换句话说,他的意思是当 BC2 调用 BC1 时, ACL1会收到此调用吗?
3.
c) If internal BCs do share the same AL, doesn't this mean that we may be forced to define some Application services whose only purpose is to enable internal BCs to communicate with each other ( thus external clientsare not meant to call these particular Application services ). As such, don't these Application services expose inner functionality to external clients?
如上所述,BC应该共享应用程序服务,即使它们是内部的。
那没有多大意义。
a)我认为这是拼写错误,您的意思是应该而不是应该?
b)内部BC还不共享 OHS 吗?
c)如果内部BC通过 OHS 相互通信,我们将不会遇到与这些BC通过 AL 进行通信时遇到的相同问题(即,我们可能被迫定义一些 OHS 服务,其唯一目的是启用内部BC相互通信,因此 OHC 这些服务可能向外部客户端公开内部功能)?
5.
一种)
Shouldn't ACL be applied only when there's a danger of the outside model leaking into our model?
是的,但是如果您调用某些人,情况总是如此
外部BC。如果BC是本地拥有的,那么您可以拥有一些
关于模型(共享内核)的共同协议(protocol),但仍然很常见
更容易将它们解耦。
我认为,即使脱钩,如果两个BC之间的公共(public)接口(interface)足够简单(至少我是这样理解Evans的),我们仍然可以拥有一个简单的转换层(而不是完整的 ACL )?
MRHOBO
3。
b)
Assuming BCs communicating with each other are part of the same application and assuming we don't use OHS - should these BCs communicate with each other directly ( ie. BC would call ACL, which in turn would make a direct call to BC ) or via AL ( ie. BC would call ACL, which would call AL, which then would make a direct call to BC )?
AL旨在将域与其用户和使用方式分开
用法。居住在同一应用程序中的不列颠哥伦比亚省不应该
通过这些层进行通信,但应成为其中的一部分
同一域层。
因此,您不同意@ eulerfx 关于内部BC通过 互相调用AL 的观点吗?为什么?
2)
I assume OHS doesn't replace AL, but instead sits on top of Application services/AL?
它可以位于AL的顶部,但也可以直接位于AL的顶部
公元前。 AL和OHS非常相似。如果BC的所有用法
在我看来,取决于OHS,几乎没有必要创建一个
在AL之间。
您能澄清一下在什么情况下BC的所有用法都将仅取决于 OHS ,以及何时还取决于 AL AL 吗?
4,
b)
Since our OHS has it's very own model ( which is usually based on Core Domain, whatever that may be ), I assume that we should also define a translation/anticorruption layer sitting between OHS and the rest of our application?
您将需要适配器来在域模型和域模型之间转换
互动模型,是的。但是,ACL旨在整合两个
BC的使用方式使得使用ACL的BC不了解
另一个卑诗省的存在。这对于使用
OHS,但不应放在服务器上的OHS和BC之间
边。
换句话说, OHS 和 AL 之间的翻译器不应该是 ACL ,而应该是“常规”翻译器?
最佳答案
1.a)OHS是单向的还是双向的?我会说它只能是单向的?
确实,需要通过其自己的接口(interface)访问其他服务的服务根本不是一项服务。
1.b)同样,AL是单向的还是双向的?
类似地,需要访问使用该层的层的层根本不是一个层。与所有分层体系结构一样:依赖关系仅是一种方式。
2)我认为OHS不会取代AL,而是位于应用程序服务/AL之上?
它可以位于AL的顶部,但也可以直接位于BC的顶部。 AL和OHS非常相似。如果我认为BC的所有使用都取决于OHS,则几乎不需要在AL之间创建一个in。
3.a)OHS是否还应用于同一应用程序的BC之间的通信,还是仅用于与外部BC的通信?无论答案是什么,请详细说明您的推理?
这完全取决于您的用例,需求和环境。通常,OHS的构建和维护成本并不便宜,并且出于成本和简便性的考虑,通常避免使用OHS。但是,可能有充分的理由在同一个应用程序中拥有OHS,例如,出于可用性或性能方面的原因而需要分发应用程序时,或者当多个团队在应用程序的不同可互换部分的不同位置上进行工作时。
3.b)假设BC之间相互通信是同一应用程序的一部分,并且假设我们不使用OHS,则这些BC之间是否应直接相互通信(即BC将调用ACL,而ACL又将直接调用ACL) BC)还是通过AL(即BC会调用ACL,后者将调用AL,然后直接调用BC)?
BC可以直接或间接地以许多不同的方式进行通信。这些是DDD概述的模式:客户/供应商,共享内核,反腐败层等。需要明确的是:但是,应用层不是其中之一。 AL旨在将域与其用户和使用方式分开。生活在同一应用程序中的不同BC不应通过此类层进行通信,而应成为同一域层的一部分。应当使用哪种模式来集成BC。 ACL在处理遗留代码时会派上用场,但是,如果您像大多数应用程序开发一样,同时控制两个BC,则肯定不是最佳的解决方案。
4.a)我假设我们的OHS应该仅将应用程序的域模型用作其自身模型的基础?换句话说,OHS不应使用应用程序的域模型,而应仅基于它自己的模型?
是的。如果您不将域模型与交互模型分开,那么您就不再是域建模。交互模型通常涉及与领域无关的概念。
4.b)由于我们的OHS具有它自己的模型(通常基于Core Domain,无论可能是什么模型),我假设我们还应该在OHS与应用程序其余部分之间定义一个翻译/反腐败层?
您将需要适配器在域模型和交互模型之间转换,是的。
但是,ACL的目的是将两个BC集成在一起,以使使用ACL的BC不会意识到另一个BC的存在。对于使用OHS的客户端,这很方便,但不应在服务器端的OHS和BC之间使用。
4.c)是否根据应用程序的域模型定义了应用程序服务的参数和返回值?
他们可以是。这样做通常是为了节省时间,但它不应使您的域模型成为应用程序感知的。
5)BC是否始终使用基础结构服务来调用另一个BC(当然,如果BC使用ACL,则BC会调用ACL,ACL进而会调用基础结构层,然后再调用另一个BC),而不管该另一个BC是否外部还是同一应用程序的一部分?
BC之间的通信并不总是必须跨层。正如我之前说过的,几个BC可以生活在同一个域层中,并且可以DDD概述的几种方式进行集成。当BC是同一非分布式应用程序的一部分时,这适用。分发BC时,这些BC将需要使用基础结构层来与其外部对等方进行交互。
更新
因此,您不同意@eulerfx关于内部BC通过AL相互调用的观点吗?为什么?
是的,看来我愿意。
应用程序层的职责是从其他类型的逻辑(例如表示形式和基础结构逻辑)中抽象出应用程序逻辑,并在应用程序内创建一个单一的真理点。应用程序层模式不是DDD定义的,也不是BC集成模式,例如共享内核,一致性,客户/供应商和反腐败层。
一个应用程序具有一个应用程序层。当您将应用程序层视为BC周围的外观时,eulerfx的建议是正确的,这通常是正确的,但这根本不是应用程序层的定义。如果愿意,请查找它。
您能澄清一下在什么情况下,BC的所有使用都仅取决于OHS,什么时候还取决于AL?
AL和OHS非常相似。 AL打算在应用程序中使用,而OHS则用于外部通信。两者都是门面。当您的应用程序没有表示层,只有OHS时,创建一个介于两者之间的应用程序层是没有意义的。当应用程序具有表示层但还通过OHS公开其BC时,表示层将使用AL,而外部系统将使用OHS,而OHS则将使用AL。
如果存在OHS,则应依赖于AL,因为AL应该是一个真实的点。
换句话说,OHS和AL之间的转换器不应该是ACL,而应该是“常规”转换器?
确切地。
ACL是BC的一部分,但实际上是从另一个BC获取其信息的。这将所有凌乱的集成部分抽象出来,并使BC能够以适合域的方式进行编码。 ACL可以防止BC因这些集成问题而损坏。
这是一个实际示例:https://softwareengineering.stackexchange.com/questions/184464/what-is-an-anti-corruption-layer-and-how-is-it-used
关于domain-driven-design - 打开主机服务VS应用程序层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16778125/
我是 DDD 的初学者。 我不知道谁负责 API 请求的流程。 我不知道谁负责间接依赖于基础设施层的功能。 如带有 Web API 请求的函数。 例如我正在创建在线购物系统,系统支持取消订单。 我想我
我有一个dispatcher-servlet.xml和一个applicationContext.xml。 我一直在做一些重构,并感动 从dispatcher-servlet.xml到applica
哪些工具可用于元建模? 特别是开发图表编辑器,目前正在试用Eclipse GMF 想知道还有哪些其他选择? 有什么可比性吗? 最佳答案 由于许多方面,您的问题对于单一答案来说太宽泛了。 首先,元建模不
我前段时间学习了决策树和决策表。我觉得决策表可以帮助处理条件 If-Then-Else 语句。特别是,我觉得决策表没有副作用,例如,如果您没有注意到您还需要一个“else if”语句。 但我不确定如何
我们的团队开始实现事件驱动设计。我们现在正在确定记录这些事件的模式的最佳工具和实践是什么。 用于此用例的常用工具有哪些? 任何链接或建议表示赞赏。 最佳答案 我将从常见的 CloudEvents sp
我听说过最小化代码和最大化数据的概念,并且想知道其他人在构建自己的系统时如何/为什么应该这样做的建议? 最佳答案 通常,数据驱动的代码更易于阅读和维护。我知道我已经看到数据驱动被极端化并且最终变得非常
我的工作任务是为物流应用程序编写详细的工程计划,我们正在编码该计划以向客户提出建议。有人告诉我这是一个数据驱动的应用程序。对于应用程序来说,“数据驱动”意味着什么?相反的是什么?尽管在网络搜索时我可以
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗?更新问题,使其仅关注一个问题 editing this post . 关闭 4 年前。 Improve this que
我是 DDD 的新手。现在我在看领域事件。我不确定我是否正确理解了这个领域事件,但我只是在想如果领域事件发布失败会发生什么? 我这里有一个案例。当买家从我的网站订购商品时,首先我们将创建一个对象,Or
当我在我的软件项目中实践 DDD 时,我一直面临这样的问题:“为什么我应该在实体中实现我的业务规则?它们不应该是纯数据模型吗?” 请注意,根据我对 DDD 的理解,域模型可以由持久模型和值对象组成。
我有一个名为 Campaigns 的聚合,每个聚合都有一个名为 campaign 的根实体,这个根实体有一个尝试列表(实体) public class Attempts: IEntity
我正在尝试使用分层架构实现 DDD 应用程序。我有: 基础架构层 - 实现应用程序特定技术部分的层。 领域层——包含领域模型的层。 应用层 - 包含与域模型交互的干扰的层。 和接口(interface
最近学习ddd,里面说两个相关的bounded context之间的关系是upstream和downstream。 但是有没有可能在一种情况下A是上游B是下游,而在另一种情况下B是上游又是下游? 但是
我有一个名为 Order 的实体,以及一个聚合根 OrderManager,它根据来自应用层的请求更新订单状态和一些其他信息(AppLayer 调用 OrderManager,OrderManager
让我们假设场景: 我们有系统的用户 每个 User 都有他们的 Clients(Client 总是分配给一个且只有一个 User)< Users 上传不同的 Documents 并且 Document
这是一个 ASP.NET MVC 网站。 在领域驱动设计之后,我们有一个服务层。我们的 Controller 要求应用程序服务类执行各种任务,然后将结果路由到 View 。 业务逻辑由服务类执行。 例
不,这不是重复问题。我有很多关于这个主题的资源,但我仍然觉得我没有完全理解它。 这是我目前掌握的关于什么是聚合和聚合根的信息(来自多个来源,无论是文章、视频等...): 聚合是多个值对象\实体引用和规
我正在重建一个会计软件。该软件可以处理多种类型的交易,例如销售、库存补货和费用。我没有会计背景,但我在网上学到了一些概念。我正在尝试根据这些原则对域进行建模: 一个日记账分录由几条记录组成,每条记录要
我正在从头开始学习 DDD 主题,在许多 DDD 示例中,我看到“存储库接口(interface)”位于域中。这个存储库的真正目的是什么/它到底做了什么或解决了什么问题?这与持久层实现是否对应或有某种
假设我们有以下内容: DDD聚合了A和B,A可以引用B。 管理 A 的微服务公开以下命令: 创建一个 删除 A 链接 A 到 B 取消 A 与 B 的链接 管理 B 的微服务公开以下命令: 创建 B
我是一名优秀的程序员,十分优秀!