【问题标题】:Main and visibly apparent difference between n-tier and clean architecturen 层和干净架构之间的主要和明显的区别
【发布时间】:2019-11-10 05:53:10
【问题描述】:

免责声明。我不是在寻找关于这两者的讨论或意见。我也不打算评估或描述它们。我在一个项目中,我应该设置一条从传统重构到域驱动的路径,我希望尽可能地减少更改以完成任务。

根据clean architecture 的MS 文档,洋葱形图应该与n-tier architecture 不同,后者是层形的。

阅读时这一切都有意义,但随后呈现了干净架构的不同视图,它看起来与 n 层架构非常相似。当然,我确实理解它们的不同之处,但试图理解它们在在哪里以及如何不同的核心点并不会因为这种相似性而变得更容易。

我不确定的原因的一个更好的例子是this blog。它与 .NET 无关,但架构应该与技术无关。据我了解,该过程的实际路径是基于层的,并且与n层版本完全等效(仅在绘制方式上有所不同,这应该无关紧要)。

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

【问题讨论】:

    标签: .net architecture domain-driven-design n-tier-architecture


    【解决方案1】:

    据我了解,该过程的实际路径是基于层的,并且与 n 层版本完全等效(仅在绘制方式上有所不同,应该无关紧要)。

    是的,没错。

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

    区别在于哪些代码知道,有引用,依赖于其他代码。

    在 N-Tier 中,业务逻辑需要知道基础设施层的 API。所有的依赖都指向下。

    在干净架构/洋葱架构等中,基础设施层知道领域层的API。所有的依赖都指向向内

    干净的架构将业务逻辑和应用程序模型置于应用程序的中心。业务逻辑不依赖于数据访问或其他基础架构问题,而是颠倒了这种依赖关系:基础架构和实现细节依赖于应用程序核心。

    这种风格通常伴随着Composition Root的使用,它负责将最终完成工作的组件连接在一起。

    你是说洋葱版没有业务逻辑层? IE。是否已融入应用程序核心?

    通常,业务逻辑被理解为位于洋葱中间。比如Robert Martin offers

    您可能会发现您需要的不仅仅是这四个。没有规则说你必须总是只有这四个。但是,依赖规则始终适用。源代码依赖项总是指向内部。

    【讨论】:

    • 感谢您的回复。我想你帮助我找出了我感到困惑的地方。你是说洋葱版没有业务逻辑层? IE。是否已融入应用程序核心?
    • @DonkeyBanana:DDD 中的业务逻辑在您的聚合根和域服务中
    • 感谢您的澄清。我相信我开始看到由此产生的差异。不过,引起我注意的一件事是,图像将 DB 放在最外层,而类放在最内层的核心。这对文件在项目中的位置意味着什么?我猜所有的模型都放在了核心项目中,但是上下文在哪里呢? (Contex 是在使用 EF 和代码优先方法时从 DbContext 继承的类。)它是否放入模型中(尽管它是数据库创建者功能)?在数据库项目中?基础设施?
    • 我对一些细节仍然有点不确定,所以我在这个问题上放了一个赏金以引起人们的注意并获得更多细节。遗憾的是,我看到修改信息为零。这给我的印象是 DDD 方法是一个有趣但模糊的概念。好像每个人都在谈论它,但是当谈到实际的实现时,人们一般都不清楚如何做……是这样吗?
    • 它实际上并不暗示源文件的位置。它们可能都在同一个编译单元中,它们可能位于完全不同的存储库中。您可能会发现查看“按功能打包”的文献很有用。
    猜你喜欢
    • 1970-01-01
    • 2012-07-17
    • 2019-04-27
    • 2011-05-20
    • 2020-02-17
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多