首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在洋葱体系结构中构建领域驱动设计?

如何在洋葱体系结构中构建领域驱动设计?
EN

Software Engineering用户
提问于 2017-07-03 11:00:03
回答 2查看 11.6K关注 0票数 5

我正在学习领域驱动设计,并被介绍到洋葱架构的概念,它使用了核心,领域,API和基础设施的术语。

我来自Java背景,熟悉和典型的项目结构(遗留MVC模式)配置、模型(包括值和实体)、存储库、服务、控制器和视图。

如果我想按照Onion构建一个项目,我应该如何将我的结构的相关组件与核心、域、API和基础设施相匹配?API部分是可以理解的,但我对Core和Infrastructure感到困惑。

例如,所有与域相关的业务逻辑都在域中,包括实体、值、对象、存储库等。

那么核心是什么,基础设施是什么呢?我不明白下面的解释

核心是不特定于任何领域或技术的构建块,包含诸如列表、案例类和参与者之类的通用构建块。它永远不会包括技术概念,例如REST或数据库。基础设施是最外层,包含各种技术(如数据库、用户界面和外部服务)的适配器。它可以访问所有内部层,但大多数操作都应该通过API,其中一个例外是与基础设施实现的域接口。

你能帮我弄清楚这两层的概念吗?

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2017-07-04 14:22:59

概述

让我们退一步,看看最初的杰弗里·巴勒莫提出的洋葱建筑

外部外观是外部世界的接口:用户界面、测试套件(其思想是促进TDD对内部所有事物的系统测试)和基础设施。

然后深入挖掘核心,以找到应用程序服务、域服务和域对象(在核心的核心中)。

Infrastructure

在这里,基础设施的含义与其他地方不同。它实际上是与外部世界的接口,尤其是与外部服务的接口,例如数据库管理系统或外部web服务、本地或云存储服务等。

术语“适配器”是由Cockburn的六角形建筑六角形建筑直接启发而来的:其思想是适配器的内部保持不变,但外部部分可能有所不同。因此,有一天,您可以使用Oracle适配器将应用程序服务连接到Oracle,然后再开发一个MongoDB适配器,作为新的持久层切换到Mongo。

因此,平台和操作系统的具体内容应该在基础设施层。如果您遵循这种逻辑,内部圈子中的所有内容都是平台中立的(“技术中立”可能会产生误导)。

走向核心

这里您在原来的洋葱体系结构中有一个映射示例

  • 域对象(实体、值对象、聚合)处于核心位置。
  • 围绕域,您将拥有域服务(例如存储库、服务等.)
  • 您仍然拥有应用程序服务,即用户界面或其他接口连接到的服务。

然而,韦德·瓦尔德龙的S变体在内部有一点不同:

  • 核心由构建的应用程序块组成,这些应用程序块与域无关,并由域使用。就像标准图书馆提供的一样。就我个人而言,我觉得这不是一个好主意:那些基本结构不适合这个结构。它们确实被下一个环所使用,但它们也可能被任何其他环使用,甚至不经过域。事实上,核心应该与这个体系结构正交。换句话说,您可以在体系结构中的任何地方使用列表,而不必经过连续的环到核心。
  • 好的,域是明确的,但是他把所有与域相关的东西放在那里,包括:实体、值对象、聚合,以及存储库、工厂和域服务。因此,他重组了原模型的域对象和域服务。
  • 好的,API是显而易见的:它对应于原始体系结构中的应用程序服务,那些不是直接访问的,而是通过外部环访问的。

这段视频将详细解释,并以Waldron的洋葱结构变体为例。

票数 8
EN

Software Engineering用户

发布于 2017-07-08 06:50:36

对于那些有同样问题但仍有一点困惑的人来说,这可能会对他们有所帮助。

1.基础设施:正如定义所述,基础设施的一部分是域类(由与业务相关的逻辑组成)和数据库关系之间的桥梁。如果您正在使用ORM (比如Hibernate Spring Datae.t.c),那么实现已经存在了。整个概念是关于脱钩的。

2.核心:由于所接受的答案,它已经很好地描述了核心部分。有人说,我更愿意把价值物品放在核心里。

核心是不特定于任何领域或技术的构建块,包含诸如列表、案例类和参与者之类的通用构建块。

它指向值对象,可能是自定义类型。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/352083

