DDD - 概述 - (一)
本片将介绍以下内容:
1).DDD是什么?
2).怎么使用DDD?
3).使用DDD应该规避或者注意什么?
一.DDD是什么?
简言之:领域驱动设计(domain driven design),顾名思义,着重点在领域,这里的领域指的就是具体的业务领域,一个业务可以是一个领域或者多个子领域,每个领域中包含多个子域.具体的实现更偏重于具体的业务知识,而不是技术的细节,说白了技术无关性了.
2. 我们如何开始?
开始使用需要领域专的参与,需要领域专家对相应领域的业务分析,分析过程要注意 限界上下文:
1.核心域
整个业务的核心领域并划分限界上下文
2.支撑域
支撑其他域的域,,,,好像有点蛋疼的说法,举个栗子:假设当前系统为电商系统,其中涉及到订单这个核心模块,这个订单就可以独立成一个核心域,但是问题来了,订单会涉及到用户信息,以及用户账户是否正常是否被冻结等权限的判断,那么这个用户的信息的内容可以独立成一个子域,但是还一个问题,不只是订单会用到用户信息,留言\评论\等等都会用到吧,那么到这里就很明显了,这个就是所谓的支撑域了
3.通用域
顾名思义,通用的模块或者功能或者插件或第三方成熟的功能等等,比如,ids4.日志,中介插件,熔断重试等等
3.使用DDD应该规避或者注意什么 ?
DDD实现,另一方面,在我们我们需要注意点。这些都是:
1)使用一个以数据为中心的视图建模时的问题域
通常,数据模型的第一件事是一个架构师/开发人员将开始设计。他们总是认为数据是最重要的,因为数据是我们需要报告。如果你开始与DDD,必须改变这种心态。数据本身是没有意义的。只有逻辑给数据意义,相同的数据可以在不同的上下文中有不同的含义。因此,我们必须从上下文和逻辑,而不是数据。
2)专注于实现细节等实体、值对象、服务、工厂、和存储库的核心概念
实体、值对象存储库等等没有意义,直到我们定义了通用语言,有界的情况下,合同/制作软件的接口。如果我们开始早期与实体等实现细节,这是个好机会,结果将是一个域周围很多服务和业务逻辑分散无处不在。
3)使用泛型和Developer-Specific术语和概念在实现应用程序
我们不应该使用概念,比如保存、更新、删除、处理、管理、等。这些概念太技术——抽象的概念,没有具体的意义。相反,我们必须专注于业务概念。上述的概念(即保存、更新等)不相关的业务概念。要理解这一点,我总是鼓励自己想象没有电脑客户端运行他的差事/业务(手动做特定的任务)。所以,总是想从业务/领域专家的角度来看,和给一个明确的上下文。避免通用术语,可导致不同的含义在不同,非特异性背景。
4)高估了数据库事务,而不是专注于业务流程或事务
在DDD,商业交易比DB更重要的事务。数据库事务是ACID(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),和短时间运行的,而商业交易。事实上,在现实生活中,我们不知道数据库事务,了解业务事务。例如,想象一下当你坐在餐厅,点一些食物或饮料。在订单事务,实现与否,将会有一个过程与一些异步任务很多可能的变化不一致的状态;但最后,所有状态都将一致(最终一致)。因此,与DDD,永远不要考虑数据库事务。相反,总是思考现实世界的过程,如行为和可能的结果,如果发生失败如何弥补该行为或结果。
DDD - 概述 - (一)的更多相关文章
- DDD - 概述 - 聚合 - 限界上下文 (四)
最重要的一句话 DDD的所有有相关理论中,只有一句是至关重要的,但是也是最容易被忽略和最难做到的,抛弃传统的设计方式(思路)的思想,这句话起了决定性的作用,但是99%的人都忽略了或者在开始无法正视或理 ...
- DDD - 概述 - 模块 (二)
首先,你必须知道以下DDD构建块: Entities - 实体 Value objects - 值对象 Aggregate roots - 聚合跟 Repositories - 仓储对象 Factor ...
- DDD - 概述 - 聚合 (三)
不要再看那些理论啦,说的云里雾里的,绕到你怀疑人生 一句话概括聚合创建:聚合的一致性决定了聚合边界的确定,决定了聚合对象的创建.所谓的一致性即事务的一致性,细化就是 立即性和原子性.
- DDD兴起的原因以及与微服务的关系
DDD为什么能火起来? 我们先不讨论DDD的定义, 先梳理一下DDD火起来的背景, 根据我学习的套路, 永远是为什么为先,再是解决什么问题,是什么东西, 最后如何使用.我们都知道这些年随着设备以及技术 ...
- 对DDD使用的一些建议
群里经常看到类似于"看了DDD之后就不会写代码了"的情况,趁最近学车的间隙,写写我的看法. 关于这个事儿,我是觉得:当没有DDD的时候,如果你知道怎么做,那就那么做好了,不要考虑D ...
- DDD实战进阶第一波(一):开发一般业务的大健康行业直销系统(概述)
本系列文章 DDD实战进阶第一波(一):开发一般业务的大健康行业直销系统(概述) DDD实战进阶第一波(二):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架一) 近年来,关于如何开发基于 ...
- 领域模型驱动设计(Domain Driven Design)入门概述 -----DDD 解释
软件开发要干什么: 反映真实世界要自动化的业务流程 解决现实问题 领域Domain Domain特指软件关注的领域 在不能充分了解业务领域的情况下是不可能做出一个好的软件 领域建模 领域模型驱动设计 ...
- DDD领域驱动设计-概述-Ⅰ
如果我看得更远,那是因为我站在巨人的肩膀上.(If I have seen further it is by standing on ye shoulder of Giants.) ...
- DDD中Dto领域驱动设计概述,摘自《NET企业级应用架构设计》
随机推荐
- Git如何合并一个已经在GitHub上提交但没有合并的Pull Request请求
步骤 进入Git仓库,执行curl -L https://github.com/<USER>/<REPO>/pull/<NO>.patch | git am
- Security+高分考过经验分享812分
Security +也是无意中从谷安的宣传单知道的,本来就是想从事安全的行业,而且Security +含金量高,是国际认可的认证就想着去考一考试试. 大概从2018.12开始正式准备的,前面时间都是停 ...
- SpringBoot整合阿里云OSS文件上传、下载、查看、删除
1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...
- 1.9 分布式协调服务-Zookeeper(一)
前言 分布式环境的特点 分布性 并发性 程序运行过程中,并发性操作是很常见的.比如同一个分布式系统中的多个节点,同时访问一个共享资源.数据库.分布式存储 无序性 进程之间的消息通信,会出现顺序不一致问 ...
- IDEA+Maven+Spring MVC HelloWorld示例
用Maven创建Web项目 选择webapp模板 创建成功后点Enable Auto-Import idea给我们创建出来的结构是这样的,这还不标准,需要自己修改. 在main文件夹下创建java文件 ...
- 最短路径(Dijkstra算法)
算法局限性:边的权值不能为负. 需要两个辅助数组dist[],path[],分别记录起点到各点的最短距离和最短路径 算法步骤: 1.根据起点v0初始化dist[]和path[]数组. 2.在剩下的点中 ...
- rsync + sersync 实现实时数据同步
一.环境: 主机1:youzhuan-bak centos 7.2 主机2:youzhuan-online centos 7.2 二.部署过程: youzhuan-bak : [root@ ...
- 解决:在微信中访问app下载链接提示“已停止访问该网页”
前言 现如今微信对第三方推广链接的审核是越来越严格了,域名在微信中分享转发经常会被拦截,一旦被拦截用户就只能复制链接手动打开浏览器粘贴才能访问,要不然就是换个域名再推,周而复始.无论是哪一种情况都会面 ...
- C语言通讯录系统——C语言单向链表实现
实现的通讯录功能有:查看通讯录.添加联系人.删除联系人.查询联系人.保存并退出. 通过txt文件保存和读取通讯录数据. #include <stdio.h> #include <st ...
- L1-Day5
1.他偷了那个装满钱的书包. [我的翻译]He stole the bag full of money. [标准答案]He stole that school bag full of money. ( ...