我正在学习领域驱动设计,并被介绍到洋葱架构的概念,它使用了核心,领域,API和基础设施的术语。
我来自Java背景,熟悉和典型的项目结构(遗留MVC模式)配置、模型(包括值和实体)、存储库、服务、控制器和视图。
如果我想按照Onion构建一个项目,我应该如何将我的结构的相关组件与核心、域、API和基础设施相匹配?API部分是可以理解的,但我对Core和Infrastructure感到困惑。
例如,所有与域相关的业务逻辑都在域中,包括实体、值、对象、存储库等。
那么核心是什么,基础设施是什么呢?我不明白下面的解释
核心是不特定于任何领域或技术的构建块,包含诸如列表、案例类和参与者之类的通用构建块。它永远不会包括技术概念,例如REST或数据库。基础设施是最外层,包含各种技术(如数据库、用户界面和外部服务)的适配器。它可以访问所有内部层,但大多数操作都应该通过API,其中一个例外是与基础设施实现的域接口。
你能帮我弄清楚这两层的概念吗?
发布于 2017-07-04 14:22:59
让我们退一步,看看最初的杰弗里·巴勒莫提出的洋葱建筑。
外部外观是外部世界的接口:用户界面、测试套件(其思想是促进TDD对内部所有事物的系统测试)和基础设施。
然后深入挖掘核心,以找到应用程序服务、域服务和域对象(在核心的核心中)。
在这里,基础设施的含义与其他地方不同。它实际上是与外部世界的接口,尤其是与外部服务的接口,例如数据库管理系统或外部web服务、本地或云存储服务等。
术语“适配器”是由Cockburn的六角形建筑六角形建筑直接启发而来的:其思想是适配器的内部保持不变,但外部部分可能有所不同。因此,有一天,您可以使用Oracle适配器将应用程序服务连接到Oracle,然后再开发一个MongoDB适配器,作为新的持久层切换到Mongo。
因此,平台和操作系统的具体内容应该在基础设施层。如果您遵循这种逻辑,内部圈子中的所有内容都是平台中立的(“技术中立”可能会产生误导)。
这里您在原来的洋葱体系结构中有一个映射示例:
然而,韦德·瓦尔德龙的S变体在内部有一点不同:
这段视频将详细解释,并以Waldron的洋葱结构变体为例。
发布于 2017-07-08 06:50:36
对于那些有同样问题但仍有一点困惑的人来说,这可能会对他们有所帮助。
1.基础设施:正如定义所述,基础设施的一部分是域类(由与业务相关的逻辑组成)和数据库关系之间的桥梁。如果您正在使用ORM (比如Hibernate Spring Datae.t.c),那么实现已经存在了。整个概念是关于脱钩的。
2.核心:由于所接受的答案,它已经很好地描述了核心部分。有人说,我更愿意把价值物品放在核心里。
核心是不特定于任何领域或技术的构建块,包含诸如列表、案例类和参与者之类的通用构建块。
它指向值对象,可能是自定义类型。
https://softwareengineering.stackexchange.com/questions/352083
复制