复制
相关文章
pycharm 查找替换_word查找和替换功能可以实现
ctr(control) + shift + r (replace: 替换)
全栈程序员站长
2022/09/25
1.2K0
pycharm 查找替换_word查找和替换功能可以实现
LeetCode - 查找和替换模式
原题地址:https://leetcode-cn.com/problems/find-and-replace-pattern/
晓痴
2019/07/30
8550
idea如何查找替换_pycharm查找替换
在平时敲代码的时候经常碰到,咦,这个变量名好像不太合适,但又写了好多这时候可以怎么办呢? Pycharm/Idea里面给我们准备了替换功能
全栈程序员站长
2022/09/27
2.7K0
idea如何查找替换_pycharm查找替换
vim基础命令,查找和替换
vim简单的命令用着还好。比如插入,删除,查询。但替换就用的比较少。所以,还是需要用的时候拿出来对照者看。
Ryan-Miao
2019/08/24
2.9K0
我的第一个Java程序和Java简介
public calss HelloWorld{ public static void main(String[] args){ System.out.println("Hello World!!"); } } 创建文件HelloWorld.java(文件名需和类名一致,不然编译不通过,编译器报错) javac Helloworld.java java HelloWorld Java是由Sun Microsystems公司于1995年推出的Java面向对象设计语言和J
landv
2018/05/24
4880
Vim查找替换
大家好,又见面了,我是你们的朋友全栈君。 1、查找 /pattern :向下查找pattern匹配字符串 ?pattern:向上查找pattern匹配字符串 使用了查找命令之后,使用如下两个键
全栈程序员站长
2022/07/02
3.1K0
Java 编写Vue组件(VueGWT的初尝试)
在之前,我曾写过这样的文章《不会前端没事,用GWT Boot和Spring Boot构建Web程序》,这篇文字使用的Domino UI来做前端页面,由于现在更流行VUE,并且VUE的页面更具现代化,所以我尝试了一下VueGWT。
阿提说说
2023/03/07
5780
Java 编写Vue组件(VueGWT的初尝试)
13-5 vi查找和替换
七、查找和替换 vi 提供了在一行 或 整个文件中,根据搜索条件将光标移动至指定位置的功能。 vi 还可以执行文本替换工作,用户可指定替换时是否需要用户确认。 1.行内搜索(准) (1)f命令 命令 f 在行内进行搜索,并将光标移至搜索到的下一个指定字符。 比如,命令 fa 就会将光标移动到本行下 1 处出现字符 a 的地方。 在执行过一次行内搜索之后,输入分号(:)可以使 vi 重复上次搜索。 2.搜索整个文件(准) (1)/命令 同第 3 章讲过的 less 程序一样,命令 “ /
见贤思齊
2020/08/17
1.6K0
LeetCode-890-查找和替换模式
你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配。
benym
2022/07/14
4040
vim中优雅地查找和替换
这篇文章来详细介绍 Vim 中查找相关的设置和使用方法。包括查找与替换、查找光标所在词、高亮前景/背景色、切换高亮状态、大小写敏感查找等。 查找 在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车。Vim会跳转到第一个匹配。按下n查找下一个,按下N查找上一个。 Vim查找支持正则表达式,例如/vim匹配行尾的"vim"。需要查找特殊字符需要转义,例如/vim\ 注意查找回车应当用\n,而替换为回车应当用\r(相当于<CR>)。 大小写敏感查找 在查找模式中加入\c表示大小写不敏感查找,
入门笔记
2022/06/02
3.6K0
python 查找替换
[root@localhost ~]# less txt 123 345 678 accdfesdfdsf [root@localhost ~]# less tihuan.py #!/usr/bin/env python import re wenjian = open('txt','r+') a = wenjian.read() wenjian.seek(0,0) f = (r'123') b =re.findall(f,a) if b != []:    wenjian.write(a.replace(
py3study
2020/01/14
1.5K0
idea 全局查找和全局替换功能
这个是我最常用的功能,有时查找代码很快,非常好用! 我设置的快捷键是 Ctrl + H ,或者是 Edit --> Find --> Find in Path
Li_XiaoJin
2022/06/10
2.2K0
idea 全局查找和全局替换功能
使用Python查找和替换Excel数据
让我们将Excel文件(注:你可以在知识星球完美Excel社群下载示例Excel文件find_replace.xlsx,以便于进行后续操作)数据加载到Python中,我们同样将使用pandas库,这是Python中数据分析的标准。
fanjy
2022/04/13
5K0
使用Python查找和替换Excel数据
关于在vim中的查找和替换
在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车。 Vim会跳转到第一个匹配。按下n查找下一个,按下N查找上一个。
休辞醉倒
2019/07/25
26K0
idea如何查找替换_wps表格怎么查找替换文字
在平时敲代码的时候经常碰到,咦,这个变量名好像不太合适,但又写了好多这时候可以怎么办呢? Pycharm/Idea里面给我们准备了替换功能
全栈程序员站长
2022/09/28
3.1K0
idea如何查找替换_wps表格怎么查找替换文字
Atom飞行手册翻译: 2.5 查找和替换
如果你执行了这些命令,你屏幕的底部会出现一个“Find and Replace”面板。
ApacheCN_飞龙
2022/11/27
4800
Atom飞行手册翻译: 2.5 查找和替换
python查找替换(一)
 系统有些配置文件,在不同环境下需要对部份配置项进行查找替换,如下的工作就是要找到这些需要改变其值的关键字(即key/value中的key).
py3study
2020/01/15
1.5K0
Java程序优化之替换swtich
关键字switch语句用于多条件判断,功能类似于if-else语句,两者性能也差不多,不能说switch会降低系统性能。在绝大部门情况下,switch语句还是有性能提升空间的。 但是在项目代码中,如果
纪莫
2018/04/19
1.4K0
LeetCode 890. 查找和替换模式(哈希表)
你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配。
Michael阿明
2020/07/13
3910
LeetCode 890. 查找和替换模式(哈希表)
VBA与数据库——简化程序编写-查找
比较简单的一段代码,和汇总数据一样,这里只是按照一个条件进行查找,需要按照2个甚至多个条件来查找的时候,需要改动的代码有:
xyj
2021/07/20
9540

相似问题

Rails最佳实践-参数还是多态模型?

10

Rails模型控制器最佳实践

20

Rails最佳实践控制器或模型

13

Rails模型最佳实践

12

嵌套模型最佳实践- rails

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文