首页 > 其他分享 >DDD分层架构

DDD分层架构

时间:2023-11-29 10:35:11浏览次数:38  
标签:架构 数据库 接口 分层 三层 DDD

出现背景

三层应用架构:数据 - 应用 (业务逻辑层)- 展现,通常是以数据位为起点进行数据库分析设计,服务层过重,数据模型失血,没东西.

  1. 面条式编程或者面向数据库编程,服务层围绕数据库作业完成业务逻辑,经常一条线撸到底;

  2. 代码一整块一整块的过重,很难扩展复用;

  3. 数据库模型只是数据库映射,没有相关的行为支撑,行为都被上一层 Service 给完成等了,因此是失血的领域模型;

领域模型是对业务模型的抽象,DDD革命性在于:

领域模型准确反映了业务语言,传统数据对象除了简单setter/getter方法外,没有任何业务方法,即失血模型

而DDD领域采用充血模型(业务方法定义在实体对象中,例如:生成订单时,判断商品不能为空)

分层

  • 接口层
    • 对外提供能力/接口,HTTP接口,RPC接口等
  • 应用层
    • 接口与核心之间的层次,主要是将核心对象封装、组合成完整的业务流程,为接口提供服务
  • 领域层/核心层
    • 将核心业务逻辑拆分为功能相对独立的各个子模块。 子模块和具体业务流程无关或关联性不大,封装了核心的知识,并对外提供抽象接口。
  • 基础设施层/防腐层/ACL
    • 服务对外依赖,包括数据库、消息队列等

三层架构到四层架构之间的演进

image

图源-DDD分层架构浅析-架构狂人

  • 三层架构向DDD分层架构演进,主要发生在业务逻辑层数据访问层

    • DDD分层架构在用户接口层引入了DTO,给前端提供了更多的可使用数据和更高的展示灵活性。

    • DDD分层架构对三层架构的业务逻辑层进行了更清晰的划分,改善了三层架构核心业务逻辑混乱,代码改动相互影响大的情况。

    • DDD分层架构将业务逻辑层的服务拆分到了应用层和领域层。应用层快速响应前端的变化,领域层实现领域模型的能力。

  • 另一个重要的变化发生在数据访问层基础层之间。

    三层架构数据访问采用DAO方式;

    DDD分层架构的数据库等基础资源访问,采用了仓储(Repository)设计模式,通过依赖倒置实现各层对基础资源的解耦。

    仓储又分为两部分:仓储接口和仓储实现。

    仓储接口放在领域层中,仓储实现放在基础层。原来三层架构通用的第三方工具包、驱动、Common、Utility、Config等通用的公共的资源类统一放到了基础层。

传统三层架构DDD分层架构的演进,体现的正是领域驱动设计思想的演进。

传统三层架构DDD分层架构的演进,体现的正是领域驱动设计思想的演进。

标签:架构,数据库,接口,分层,三层,DDD
From: https://www.cnblogs.com/tobieance/p/17863956.html

相关文章

  • r语言有限正态混合模型EM算法的分层聚类、分类和密度估计及可视化|附代码数据
    原文链接:http://tecdat.cn/?p=23825最近我们被客户要求撰写关于有限正态混合模型EM算法的研究报告,包括一些图形和统计输出。简介本文介绍了基于有限正态混合模型在r软件中的实现,用于基于模型的聚类、分类和密度估计。提供了通过EM算法对具有各种协方差结构的正态混合模型进行参......
  • Containerd的架构简单学习
    简单说明这里,我们介绍一下containerd架构,以便于更好了理解containerd容器。服务端子系统(Bundle和Runtime)和组件下图是containerd的架构示意图:containerd是典型的C/S架构,在服务端包含Bundle和Runtime两大Subsystems(子系统)服务,外部用户通过GRPCAPI与服务进行交互。Bund......
  • Mysql架构组成和存储引擎介绍
    Mysql架构图我们来说明这个mysql架构图,每一个部分都有什么作用ConnectorsConnectors翻译成叫连接器,将来我们在工作中去访问数据库。并不会安装一个mysql的客户端,通过命令手工去敲命令。大部分的用户呢,是不懂数据库的,但是他又需要访问数据库里的数据。比方说我们在网上购物,那......
  • iOS-打包上架构建版本一直不出现/正在处理/自动消失
    ​iOS开发过程中,打包上架苹果审核是一个不可或缺的环节。说实话,这个问题我遇见两次了,为了让自己长点记性,决定写下来。首先,列举几种情况:1.iPa包上传至Appstore后,一个小时内不显示构建版本。(等待15分钟-25分钟是正常的)   ​ 2.“活动”栏目下,所有构建版本长时间显示“......
  • Meta对Transformer架构下手了:新注意力机制更懂推理
    前言 作者表示,这种全新注意力机制(Sytem2Attention)或许你也需要呢。本文转载自机器之心仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV各大方向专栏与各个部署框架最全教程整理【CV技术......
  • Rancher七--基础架构
    1.Swarm在Rancher中部署Swarm,您首先需要添加一个新的环境。这个环境需要使用编排引擎为Swarm的环境模版进行创建。需求Docker1.13以上端口 2377 以及 2378 需要能在主机之间相互访问。创建一个Swarm环境在左上角的环境的下拉菜单中,点击环境管理。通过点击添加环境去创建一......
  • VM虚拟机安装系统出现架构不兼容提示
    报错内容:无法打开此虚拟机的电源,因为此虚拟机需要使用Arm计算机架构,而该架构与此X86计算机架构主机不兼容。请参见知识库文章84273。解决方法:这是因为镜像所需的架构和计算机本身的架构不兼容,比如我下载的就是arm64架构的iso镜像,但是我本身的电脑是win11系统,是x86_64系统,......
  • SD Host控制器微架构设计
    微架构设计思路ahb_slave_if中的寄存器可以在datasheet中进行描述sd_clk-时钟产生模块的接口描述sd_data_fsm和sd_cmd_fsm-状态机描述发送时序需要遵守,并且在发送的时候需要产生CRC接受时序需要遵守,并且要接收CRC,进行比较FiFo中有存储体存储数据,FiFo_ctrl模块进行......
  • 在x86_64的ubuntu下载并运行aarch64架构的容器
    在x86_64的ubuntu下载并运行aarch64架构的容器docker仓库官网https://hub.docker.com/docker操作相关指令#拉取docker镜像sudodockerpull镜像名称#加载本地docker文件sudodockerload-i文件路径#进入相关容器sudodockerexec-it容器名称或容器ID/bin/bash#显......
  • 2023版Web前端架构师:引领前端开发的创新与变革
    2023版Web前端架构师:引领前端开发的创新与变革一、前言随着互联网技术的飞速发展,Web前端领域也在不断演进。作为一名2023版的Web前端架构师,你需要具备广博的技术知识、卓越的架构能力以及敏锐的市场洞察力,从而引领前端开发的创新与变革。本文将为你揭示如何在这个充满挑战与机遇的......