首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Bob叔叔的“干净的架构”中,基础设施服务可以返回域实体吗?

在Bob叔叔的“干净的架构”中,基础设施服务通常不应该直接返回域实体。根据“干净的架构”原则,基础设施服务应该是最底层的层级,负责处理与外部系统的交互,例如数据库、网络通信等。它们应该提供接口或方法,供上层的领域层调用。

领域层是应用程序的核心,负责实现业务逻辑和规则。在“干净的架构”中,领域层应该是与具体技术无关的,可以独立于基础设施进行测试和演化。因此,基础设施服务应该将数据从外部系统获取并转换为领域层所需的数据结构,而不是直接返回域实体。

通过这种方式,领域层可以保持独立性,并且不会受到基础设施的具体实现细节的影响。这也使得领域层更易于测试和维护。同时,这种分离还使得基础设施服务可以更容易地替换或升级,而不会对领域层产生影响。

对于基础设施服务返回的数据,领域层可以根据需要将其转换为域实体。这样做的好处是,领域层可以对数据进行验证、处理和逻辑判断,确保数据的一致性和正确性。同时,领域层也可以在需要时将域实体转换为基础设施服务所需的数据格式,以便进行持久化或传输。

总结起来,在“干净的架构”中,基础设施服务应该将数据从外部系统获取并转换为领域层所需的数据结构,而不是直接返回域实体。这样可以保持领域层的独立性,并使得基础设施服务更易于替换和维护。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

「领域驱动设计」DDD,六边形架构,洋葱架构,整洁架构,CQRS整合架构

可以想象,典型应用程序流从用户界面代码开始,通过应用程序核心到基础设施代码,然后返回到应用程序核心,最后向用户界面交付响应。...解决方案是创建一个服务,它角色是接收一组实体并在其上执行一些业务逻辑。服务属于层,因此它对应用层类一无所知,比如应用程序服务或存储库。另一方面,它可以使用其他服务,当然还有模型对象。...Bob叔叔关于干净架构文章,我将尝试用UMLish图来解释控制流…… 没有命令/查询总线 我们不使用命令总线情况下,控制器将依赖于应用程序服务或查询对象。...另一方面,应用程序服务将包含用例逻辑,当我们希望系统执行某些操作时,而不是简单地查看某些数据时,将触发该逻辑。应用程序服务依赖于存储库,存储库将返回包含需要触发逻辑实体。...它还可能依赖于服务来协调多个实体流程,但情况并非如此。 展开用例之后,应用程序服务可能希望通知整个系统该用例已经发生,在这种情况下,它还将依赖于事件分派器来触发事件。

2K30

「首席看软件架构」DDD,六边形,洋葱干净,CQRS整合架构

可以想象,典型应用程序流从用户界面代码开始,通过应用程序核心到基础设施代码,然后返回到应用程序核心,最后向用户界面交付响应。 ?...解决方案是创建一个服务,它角色是接收一组实体并在其上执行一些业务逻辑。服务属于层,因此它对应用层类一无所知,比如应用程序服务或存储库。另一方面,它可以使用其他服务,当然还有模型对象。...Bob叔叔关于干净架构文章,我将尝试用UMLish图来解释控制流…… 没有命令/查询总线 我们不使用命令总线情况下,控制器将依赖于应用程序服务或查询对象。...另一方面,应用程序服务将包含用例逻辑,当我们希望系统执行某些操作时,而不是简单地查看某些数据时,将触发该逻辑。应用程序服务依赖于存储库,存储库将返回包含需要触发逻辑实体。...它还可能依赖于服务来协调多个实体流程,但情况并非如此。 展开用例之后,应用程序服务可能希望通知整个系统该用例已经发生,在这种情况下,它还将依赖于事件分派器来触发事件。

