Domain driven design 开放主机服务与应用层
OHS。。。打开主机服务Domain driven design 开放主机服务与应用层,domain-driven-design,Domain Driven Design,OHS。。。打开主机服务 AL。。。应用层 ACL。。。反腐败层 卑诗省。。。有界上下文 1. 这里我将使用术语单向当我们的OHS的公共接口只能由外部BCs调用我们的系统时,但不能由我们的BCs调用外部系统 类似地,当外部BCs可以使用OHS的公共接口调用我们的系统时,我将使用术语双向,但我们的BCs也可以使用它调用外部系统 a) 是单向的还是双向的?我想说它只能是单向的 b) 类似地,AL是单向的还是双向的?我想说它只能是单向的 2.我假设OHS不会取代AL,而是位于应用程序服务/AL之上 3
AL。。。应用层
ACL。。。反腐败层
卑诗省。。。有界上下文 1. 这里我将使用术语单向当我们的OHS的公共接口只能由外部BCs调用我们的系统时,但不能由我们的BCs调用外部系统 类似地,当外部BCs可以使用OHS的公共接口调用我们的系统时,我将使用术语双向,但我们的BCs也可以使用它调用外部系统 a) 是单向的还是双向的?我想说它只能是单向的 b) 类似地,AL是单向的还是双向的?我想说它只能是单向的 2.我假设OHS不会取代AL,而是位于应用程序服务/AL之上 3. a) OHS是否也应用于属于同一应用程序一部分的BCs之间的通信,还是仅用于与外部BCs之间的通信?不管答案是什么,请详细说明你的理由 b) 假设相互通信的BC是同一应用程序的一部分,并且假设我们不使用OHS—这些BC应该直接相互通信(即BC调用ACL,ACL反过来又直接调用BC)还是通过AL(即BC将调用ACL,ACL将调用AL,后者将直接调用BC) 我认为这些BC应该直接通信,而不是通过AL,因为它可能会膨胀AL的接口,也可能会将内部功能暴露给外部系统 4. 埃里克·埃文的DDD书,第375页: 开放主机服务为多方使用标准化协议 集成。它使用域的模型在 系统,即使这些系统可能不在内部使用该模型 系统 a) 我假设我们的OHS应该使用我们的应用程序的域模型作为其自身模型的基础?换句话说,OHS不应该使用应用程序的域模型,而应该仅仅基于它自己的模型 b) 由于我们的OHS有自己的模型(通常基于核心域,不管是什么),我认为我们还应该定义一个位于OHS和应用程序其余部分之间的转换/反腐败层 c) 应用程序服务的参数和返回值是否根据应用程序的域模型定义 5. BC是否总是使用基础设施服务调用另一个BC(当然,如果BC使用的是ACL,则BC将调用ACL,后者将调用基础设施层,后者将调用另一个BC),而不管该另一个BC是外部的还是同一应用程序的一部分 谢谢 EULERFX: 1. 1b)ACL是双向的,因为数据在任一方向流动- 当您向外部服务发送消息时,或者 解释从所述服务接收的消息 a) “或解释从所述服务收到的消息”您的意思是,只有我们的ACL可以从被叫外部BC收到回复(即返回值),还是您的意思是发送消息的同一ACL(代表我们的BC)也可以在外部BCs呼叫我们的BCs时解释消息 b) 如果前者,那么从这个意义上说OHS不也是双向的,因为外部系统调用的OHS服务也可以向这些外部系统发送回复(即返回值)?如果后者,在4b)中您所说的OHS本身也充当翻译,这表明当外部系统调用我们的BC时,我们的BC用于调用外部系统的ACL也不会被使用,这意味着ACL不能是双向的 3. 3b)假设相互通信的BCs是同一系统的一部分 应用程序和假设我们不使用OHS-这些BCs 直接相互通信(即BC将调用ACL,在 turn将直接呼叫BC)或通过AL(即BC将呼叫 ACL,它将调用AL,然后它将直接调用BC) 如果不使用OHS,请致电其他BC的应用服务 a) 你是说BC应该调用ACL,它会调用AL,然后直接调用另一个BC b) 同一应用程序中的BC是否共享相同的AL c) 如果内部BC共享相同的AL,这是否意味着我们可能会被迫定义一些应用程序服务,其唯一目的是使内部BC能够相互通信(因此外部客户端不需要调用这些特定的应用程序服务)。因此,这些应用程序服务不向外部客户端公开内部功能吗 澄清:我知道外部客户端只有在引用了包含我们的应用程序服务的dll时才可以直接调用我们的应用程序服务,但如果某些客户端确实引用了此类dll,则有可能