阅读文章《DDD 领域驱动设计-如何 DDD?》的阅读笔记
文章链接:
https://www.cnblogs.com/xishuai/p/how-to-implement-ddd.html
文章作者: 田园里的蟋蟀
首先感谢作者写出这么好的文章。
以下是我的阅读笔记:
1、进行战略建模时不要考虑技术性的东西,不要考虑战术建模的概念,需要搞清楚业务,搞清楚业务的核心,把业务核心功能描述出来。
如文章中举例,微博的评论提到功能,描述其业务:评论时@一个人,然后通知被@的人
核心业务是两个:1、匹配到@的人,2、通知@的人
2、作者把Mention,即“提到”作为一个聚合根,并且定义了两个方法:抽离出@的对象,通知@的对象。
丰富了Mention这个领域模型。当提到规则改变时只需要修改Mention。
这个思考过程有几个点:理清核心业务是匹配人和通知人;把提到作为一个领域模型,一个聚合根;
给这个实体赋予两个方法,变为充血模型。
应用层的应用服务只是牵涉到流程,而不牵涉到业务,只是起到了聚合操作的作用:抽取用户、判断更新、持久化、通知
3、作者的另一个例子是 “权限申请和审核系统”
首先在了解业务的基础上进行战略建模以及描述出核心业务:
业务描述:用户申请权限,管理员后台审核权限。
核心业务是什么,以及判断的依据是什么呢。
核心业务的判断条件:一般核心业务包含在简单的描述里,比如“提到”系统里的“抽离”和“通知”
还有一种方式是判断其是否经常发生,对于业务流程一般不发生变化,变化的是核心业务,DDD应对的就是这种变化。
核心业务就是申请本身,这里我称之为申请单。
我的判断:
核心领域:申请单
申请单作为聚合根和实体,可以包含通知用户审核结果和开通权限两个领域
领域事件:开通权限和通知用户。
疑问:验证用户信息和验证是否有资格申请的验证放哪里。
通知用户是否需要作为一个实体。
解决疑问(注:我的方法是错误的):验证用户信息、验证资格和通知都可以放在申请实体这个领域模型里,作为领域事件。
反思:作者把验证用户信息和资格放在了领域服务。我是放在领域事件里,我想错了。
阅读文章《DDD 领域驱动设计-如何 DDD?》的阅读笔记的更多相关文章
- DDD领域驱动设计 ---- 系列文章
C#进阶系列——DDD领域驱动设计初探(七):Web层的搭建 C#进阶系列——DDD领域驱动设计初探(六):领域服务 C#进阶系列——DDD领域驱动设计初探(五):AutoMapper使用 C#进阶系 ...
- DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践(2)
上一篇:<DDD 领域驱动设计-谈谈 Repository.IUnitOfWork 和 IDbContext 的实践(1)> 阅读目录: 抽离 IRepository 并改造 Reposi ...
- 领域驱动设计(DDD)的实践经验分享之ORM的思考
原文:领域驱动设计(DDD)的实践经验分享之ORM的思考 最近一直对DDD(Domain Driven Design)很感兴趣,于是去网上找了一些文章来看看,发现它确实是个好东西.于是我去买了两本关于 ...
- DDD领域驱动设计:领域事件
1 前置阅读 在阅读本文章之前,你可以先阅读: DDD领域驱动设计是什么 DDD领域驱动设计:实体.值对象.聚合根 DDD领域驱动设计:仓储 MediatR一个优秀的.NET中介者框架 2 什么是领域 ...
- DDD领域驱动设计:CQRS
1 前置阅读 在阅读本文章之前,你可以先阅读: DDD领域驱动设计是什么 DDD领域驱动设计:实体.值对象.聚合根 DDD领域驱动设计:仓储 MediatR一个优秀的.NET中介者框架 2 什么是CQ ...
- 浅谈我对DDD领域驱动设计的理解
从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决. 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品 ...
- DDD 领域驱动设计-商品建模之路
最近在做电商业务中,有关商品业务改版的一些东西,后端的架构设计采用现在很流行的微服务,有关微服务的简单概念: 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独 ...
- DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践(3)
上一篇:<DDD 领域驱动设计-谈谈 Repository.IUnitOfWork 和 IDbContext 的实践(2)> 这篇文章主要是对 DDD.Sample 框架增加 Transa ...
- DDD 领域驱动设计-如何完善 Domain Model(领域模型)?
上一篇:<DDD 领域驱动设计-如何 DDD?> 开源地址:https://github.com/yuezhongxin/CNBlogs.Apply.Sample(代码已更新) 阅读目录: ...
- 领域驱动设计(DDD)部分核心概念的个人理解
领域驱动设计(DDD)是一种基于模型驱动的软件设计方式.它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题.Eric Ivans为领域驱动设计提出了大量的最佳实践 ...
随机推荐
- JDBC的异常处理方式
A: try...catch(...) {...} finally {} B: 关闭ResultSet,Statement , Connection import java.sql.Connectio ...
- quartz.net 学习
目录 简介 Quartz是什么? Quartz的应用场景Quartz的安装 安装 源码Hello World范例API 核心API Scheduler接口: Job接口 J ...
- 编译bitcoin比特币客户端
我遇到了两个不太容易解决的问题. 问题一: checking for Berkeley DB C++ headers... default configure: error: Found Berkel ...
- Jenkins+gitlab+maven持续集成
https://blog.csdn.net/tq08g2z/article/details/79718425 https://www.jianshu.com/p/3507d8b2ac87 报错用下面解 ...
- nginx和php-fpm 是使用 tcp socket 还是 unix socket ?
转自 http://blog.csdn.net/qq624202120/article/details/60957634 从上面的图片可以看,unix socket减少了不必要的tcp开销,而tcp需 ...
- CF1187E Tree Painting
思路: 树形dp,首先使用dp计算以1为根的时候的最大分数,同时得到各个子树i的最大分数dp[i].然后利用前面得到的dp数组分别计算以其他每个点作为根的时候的最大分数. 实现: #include & ...
- OpenCV3编程入门.记录
ZC:OpenCV3编程入门_毛星云编著_电子工业出版.pdf 1.在看到 PDF.P134(计算数组加权和:addWeighted()函数)的时候,其中讲到“当输出数组的深度为CV_32S时,这个函 ...
- 【log4j】的学习和理解 + 打印所有 SQL
log4j 1.2 学习和理解 + 打印所有 SQL 一.基本资料 官方文档:http://logging.apache.org/log4j/1.2/manual.html(理解基本概念和其他) lo ...
- 什么是 redis 的雪崩、穿透和击穿?
缓存雪崩 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机.缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据 ...
- [CF707D]Persistent Bookcase_主席树_bitset
Persistent Bookcase 题目链接:http://codeforces.com/contest/707/problem/D 注释:略. 题解: 发现虽然$q\le 10^5$但是网格是$ ...