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

DDD中的分层架构

时间:2023-08-20 12:22:15浏览次数:43  
标签:逻辑 架构 模型 业务 应用程序 领域 分层 服务 DDD

领域区域设计的分层架构模型其实是在不断优化和发展的,从最早的传统直肠子式的四层架构模型,逐渐演变成目前以依赖倒置为原则的新的四层架构模型,从而实现了各层对基础设施层的解耦。

DDD中的分层架构很好的应用了关注点分离原则Separation of Concerns(SOC),每一层做好自己的事情,减少交叉。

img

表现层

表现层也可以称作接口层,提供用来完成任务的用户界面或接口,负责向用户显示信息和解释用户指令。这里的用户可能是:用户、程序、自动化测试和批处理脚本等等。

一般而言,我们把表现层显示的任何数据称为视图模型,把任何从屏幕离开触发一个后台操作的数据称为输入模型,大多数时候这两个模型是相同的。

就分层应用程序而言,MVC,MVP,MVVM都是表现层的模式。

应用程序层

应用程序层是一个附加层,介于领域层和UI之间,是编排用例实现的地方,其中包含的方法几乎一一对应于表现层的用例。

一般情况下,应用程序层和表现层一一对应,因为不同的表现层可能会有不同的用例。

应用程序层引用领域层和基础设施层,对业务逻辑一无所知,不包含任何与业务相关的状态信息,应用程序层有时候需要调用外部服务,比如WCF或者WebApi,又或者是第三方的服务,这种情况一般是把对外部服务的调用封装成适配器,放在基础设置层,这样就把对外部服务的调用转化成了对基础设施层的调用。

正常来说,应用程应该是很薄的一层,不应当有业务规则或逻辑,主要面向用例和流程相关的操作。但应用层又位于领域层之上,因为领域层包含多个聚合,所以它可以协调多个聚合的服务和领域对象完成服务编排和组合,协作完成业务操作。

领域层

领域层包含了几乎所有的业务逻辑,由一组领域模型和一组服务构成。其作用是实现系统核心业务逻辑,通过各种校验手段保证业务的正确性。领域层主要体现领域模型的业务能力,它用来表达业务概念、业务状态和业务规则。

领域模型:包含数据和行为,与之相对的一个是贫血模型,什么是贫血模型,如果只是类缺少方法,对象模型并不算是贫血,如果实体的逻辑放在了实体类的外面,那才是真的贫血,毕竟如果把逻辑放到了实体类的外面,他实际上是违反了SOLID原则。

领域服务:它包含了一些逻辑上有关系并且操作多个实体的行为。

领域层包含聚合根、实体、值对象、领域服务等领域模型中的领域对象。

领域模型的业务逻辑主要是由实体和领域服务来实现的,其中实体会采用充血模型来实现所有与之相关的业务功能。实体和领域对象在实现业务逻辑上不是同级的,当领域中的某些功能,单一实体(或者值对象)不能实现时,就需要适用到领域服务,它可以组合聚合内的多个实体(或者值对象),实现复杂的业务逻辑。

基础设施层

基础设施层是与具体技术有关的东西,比如数据库,网关,安全,日志,IOC,跟踪,缓存,服务总线等等。

基础层是贯穿所有层的,它的作用就是为其它各层提供通用的技术和基础服务。比较常见的功能还是提供数据库持久化。

img


点关注,不迷路。

如果您喜欢这篇文章,请不要忘记点赞、关注、转发,谢谢!如果您有任何高见,欢迎在评论区留言讨论……

公众号

标签:逻辑,架构,模型,业务,应用程序,领域,分层,服务,DDD
From: https://www.cnblogs.com/zhaorong/p/17643842.html

