前言:

最近看到ABP官网的一本电子书,感觉写的很好,翻译出来,一起学习下

(Implementing Domain Driven Design) https://abp.io/books

DDD简介

领域驱动设计(DDD)是一种通过将实现连接到演进的模型来实现复杂需求的软件开发方法

相对于简单的CRUD应用,DDD更适合于复杂的领域和大规模的应用。它关注核心域逻辑,而不是基础结构细节。

它有助于构建灵活、模块化和可维护的代码库。

DDD的实现高度依赖于面向对象编程(Object Oriented Programming, OOP)和SOLID原则。实际上,它实现并扩展了这些原则。因此,在真正实现DDD时,对OOP和SOLID的良好理解会对您有很大帮助

DDD分层和整洁架构

基于领域驱动的解决方案有四个基本层

业务逻辑分为两个层,领域层和应用层,而它们包含不同种类的业务逻辑

  • 领域层: 实现领域/系统的核心、用例独立的业务逻辑
  • 应用层: 基于领域实现应用的用例。用例可以被认为是用户界面(UI)上的用户交互。
  • 表示层: 包含应用程序的UI元素(页面、组件)
  • 基础设施层: 通过实现对第三方库和系统的抽象和集成来支持其他层

核心构建块

DDD主要关注领域和应用层,而忽略了表示和基础结构。它们被视为细节,业务层不应该依赖于它们

这并不意味着表示层和基础结构层不重要。它们非常重要。UI框架和数据库提供程序有它们自己的规则和最佳实践,您需要了解并应用它们。然而,这些都不在DDD的主题之内

领域层构建块

  • 实体:  实体是一个具有自己属性(状态、数据)和方法的对象,这些属性实现了在这些属性上执行的业务逻辑。实体由其唯一标识符(Id)表示。两个id不同的实体对象视为不同的实体
  • 值对象: 值对象是另一种类型的域对象,通过其属性而不是唯一的Id来标识。这意味着具有相同属性的两个值对象被认为是同一个对象。值对象通常被实现为不可变的,并且通常比实体要简单得多。
  • 聚合和聚合根: 聚合是由聚合根对象绑定在一起的对象集群(实体和值对象)。聚合根是具有一些附加职责的实体的特定类型
  • 存储库(接口): 存储库是一个类似集合的接口,域层和应用层使用它来访问数据持久性系统(数据库)。它对业务代码隐藏了DBMS的复杂性。域层包含存储库的接口
  • 领域服务: 领域服务是一种无状态服务,它实现领域的核心业务规则。实现依赖于多个聚合(实体)类型或一些外部服务的域逻辑是有用的。
  • 规范: 规范用于为实体和其他业务对象定义命名的、可重用的和可组合的过滤器
  • 领域事件: 领域事件是在发生特定于域的事件时,以松散耦合的方式通知其他服务的一种方式

应用层构建块

  • 应用程序服务: 应用程序服务是一种无状态服务,它实现应用程序的用例。应用程序服务通常获取和返回dto。它由表示层使用。它使用并协调领域对象来实现用例。用例通常被认为是一个工作单元
  • 数据传输对象(DTO): DTO是一个简单的对象,没有任何业务逻辑,用于在应用程序层和表示层之间传输数据。
  • 工作单元(UOW): 工作单元是作为事务单元执行的原子工作。UOW中的所有操作都应该在成功时提交,失败时回滚

