文章链接:

https://www.cnblogs.com/xishuai/p/how-to-implement-ddd.html

文章作者: 田园里的蟋蟀

首先感谢作者写出这么好的文章。

以下是我的阅读笔记:

1、进行战略建模时不要考虑技术性的东西,不要考虑战术建模的概念,需要搞清楚业务,搞清楚业务的核心,把业务核心功能描述出来。
如文章中举例,微博的评论提到功能,描述其业务:评论时@一个人,然后通知被@的人
核心业务是两个:1、匹配到@的人,2、通知@的人

2、作者把Mention,即“提到”作为一个聚合根,并且定义了两个方法:抽离出@的对象,通知@的对象。
丰富了Mention这个领域模型。当提到规则改变时只需要修改Mention。
这个思考过程有几个点:理清核心业务是匹配人和通知人;把提到作为一个领域模型,一个聚合根;
给这个实体赋予两个方法,变为充血模型。
应用层的应用服务只是牵涉到流程,而不牵涉到业务,只是起到了聚合操作的作用:抽取用户、判断更新、持久化、通知

3、作者的另一个例子是 “权限申请和审核系统”
首先在了解业务的基础上进行战略建模以及描述出核心业务:
业务描述:用户申请权限,管理员后台审核权限。

核心业务是什么,以及判断的依据是什么呢。
核心业务的判断条件:一般核心业务包含在简单的描述里,比如“提到”系统里的“抽离”和“通知”
还有一种方式是判断其是否经常发生,对于业务流程一般不发生变化,变化的是核心业务,DDD应对的就是这种变化。
核心业务就是申请本身,这里我称之为申请单。
我的判断:
核心领域:申请单
申请单作为聚合根和实体,可以包含通知用户审核结果和开通权限两个领域
领域事件:开通权限和通知用户。

疑问:验证用户信息和验证是否有资格申请的验证放哪里。
通知用户是否需要作为一个实体。
解决疑问(注:我的方法是错误的):验证用户信息、验证资格和通知都可以放在申请实体这个领域模型里,作为领域事件。

反思:作者把验证用户信息和资格放在了领域服务。我是放在领域事件里,我想错了。

阅读文章《DDD 领域驱动设计-如何 DDD?》的阅读笔记的更多相关文章

  1. DDD领域驱动设计 ---- 系列文章

    C#进阶系列——DDD领域驱动设计初探(七):Web层的搭建 C#进阶系列——DDD领域驱动设计初探(六):领域服务 C#进阶系列——DDD领域驱动设计初探(五):AutoMapper使用 C#进阶系 ...

  2. DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践(2)

    上一篇:<DDD 领域驱动设计-谈谈 Repository.IUnitOfWork 和 IDbContext 的实践(1)> 阅读目录: 抽离 IRepository 并改造 Reposi ...

  3. 领域驱动设计(DDD)的实践经验分享之ORM的思考

    原文:领域驱动设计(DDD)的实践经验分享之ORM的思考 最近一直对DDD(Domain Driven Design)很感兴趣,于是去网上找了一些文章来看看,发现它确实是个好东西.于是我去买了两本关于 ...

  4. DDD领域驱动设计:领域事件

    1 前置阅读 在阅读本文章之前,你可以先阅读: DDD领域驱动设计是什么 DDD领域驱动设计:实体.值对象.聚合根 DDD领域驱动设计:仓储 MediatR一个优秀的.NET中介者框架 2 什么是领域 ...

  5. DDD领域驱动设计:CQRS

    1 前置阅读 在阅读本文章之前,你可以先阅读: DDD领域驱动设计是什么 DDD领域驱动设计:实体.值对象.聚合根 DDD领域驱动设计:仓储 MediatR一个优秀的.NET中介者框架 2 什么是CQ ...

  6. 浅谈我对DDD领域驱动设计的理解

    从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决. 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品 ...

  7. DDD 领域驱动设计-商品建模之路

    最近在做电商业务中,有关商品业务改版的一些东西,后端的架构设计采用现在很流行的微服务,有关微服务的简单概念: 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独 ...

  8. DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践(3)

    上一篇:<DDD 领域驱动设计-谈谈 Repository.IUnitOfWork 和 IDbContext 的实践(2)> 这篇文章主要是对 DDD.Sample 框架增加 Transa ...

  9. DDD 领域驱动设计-如何完善 Domain Model(领域模型)?

    上一篇:<DDD 领域驱动设计-如何 DDD?> 开源地址:https://github.com/yuezhongxin/CNBlogs.Apply.Sample(代码已更新) 阅读目录: ...

  10. 领域驱动设计(DDD)部分核心概念的个人理解

    领域驱动设计(DDD)是一种基于模型驱动的软件设计方式.它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题.Eric Ivans为领域驱动设计提出了大量的最佳实践 ...

随机推荐

  1. linux中怎样会引起进程睡眠呢?

    答: 使用信号量,wait队列,completion,调用schedule,用GFP_KERNEL指定的内存分配malloc,get,free,page等都会引起睡眠 思考: Q: 为什么会引起睡眠呢 ...

  2. UC浏览器打开百度显示 丰臣吉秀.网址

  3. RTM of ML.NET

    Announcing ML.NET 1.0

  4. Qt编写数据可视化大屏界面电子看板4-布局另存

    一.前言 布局另存是数据可视化大屏界面电子看板系统中的额外功能之一,主要用于有时候用户需要在现有布局上做个微调,然后直接将该布局另存为一个布局配置文件使用,可以省略重新新建布局重新来一次大的调整的工作 ...

  5. PowerDesigner常用命令

    在Tools=>Execute Commands下的Edit/Run Scripts,或者通过Ctrl+Shift+X就可以运行脚本.如图: 1.将所有的表名和列名都修改为大写 '******* ...

  6. Oracle查询序列和函数方法封装

    工具方法: @Autowired private JdbcTemplate businessTpmeJdbcTemplate; @SuppressWarnings("deprecation& ...

  7. 生命周期和Zend引擎

    一切的开始:SAPI接口 SAPI(Server Application Programming Interface)指的是具体应用的编程接口.PHP脚本要执行有很多种方式,通过web服务器,或者直接 ...

  8. 【计算机视觉】MTCNN基于NCNN的测试过程

    前言 操作过程 NCNN: https://github.com/Tencent/ncnn/wiki/how-to-build#build-for-linux-x86; vector初始化: int ...

  9. Vue 组件基础完整示例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 《Java语言程序设计》

    课堂测试:用户需求:英语的26 个字母的频率在一本小说中是如何分布的?某类型文章中常出现的单词是什么?某作家最常用的词汇是什么?<Harry Potter> 中最常用的短语是什么,等等. ...