5.1K22
  • 前端领域干净架构

    大家好,我是 ConardLi,前端有架构?这可能是很多人心里疑惑,因为实际业务开发里我们很少为前端去设计标准规范代码架构,可能更多去关注是工程化、目录层级、以及业务代码实现。...干净架构功能通常被分为三层,我们可以看下面这张图: 领域层 中心是领域层,这里会描述应用程序主题区域实体和数据,以及转换该数据代码。领域是区分不同程序核心。...模块依赖越少,测试所需基础设施就越少。 独立领域也更容易根据业务期望进行测试。这有助于让新手理解起来更容易。此外,独立也让从需求到代码实现中出现错误更容易排除。...用例是应用层处理,它可以准确地告诉我们需要哪些外部服务。所有主要逻辑和数据都封装在领域中。 所有外部服务都隐藏在基础设施,并且遵守我们规范。...通常,出现这个问题是编程另外一个大问题结果。这就是实体组合。 最后 本文里,我们介绍了前端干净架构”。 这不是一个黄金标准,而是一个很多项目、规范和语言上积累经验汇总。

    1.3K20

    Spring认证中国教育管理中心-Apache Cassandra Spring 数据教程七

    行插入到哪个表? 您可以通过两种方式管理用于对表进行操作表名。默认表名是更改为以小写字母开头简单类名。因此,com.example.Person类一个实例将存储person表。...第二种方式是@Table注解中指定表名。 10.7.2.更新表行 对于更新,您可以选择更新多行。...11.1.用法 要访问存储 Apache Cassandra 实体,您可以使用 Spring Data 复杂存储库支持,这大大简化了 DAO 实现。...您可以为您方法签名配备一个Pageable参数,并让该方法返回一个Slice实例,我们会相应地自动分页查询。 传递QueryOptions对象执行之前将查询选项应用于结果查询。...Stream迭代流时使用 Java 8读取和转换单个元素。 显示带有@AllowFiltering,注释查询方法,以允许服务器端过滤。 查询非主键属性需要二级索引。

    1K10

    Ubuntu 14.04上安装轻量级Budgie桌面

    当时我们被它整洁、小巧美感、灵活架构,还有再次使用在当今大多数发行版中所使用GNOME 3.10 成熟技术公共部分和标堆栈决定所折服。...无可否认另起炉灶有它优点,但决定从上游项目获取帮助将可以整个项目进展得更快,无论是发展方面(更轻技术负担)还是在用户可使用方面(更容易在其它发行版上运行)。...除了政治因素选择以外,这款桌面干净、小巧,向谷歌Chrome OSAsh桌面致敬。如果你不介意有些许粗糙边缘,那它值得你玩玩。那么怎样Ubuntu安装Budgie呢?...非官方PPA是不正式 开源意味着如果你有一点终端使用知识的话,你就可以获得Budgie桌面的源代码后进行编译,然后运行。...只要添加一个 非官方PPA ,刷新你软件源然后进行安装。几分钟后在这个家庭你将有一位名叫Bob叔叔,并且有一个新桌面可以玩耍。

    1.2K00

    「首席架构看设计」权威领域驱动设计(DDD)简介

    下游也是如此:哪些系统将使用我服务,我如何将我功能作为服务公开,他们会对我有利?误解了这一点,您应用程序可能很容易失败。 分层和六边形 现在让我们转向内部并考虑我们自己BC(系统)架构。...对于后端基础架构层,我们可以看到用于替代对象存储实现持久性端口,此外,对象可以通过外部服务端口调用其他BC。 ?...服务,基础结构服务和应用程序服务 服务层内定义服务,但实现可以是基础结构层一部分。存储库是服务,其实现确实在基础结构层,而工厂也是服务,其实现通常在层内。...我们还可以获得技术性更强服务,例如发送电子邮件或SMS文本消息,或将Correspondence实体转换为PDF,或使用条形码标记生成PDF。接口定义,但实现在基础架构层中非常明确。...虽然服务可以调用实体可以调用实体,但应用服务位于层之上,因此层内实体不能调用,只能反过来调用。换句话说,应用层(我们分层架构可以被认为是一组(无状态)应用服务

    79710

    如何保护数据平台隐私数据?

    基础设施上: 业务平台和数据平台均使用了HashiCorp Vault作为安全管理和访问密钥基础设施 在数据源上: RDS数据一般依赖于上游业务系统数据保护措施,数据平台很难进行预先干预。...动态脱敏:通过准确地解析SQL语句匹配脱敏条件,匹配成功后,改写查询语句或者返回数据,将脱敏后数据返回。 静态脱敏实现方式主要是在数据管道内建数据脱敏。...我们可以在数据集成工具内建脱敏功能,使数据进入数据仓库后就已经是脱敏数据。...例如在Snowflake云数据仓库,我们可以设立如下规则对email列进行动态脱敏。当数据仓库用户角色为数据分析师时候返回源文本,而其他角色查询返回完全屏蔽值。...同时在数据传输、处理和存储过程不期望暴露隐私信息。此时,我们可以利用数据哈希特性来实现跨数据隐私数据关联。

    44720

    领域驱动设计-下

    主要包含聚合、聚合根、实体、值对象、领域服务等领域模型领域对象。 聚合设计原则:高内聚,聚合尽量小,聚合之间通过id关联,边界之外使用最终一致性,应用层实现跨聚合调用。...,就可以服务拆分时候作为拆分和组合依据,微服务架构演进也就不是难事了。...),实体可以引用聚合聚合根,实体,值对象; 值对象特点:无id,不可变,无生命周期,用完即失效,值对象之间通过属性值判断相等性,他核心是值,是一组概念完整属性集合,用于描述实体特征和状态,值对象尽量只引用值对象...当需要更换数据库类型,或者更改数据处理逻辑时,我们就可以保持业务逻辑接口不动,只修改仓储实现,保证了领域层业务逻辑干净和纯洁。...跨实体操作必须经由领域服务。 应用服务层只通过领域服务或聚合根来组织业务,自身不带任何实现逻辑。 业务和数据隔离,领域层只关注业务,数据支撑全部交由基础设施层。

    78530

    【系统设计】大神三分钟搞懂领域驱动设计

    下游也是如此:哪些系统将使用我服务,我如何将我功能作为服务公开,他们会对我有利? 误解了这一点,您应用程序可能很容易失败。 层和六边形 现在让我们转向内部并考虑我们自己BC(系统)架构。...对于后端基础架构层,我们可以看到用于替代对象存储实现持久性端口,此外,对象可以通过外部服务端口调用其他BC。 ?...我们还可以获得技术性更强服务,例如发送电子邮件或SMS文本消息,或将Correspondence实体转换为PDF,或使用条形码标记生成PDF。接口定义,但实现在基础架构层中非常明确。...服务依赖项实现 另一个技术问题 - DDD从业者之间可能存在分歧 - 就实体/基础设施服务(包括存储库和工厂)之间关系而言。...我们可以通过注释@Hidden来模块化为聚合,任何聚合对象代表我们可见聚合根内部工作;这些将不会出现在Naked Objects查看器。我们可以编写基础设施服务,以便根据需要桥接到其他BC。

    1.7K21

    整洁架构、DDD 和 CQRS 简介

    在这篇文章Bob 大叔强调了所有前身架构和清洁架构都具备五个品质: 框架独立性:架构与第三方框架解耦。 可测试:该架构易于编写单元测试。...使用接口确实有意义领域领域,例如使用策略模式来封装不同业务逻辑,继续使用它们;否则,只需将服务直接注入需要它们。...在实践,命令可能会返回一小部分元数据,例如新创建实体 ID,但仅此而已。命令也可能返回 ack/nack 响应。 命令执行另一个结果可能是错误条件,在这种情况下,命令应该抛出异常。...命令会改变系统状态并返回简单 ack/nack 或元数据响应,或者它们会抛出异常。它们与事件不同之处在于可以拒绝命令;事件不能。命令通常通过应用层与层交互。...◆ 结论 在这篇博客文章,我介绍了 Clean Architecture,它是一种一流架构,它随着时间推移从其他几种架构方法发展而来,并首先由 Bob 正式化。

    4.2K20

    Spring Web 应用最大败笔

    Web层负责处理用户输入,并返回正确响应返回给用户。 web层与服务层通信。 2.服务层作为一个事务边界。它也负责授权和包含我们应用程序业务逻辑。...更具体地,服务层有两个主要问题: 1.服务层发现业务逻辑 业务逻辑被分散各个服务层。如果我们需要检查一个业务规则是如何实现,我们必须先找到它。这可能并不容易。...举个例子:假设我是一个服务类,你是一个模型对象。如果我让你从屋顶上跳下来,你会喜欢我这样决定?...(3)服务源代码是清洁,不包含任何复制粘贴代码 2. 将每个实体服务切割为单一目标的更小服务。...这两个简单步骤将帮助我们使得我们应用程序架构干净,有助于同行开发商提高生产力和幸福。

    36510

    数字证书 CA_数字证书申请

    此外,步骤 4 仅在Alice第一次用公钥密码向Bob发送消息时才需要进行,只要Alice将Bob公钥保存在电脑中,以后通信中就可以直接使用了。...可能包括: Subject Key Identifier:实体秘钥标识符,区分实体多对秘钥; Basic Constraints:一指明是否属于CA; Authority Key Identifier...本章开头例子,尽管没特别提到,但Alice获取Bob证书时,就可以使用仓库。仓库也叫作证书目录。...等发放和注销 Fabric CA采用Go语言进行编写 fabric-ca三种证书类型 1.登记证书(ECert):对实体身份进行检验 2.通信证书(TLSCert):保证通信链路安全,对远端身份校验...3.交易证书(TCert):颁发给用户,控制每个交易权限 下图描述了CA 服务Fabric 框架体系架构工作方式: CA 服务器结构为树形结构,整个树形结构根节点为根CA(Root Server

    3.6K20

    当我们谈论DDD时我们在谈论什么

    一个限界上下文中,领域知识是相对完整。 核心 《领域驱动设计》,Eric提出了精炼及核心模型识别出最有价值核心,将其独立出来。...相关讨论可以参见前缀分包vs后缀分包。 划分方法 《领域驱动设计》分层架构 Eric2003年提出分层架构。...整洁架构 Uncle Bob2012提出了整洁架构,一般来说我们认为整洁架构四层(四圈)和IDDD六边形架构基本是对应,只是整洁架构将适配器划分成了和框架耦合「Frameworks & Drivers...我看到很多项目对于以上两类代码并没有区分,而是把一切不属于其他层代码都放到了基础设施层。让可怜基础设施层逐渐变成了垃圾桶。 领域模型设计 战术层面划分好架构后,我们来看看位于核心领域模型。...实际项目中,设计者往往过早陷入对于一些具体模式识别,比如实体、聚合、领域服务,而忽略了如何设计一个可以表达领域概念模型。

    24320

    由Spring应用瑕疵谈谈DDD概念与应用(一)

    业务逻辑位于服务,管理对象数据。 服务,应用每个实体对应一个服务类。 使用 Spring 框架构建应用开发者很乐于谈论依赖注入好处。...(聚合根具有全局唯一标识,而实体只有聚合内部有唯一本地标识,值对象没有唯一标识,不存在这个值对象或那个值对象说法) 若一个聚合仅有一个实体,那这个实体就是聚合根;但要有多个实体,我们就要思考聚合内哪个对象有独立存在意义且可以和外部领域直接进行交互...DDD战略设计主要包括领域/子、通用语言、限界上下文和架构风格等概念。 领域和子 现实世界,领域包含了问题和解系统。一般认为软件是对现实世界部分模拟。...DDD,解系统可以映射为一个个限界上下文,限界上下文就是软件对于问题一个特定、有限解决方案。 日常开发,我们通常会将一个大型软件系统拆分成若干个子系统。...这种划分有可能是基于架构方面的考虑,也有可能是基于基础设施。但是DDD,我们对系统划分是基于领域,也即是基于业务。 限界上下文 一个由显示边界限定特定职责。领域模型便存在于这个边界之内。

    87520

    DDD-经典四层架构应用

    我们常用三层架构模型划分为表现层,业务逻辑层,数据访问层等,DDD分层结构既有联系又有区别, 个人认为主要有如下异同: 架构设计上,DDD分层结构中将传统三层架构业务逻辑层拆解为应用层和领域层...DDD分层详解 四层架构架构,上层模块可以调用下层模块,反之不行。...该层主要精力要放在领域对象分析上,可以实体,值对象,聚合(聚合根),领域服务,领域事件,仓储,工厂等方面入手 基础设施层 Infrastructure Layer 主要有2方面内容,一是为领域模型提供持久化机制...领域事件 event 不常用 仓储 repository 持久化相关,与基础设施层关联 工厂 factory 负责复杂对象创建 模块 module 子模块引入,可以理解为子划分 DDD编码实践 代码结构描述...比如我们现在所倡导服务化,如何划分或拆分微服务;如何有效地区分限界上下文,划分子;如何构建一个有效聚合,识别聚合根等。。。

    6.3K51

    如何运用领域驱动设计 - 存储库

    它不能为实体服务?...通过返回一个IQueryable对象,甚至可以将业务查询逻辑直接放到应用层,这样想怎么操作就怎么操作。 请注意!!!这非常危险!!!! 您可能会问了:“我平时所接触框架或者仓储不都是这样写?...具有领域意图东西我们都应该领域层,而类似于数据库访问实现这类基础架构应该放在基础设施层。所以可以看出我们抽象出来仓储接口是应该放在领域层,而仓储实现可以放在基础设施层 。...而此时,就可以依赖我们存储库来完成了,当聚合根领域服务或者领域用例已经完成了操作时,将它传递给存储库持久化之前就可以让存储库为它加上审计信息。...EFCore,为我们提供了Fluent API方式来配置模型,该方式可以很好让领域对象保持干净。假如您没有使用EFCore,另外ORM框架也一定会为您提供类似于这样配置方法。

    98030

    一文探寻学习DDD意义

    DDD实体行为,保证对外封闭情况下,也是需要考虑扩展能力。...但是,要突破这一个困境,能够实体行为设计扩展,其实要有这样认同:要往上看一个层次,就是实体行为表达,不一定只有一个类完成,可以通过策略模式等方式路由,由一个模块一些类进行完成,只要对外有封装和管控其实就可以了...Liskov Substitution Principle:里氏替换原则 【资源库替代性需求】 原来分层架构,数据库等存储能力作为一种底层基础设施,是被视为稳定下层服务。...类似的,领域协作与对外交付过程,往往可以增加一个协调层,去串联各个交互。这样即可以降低各协作成本,也可以降低外部理解成本,有更好研发体验。 协调层该如何产生?...没有实体,为什么会有“交易”一说,本人是这么理解交易流程等可以强管控情况下,把交易API服务当做服务(如:下单),“交易逻辑上是有边界、可以成立

    29320

    探秘微信业务优化:DDD从入门到实践

    领域模型/领域服务/仓储和防腐层接口定义 基础设施层:仓储和防腐层接口实现/存储等基础层能力 这里必须要说是,这四层不一定是指物理四层,也可以一个微服务拆分逻辑四层。...如上,洋葱架构越往里依赖越低,越是核心能力。基础设施最外面,依赖其他层,这是是因为DDD其他层等需要定义自己需要基础能力接口,而基础设施层负责依赖并实现这些接口,从而实现整体依赖倒置。...实践例子: 实现链路可以参考3.4例子1,商品域中,我们防腐层是按照如下目录方式实现, 领域层来定义领域层需要防腐接口,基础设施层继承并实现防腐接口,基础设施层直接调用其他限界上下文。...实践例子: 我们增值业务,交易"支付成功"就是一个领域事件,计费订阅这个领域事件,从而可以根据这个事件调整客户计费资源包实体。...服务拆分上,如果想拆到最细粒度, 可以把两个聚合按照各自上下文拆成独立服务

    1K112

    软件架构编年史:整洁架构

    Martin 2012, The Clean Architecture 正如 Uncle Bob 自己博客中所说,上面这张图试图将最新架构观点整合成一个可操作思路。...而洋葱架构引入了 DDD 定义应用层次混合:控制用例逻辑应用服务;封装了领域逻辑领域服务,这些逻辑既不属于实体也不属于值对象;还有实体、值对象等等...和洋葱架构相比,整洁架构保留了应用服务层...然而,读过 Uncle Bob 博客后,我们会发现,他认为任何领域对象都是实体,而非只有 DDD 实体”才是实体:“一个实体可以是一个拥有方法对象,或者是一组数据结构和函数”。...这些模型也代表着 EBI 架构(我们可以清楚看到边界、交互器和实体),六边形架构“应用”、洋葱架构“应用核心”,以及前面整洁架构示意图中实体”层和“用例”层。...)查找相关实体; 编排实体之间交互; 用操作数据结果创建响应模型; 将响应模型交给展示器进行填充; 将展示器返回给控制器; 使用展示器生成视图模型; 将视图模型绑定到视图; 将视图返回给客户端。

    68920
    领券