实现领域驱动设计 - 使用ABP框架 - 什么是领域驱动设计?的更多相关文章

  1. 实现领域驱动设计 - 使用ABP框架 - 解决方案概览

    .NET解决方案的分层 下图显示了使用ABP的 应用启动模板 创建的Visual Studio解决方案: 解决方案名称为问题跟踪,它由多个项目组成.通过考虑DDD原则以及开发和部署实践,该解决方案是分 ...

  2. 实现领域驱动设计 - 使用ABP框架 - 存储库

    存储库 Repository 是一个类似于集合的接口,领域层和应用程序层使用它来访问数据持久性系统(数据库),以读写业务对象(通常是聚合) 常见的存储库原则是: 在领域层定义一个存储库接口(因为它被用 ...

  3. 实现领域驱动设计 - 使用ABP框架 - 通用准则

    在进入细节之前,让我们看看一些总体的 DDD 原则 数据库提供者 / ORM 无关性 领域和应用程序层应该与 ORM / 数据库提供程序 无关.它们应该只依赖于 Repository 接口,而 Rep ...

  4. 实现领域驱动设计 - 使用ABP框架 - 创建实体

    用例演示 - 创建实体 本节将演示一些示例用例并讨论可选场景. 创建实体 从实体/聚合根类创建对象是实体生命周期的第一步.聚合/聚合根规则和最佳实践部分建议为Entity类创建一个主构造函数,以保证创 ...

  5. 【我们一起写框架】领域驱动设计的CodeFirst框架(一)—序篇

    前言 领域驱动设计,其实已经是一个很古老的概念了,但它的复杂度依旧让学习的人头疼不已. 互联网关于领域驱动的文章有很多,每一篇写的都很好,理解领域驱动设计的人都看的懂. 不过,这些文章对于那些初学者而 ...

  6. .net core +codefirst(.net core 基础入门,适合这方面的小白阅读) 【我们一起写框架】领域驱动设计的CodeFirst框架(一)—序篇

    .net core +codefirst(.net core 基础入门,适合这方面的小白阅读)   前言 .net core mvc和 .net mvc开发很相似,比如 视图-模型-控制器结构.所以. ...

  7. ABP框架 - 领域服务

    文档目录 本节内容: 简介 例子 创建一个接口 实现服务 使用应用服务 相关论述 为什么不只用应用服务? 如何强制你使用领域服务? 简介 领域服务(或服务)用来执行领域操作和业务规则.Eric Eva ...

  8. C#进阶系列——DDD领域驱动设计初探(六):领域服务

    前言:之前一直在搭建项目架构的代码,有点偏离我们的主题(DDD)了,这篇我们继续来聊聊DDD里面另一个比较重要的知识点:领域服务.关于领域服务的使用,书中也介绍得比较晦涩,在此就根据博主自己的理解谈谈 ...

  9. DDD领域驱动设计初探(六):领域服务

    前言:之前一直在搭建项目架构的代码,有点偏离我们的主题(DDD)了,这篇我们继续来聊聊DDD里面另一个比较重要的知识点:领域服务.关于领域服务的使用,书中也介绍得比较晦涩,在此就根据博主自己的理解谈谈 ...

随机推荐

  1. linux lvm逻辑卷管理之lvdisplay命令

    linux 磁盘管理分fdisk parted 和LVM三种方式,我们这里重点是说lvm 我们来看看LVM基本术语(lvm和传统fdisk分区方式有区别)由于传统的磁盘管理不能对磁盘进行磁盘管理,因此 ...

  2. vue 组件复用 - component

    vue 组件复用 - component vue 组件复用 就是对 component 标签的使用 先看图 下图看使用 结果: 可以看到 在箱包 这一项,我将banner 组件用了两次,我 每次 点击 ...

  3. unity 编辑器扩展简单入门

    unity 编辑器扩展简单入门 通过使用编辑器扩展,我们可以对一些机械的操作实现自动化,而不用使用额外的环境,将工具与开发环境融为一体:并且,编辑器扩展也提供GUI库,来实现可视化操作:编辑器扩展甚至 ...

  4. 2021.08.03 BZOJ 疯狂的馒头(并查集)

    2021.08.03 BZOJ 疯狂的馒头(并查集) 疯狂的馒头 - 题目 - 黑暗爆炸OJ (darkbzoj.tk) 重点: 1.并查集的神奇运用 2.离线化 题意: 给一个长为n的序列,进行m次 ...

  5. Collection工具类

    Collection工具类: 集合工具类,定义除了存取以外的集合常用方法 方法: public static void reverse(List<?> list)   //反转集合中元素的 ...

  6. VSCode 前端常用插件集合

    Visual Studio Code 是由微软开发的一款免费.跨平台的文本编辑器.由于其卓越的性能和丰富的功能,它很快就受到了大家的喜爱. 但工欲善其事必先利其器,以下是本人为前端开发收集的常用的vs ...

  7. Git&Gitee

    目录 Git Git介绍 安装 命令学习 Git的作用 git与svn比较 Git,GitHub,GitLab,Gitee Git工作流程 Git常用命令 在仓库目录终端下 - 设置全局用户 在仓库目 ...

  8. Enum枚举类型实战总结,保证有用!

    一般在我们开发时如果能使用枚举罗列的,一般都会定义一个枚举类型.将枚举类型作为方法的参数,可以方便的进行调用,给我们带来不少的遍历,当然有时候它还不如直接用一个int类型带来,带来一定灵活性.但只要能 ...

  9. 修改本地仓库Maven,设置镜像

    修改本地仓库的位置: 先建立 文件路径: 进入文件夹目录: 就可以看到一个配置文件夹 就在里面修改本地仓库的路径,设置阿里云镜像 添加本地阿里云镜像: 如下图: 内容如下: <mirror> ...

  10. Docker被禁了!只能靠它了......

    科技飞速发展的今天,企业对候选人有了新的更高要求,如市场.运营等必须会Python.Sql,面试常问诸如用户漏斗等考察数据分析能力.可以说,懂数据的人会更有竞争力通过面试. 而市场上,专业的数据分析人 ...