相关文章

  • MVC的最佳架构
    原文地址https://chsakell.com/2015/02/15/asp-net-mvc-solution-architecture-best-practices/为Web应用程序选择正确的架构是必须的,尤其是对于大型应用程序。使用默认的VisualStudioASP。NETMVCWeb应用程序项目模板,添加带有脚手架选项的控制器,只需引导应用程序并......
  • 以二进制文件安装K8S之高可用部署架构
    在Kubernetes系统中,Master节点扮演着总控中心的角色,通过不间断地与各个工作节点(Node)通信来维护整个集群的健康工作状态,集群中各资源对象的状态则被保存在etcd数据库中。在正式环境中应确保Master的高可用,并启用安全访问机制,至少包括以下几方面。Master的kube-apiserver、kube-c......
  • 领域驱动设计(DDD):从基础代码探讨高内聚低耦合的演进
    大家好,我是付威,一名已在编码第一线奋斗了十余年的程序员。在2019年我初次接触到领域驱动设计(Domain-DrivenDesign,简称DDD)的概念。在我的探索中,我发现许多有关DDD的教程过于偏重于战略设计,充斥着许多晦涩难懂的概念,导致阅读起来相当艰难。有些教程往往只是解释了DDD的概念,而未深入......
  • 【PACS源码】认识PACS的架构和工作流程
     (一)PACS系统的组成及架构   PACS系统的基本组成部分包括:数字影像采集、通讯和网络、医学影像存储、医学影像管理、各类工作站五个部分。   而目前PACS系统的软件架构选型上看,主要有C/S和B/S两种形式。   C/S架构,即Client/Server(客户机/服务器)架构,将运算......
  • 如何快速画出一幅漂亮的架构图
    这篇文章总结了常用的架构图类型,可以借鉴笔者提供的模板,快速地产出符合业务需要的架构图。为什么要画好一幅架构图?一幅漂亮的架构图既是创作者的深度结构化思考和表达,对于读者来说也更加容易理解架构所要表达的意思。然而不擅长画图的程序员,在大脑里已经有了思路,如何快速能够......
  • 如何快速画出一幅漂亮的架构图
    这篇文章总结了常用的架构图类型,可以借鉴笔者提供的模板,快速地产出符合业务需要的架构图。为什么要画好一幅架构图?一幅漂亮的架构图既是创作者的深度结构化思考和表达,对于读者来说也更加容易理解架构所要表达的意思。然而不擅长画图的程序员,在大脑里已经有了思路,如何快速能够......
  • 如何快速画出一幅漂亮的架构图
    这篇文章总结了常用的架构图类型,可以借鉴笔者提供的模板,快速地产出符合业务需要的架构图。为什么要画好一幅架构图?一幅漂亮的架构图既是创作者的深度结构化思考和表达,对于读者来说也更加容易理解架构所要表达的意思。然而不擅长画图的程序员,在大脑里已经有了思路,如何快速能够......
  • 产品代码都给你看了,可别再说不会DDD(三):战略设计
    这是一个讲解DDD落地的文章系列,作者是《实现领域驱动设计》的译者滕云。本文章系列以一个真实的并已成功上线的软件项目——码如云(https://www.mryqr.com)为例,系统性地讲解DDD在落地实施过程中的各种典型实践,以及在面临实际业务场景时的诸多取舍。本系列包含以下文章:DDD入门DD......
  • 浅谈架构
    1     引言    笔者从事架构师工作多年,发现虽然软件开发人员人人都知道架构,但架构真正做什么,确很少有人能说的清楚。    大部分普通开发人员所想到的架构是框架的搭建以及各种架构技术比如缓存、消息队列、多线程等等,笔者曾经面试过一个应聘架构师岗位的......
  • 深入理解后端开发中的微服务架构与容器化
    在现代的应用开发中,微服务架构和容器化技术已成为热门的话题。它们可以帮助构建高度可扩展、灵活、可维护的后端系统。本文将深入探讨微服务架构和容器化技术的原理、优势以及如何在后端开发中应用它们。什么是微服务架构?微服务架构是一种将应用拆分成一组小型、自治的服务的设计方......