热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

DDD(领域驱动设计)分享(2/2)

文章目录一、概述二、分层架构一、概述DDD的系统架构有很多,常见的有分层架构、洋葱架构、六边形架构等,看起来像是多个不同的设计,但是他们

文章目录

  • 一、概述
  • 二、分层架构


一、概述

DDD的系统架构有很多,常见的有分层架构、洋葱架构、六边形架构等,看起来像是多个不同的设计,但是他们的核心思想其实都差不多:职责分明、高内聚低耦合。比如洋葱架构中最内层的最小原是实体模型,表示实体对外部的依赖最小基本不依赖其他层,同样的在分层架构中的领域层也是这样的思路,领域层中实体只负责自己独立的业务逻辑,而整体的业务实现和事务等都是领域服务通过编排领域实体来实现的。

二、分层架构

DDD的分层架构遵循一个原则:每层只能与位于下方的直接下层发生耦合,而不能直接同层依赖或者向上依赖上层。由于层间松散的耦合关系,使得我们可以专注于本层的设计,而不必关心其他层的设计,也不必担心当前层的设计会影响其它层。一般来说通常分为四层:用户接口层、应用层、领域层、基础设施层。
在这里插入图片描述
1.用户接口层的主要职责是提供接口给前端进行调用,完成特定的产品功能,向下依赖应用层。

2.应用层主要是负责接收用户接口层参数,然后进行逻辑拆分,可能一个很复杂的功能需要多个领域共同完成,应用层需要根据实际情况对领域层进行编排,最后根据多个领域的数据组合成最终结果。与此同时,还要负责总的容错处理。

3.领域层主要专注于领域内部的逻辑,保证自己领域内部逻辑自洽,同时要处理领域内部的本地事务行为。实体主要负责核心的业务逻辑,而领域服务主要用来编排实体。

4.基础设施层主要负责一些独立的基础功能,比如数据存储,上层完全不用关心数据是如何进行持久化的,是用Mysql还是ES等,基础设施层只会暴露一个统一的接口表明自己有哪些能力即可。

分层架构看起来和传统的MVC三层架构有些相似,但是仔细探索会发现,DDD的分层架构更加细致,更加强调高内聚低耦合,永远都是向下的单向一级依赖关系,而且每层负责独立的功能,相互之间没有重叠。传统的三层架构可拓展性较差,一次功能迭代就可能导致整体的重构,而DDD中松耦合的分层架构,相对来说比较可控,每层的改动对其他层的影响较小,拓展性更高,更加适用于现在敏捷开发的模式,每次迭代都能快速完成。


推荐阅读
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • 本文探讨了Flutter和Angular这两个流行框架的主要区别,包括它们的设计理念、适用场景及技术实现。 ... [详细]
  • 成为一名高效的Java架构师不仅需要掌握高级Java编程技巧,还需深入理解JVM的工作原理及其优化方法。此外,对池技术(包括对象池、连接池和线程池)的应用、多线程处理、集合对象的内部机制、以及常用的数据结构和算法的精通也是必不可少的。同时,熟悉Linux操作系统、TCP/IP协议栈、HTTP协议等基础知识,对于构建高效稳定的系统同样重要。 ... [详细]
  • 本文介绍了如何使用Workman框架构建一个功能全面的即时通讯系统,该系统不仅支持一对一聊天、群组聊天,还集成了视频会议和实时音视频通话功能,同时提供了红包发送等附加功能。 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 构建高性能Feed流系统的设计指南
    随着移动互联网的发展,Feed流系统成为了众多社交应用的核心组成部分。本文将深入探讨如何设计一个高效、稳定的Feed流系统,涵盖从基础架构到高级特性的各个方面。 ... [详细]
  • 深入解析轻量级数据库 SQL Server Express LocalDB
    本文详细介绍了 SQL Server Express LocalDB,这是一种轻量级的本地 T-SQL 数据库解决方案,特别适合开发环境使用。文章还探讨了 LocalDB 与其他轻量级数据库的对比,并提供了安装和连接 LocalDB 的步骤。 ... [详细]
  • 本项目使用Java语言开发了一个基于B/S架构的指纹识别系统,该系统能够实现指纹的高效采集与精准识别,适用于多种安全认证场景。 ... [详细]
  • 本文详细记录了一位Java程序员在Lazada的面试经历,涵盖同步机制、JVM调优、Redis应用、线程池配置、Spring框架特性等多个技术点,以及高级面试中的设计问题和解决方案。 ... [详细]
  • 现在的新手程序猿,动不动就是框架,就连外面培训的也是框架,我就问一句,没了框架是不是就啥也不会了 ... [详细]
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • 本文介绍了一种在 Android 开发中动态修改 strings.xml 文件中字符串值的有效方法。通过使用占位符,开发者可以在运行时根据需要填充具体的值,从而提高应用的灵活性和可维护性。 ... [详细]
  • 本文详细介绍了MySQL InnoDB存储引擎中的Redo Log和Undo Log,探讨了它们的工作原理、存储方式及其在事务处理中的关键作用。 ... [详细]
  • Django与Python及其他Web框架的对比
    本文详细介绍了Django与其他Python Web框架(如Flask和Tornado)的区别,并探讨了Django的基本使用方法及与其他语言(如PHP)的比较。 ... [详细]
  • 华为云openEuler环境下的Web应用部署实践
    本文详细记录了在华为云openEuler系统上进行Web应用部署的具体步骤,包括配置yum源、安装Apache、MariaDB、PHP及其相关组件,并完成WordPress的安装与配置过程。 ... [详细]
author-avatar
辞骸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有