Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Architecture 领域驱动设计中的层_Architecture_Domain Driven Design_Inversion Of Control_3 Tier_Decoupling - Fatal编程技术网

Architecture 领域驱动设计中的层

Architecture 领域驱动设计中的层,architecture,domain-driven-design,inversion-of-control,3-tier,decoupling,Architecture,Domain Driven Design,Inversion Of Control,3 Tier,Decoupling,在域驱动设计中,域层不依赖于其他层,即存储库接口位于域层内,而其实现位于基础结构层 但是,有界上下文(具有域+infra)被部署为一个单元(可部署),因此层实际上是逻辑层而不是物理层。那么,在域层和基础结构层之间绘制这个虚拟分隔符有什么好处呢 更新 在传统的分层方法中,域(服务)被称为依赖于基础结构层。相反,当涉及到DDD/Clean/Hexagon体系结构时,域独立于其他层,因为域层具有由基础结构层实现的接口 无论您使用DDD还是传统的分层方法,都必须模拟存储库,这意味着域实际上并不独立。这是

在域驱动设计中,域层不依赖于其他层,即存储库接口位于域层内,而其实现位于基础结构层

但是,有界上下文(具有域+infra)被部署为一个单元(可部署),因此层实际上是逻辑层而不是物理层。那么,在域层和基础结构层之间绘制这个虚拟分隔符有什么好处呢

更新

在传统的分层方法中,域(服务)被称为依赖于基础结构层。相反,当涉及到DDD/Clean/Hexagon体系结构时,域独立于其他层,因为域层具有由基础结构层实现的接口

无论您使用DDD还是传统的分层方法,都必须模拟存储库,这意味着域实际上并不独立。这是否正确?

域模型背后的假设是,域模型要么是应用程序中最复杂的部分,要么是比其他部分变化更频繁的部分

域模型模式试图通过使域模型独立于其他关注点来解决此关注点。这样做的好处之一是,您可以独立于域模型的依赖项对其进行单元测试。您还可以更改域模型,而无需更改应用程序的其他部分


这些是主要的优点,但也有缺点。解耦会使代码库更难导航,而且往往需要在层之间进行大量映射。是否更改取决于具体情况(域模型有多复杂,您还有哪些其他验证备选方案等)

最大的驱动因素是允许不同层在不影响彼此的情况下更改。例如,我经常独立于基础结构层测试我的域层。我通过模拟我的DAO和存储库来实现这一点,这允许我的测试运行得更快,并且使它们不那么脆弱

当我的存储库最终需要一个新的实现(Oracle vs MS SQL vs Web Service)时,我也使用了它。当后端服务从您下面更改时,您不必重写整个应用程序,这将大大降低您的复杂性

最后,将其拆分有助于您完成任务。将数据库层集成到域层会让您跳过这一步(至少在我的经验中是这样)。它不会强迫你这么做,但肯定会鼓励你做出不好的行为


这与我们不在UI中编写域逻辑的原因相同。对于任何足够小的例子来说,这都是浪费时间。只有当你有一个大型、复杂的应用程序时,它的价值才会显现出来。

我已经更新了我的问题,你能再检查一下吗?@FahimFarook在你自己写的时候,域模型在逻辑上是独立的,但不是物理上独立的。谢谢@MarkSeemann,所以我们可以说即使在传统的分层方法中,只要IoC到位,业务领域也是独立的吗?据我所知,传统的N层图是不正确的/deceptive@FahimFarook也许n层图是骗人的。它正确地描述了应用程序的物理结构,但如果您也将其解释为逻辑结构,则所获甚少。希望您会发现这一点很有帮助: