n-tier和clean architecture之间的主要和明显的区别是什么?

5
免责声明。我不寻求讨论或对这两者的看法。也不旨在评估或描述它们。我在一个项目中,需要设置从传统到领域驱动的重构路径,并希望保持变化尽可能小,仍然实现任务。
根据clean architecture的MS文档,洋葱形状的图表应该与n-tier architecture有所不同,后者是分层形状。
读起来都很有道理,但随后呈现了干净架构的另一种不同视角,它看起来与n层架构非常相似。当然,我明白它们之间的区别,但试图理解它们不同的核心点在哪里以及如何不会因为相似而变得更容易。
我对自己的不确定性原因有更好的例子,this blog。虽然它与.NET无关,但架构应该是技术中立的。据我所知,该过程的实际路径是基于层的,并且与n层版本完全相同(仅在绘制方式上有所不同,这应该是无关紧要的)。

这两种架构类型的主要区别仅在于我们如何使用它们,还是在代码方面或项目结构方面存在实际差异(当然,除了命名)?
1个回答

6
据我所了解,该过程的实际路径是基于层次的,与n层版本完全相同(只有绘制方式不同,这应该是无关紧要的)。
是的,没错。
这两种架构类型之间的主要区别仅在于我们如何使用它们,还是在代码或项目结构方面存在实际差异(当然除了命名)?
区别在于哪些代码知道、引用和依赖于其他代码。
在N-Tier中,业务逻辑需要知道基础架构层的API。所有依赖项指向下方。
在清晰架构/洋葱架构等中,基础架构层知道领域层的API。所有依赖项都指向内部。
清晰架构将业务逻辑和应用程序模型置于应用程序的中心。与其让业务逻辑依赖于数据访问或其他基础设施问题,不如倒转这种依赖:基础设施和实现细节依赖于应用程序核心。

这种风格通常伴随着组合根的使用,它负责将最终执行工作的组件连接在一起。

您是说洋葱版本中没有业务逻辑层吗?也就是说,它被嵌入到应用程序核心中了?

通常,业务逻辑被理解为在洋葱模型的中间。例如,罗伯特·马丁提供的。

enter image description here

你可能会发现需要不止这四个。没有规定必须只有这四个。但是,依赖性规则始终适用。源代码依赖关系始终指向内部。

谢谢您的回复。我认为您帮助我找到了我困惑的地方。您是说洋葱架构版本中没有业务逻辑层吗?也就是说,它被整合到应用程序核心中了吗? - DonkeyBanana
@DonkeyBanana:在DDD中,业务逻辑位于聚合根和领域服务中。 - Tseng
谢谢您的澄清。我相信我开始看到它所带来的不同之处了。但是,有一件事引起了我的注意,那就是图像将DB放在最外层,而类则在最内核心。这对项目中文件的放置意味着什么?我猜所有的模型都被放在核心项目中,但是上下文去哪里呢?(上下文是从DbContext继承的类,用于使用EF和代码优先方法。)它被放在模型中(尽管它是一个DB创建者功能)?在DB项目中?Infra中? - DonkeyBanana
我仍然对一些细节不确定,所以我在问题上设置了赏金,以引起注意并获得更多具体信息。很遗憾,我看到没有任何修改的信息。这给我留下了DDD方法是一个有趣但模糊的概念的印象。好像每个人都在谈论它,但当涉及实际实现时,人们普遍不清楚如何操作... 这是事实吗? - DonkeyBanana
它实际上并不意味着源文件的位置。它们可能全部在同一编译单元中,也可能在完全不同的存储库中。您可能会发现查阅“按功能打包”的文献很有用。 - VoiceOfUnreason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接