本系列所有文章

如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念

如何一步一步用DDD设计一个电商网站(二)—— 项目架构

如何一步一步用DDD设计一个电商网站(三)—— 初涉核心域

如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户

如何一步一步用DDD设计一个电商网站(五)—— 停下脚步,重新出发

如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文

如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文

如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成

如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车

如何一步一步用DDD设计一个电商网站(十一)—— 最后的准备

如何一步一步用DDD设计一个电商网站(十二)—— 提交并生成订单

如何一步一步用DDD设计一个电商网站(十三)—— 领域事件扩展

如何一步一步用DDD设计一个电商网站(十四)—— 领域事件扩展

阅读目录

一、前言

  这是本系列的最后一篇了,后续可能会有一些关于DDD方面新的想法和问题的解决过程的文章,会另起标题来写。所以这篇就把之前的几篇回顾一下,也算是对自己这3个月的内容做一个总结,对之前的几篇都有看过的童鞋可以跳过本篇。

二、故事的开始

  这次的这个系列是自己给自己定下的一个目标,还是下了比较大的决心的。因为在我看来,不管是技术方案也好还是设计方案也好,DDD的价值并不局限于在它本身,它是一种抽象能力和思维方式的很好的锻炼。还是那句话,我一直相信的是,做好了DDD,是成为一个合格的架构师的必要非充分条件。所以一是想把自己这几年用DDD进行实战过程中的一些收获的总结并由各位来检验,二是希望自己的一些经验可以帮助到更多的人来学习DDD。于是从16年10月底开始就决定每周一更本系列的博文,直到现在。

三、回顾

   第一篇中主要讲了一些概念性的东西,并且结合本系列的Demo设计场景,先梳理出了整个上下文映射图。这一篇我觉得每个人都应该在实践过程中有必要不断的进行回顾并思考其中的边界划分是否合理等问题,需要做出更符合当前背景的设计。

  第二篇开始就进入实战了,主要内容是列举了几种比较常见的分层方式,并且把整个Demo中的项目分层确定了下来。我想这篇可以给一些准备入门的朋友们做为一个起点,一个可以把DDD落地到手头项目中的起点。

  第三篇主要讲述了在核心域中的几个领域对象的建模,和与不同上下文的交互方式的设计。其实该篇的目的更多的是把前2篇中讲的一些概念性的东西以代码的形式表现出来,而恰恰这些是我们实际编码过程中需要耗费精力最大的地方,因为领域对象的建模是否合理,很大程度影响了整个项目的复杂度。

  第四篇开始引入了领域服务和应用服务,并且通过代码的方式来体现出了2者的区别,这也是比较容易混淆的一部分概念,可能有些朋友会傻傻分不清楚某些代码到底应该放在哪里去写。记住:应用服务负责协调,领域服务则应该是某些不属于任何领域对象的业务操作的体现

  第五篇内容相对较少,主要是引入了单元测试和对各位园友提出的一些意见进行改进。

  第六篇开始引入了一个新的上下文,然后讲述了几种常见的集成方式,并且选择了其中的一种来具体实现。在实现的过程中,建议贯彻好六边形架构的设计思想,做好防腐层的设计,以保证内聚的领域对象不被破坏。

  第七、八篇从技术角度来看并没有增加新的东西,更多的是一种对领域对象进行建模的过程中笔者的一个习惯和方式,并且用代码来表现出来。更多的是对业务的实现。

  第九篇主要阐述的是仓储层的设计,以及在不同的存储方案中的技术支持。本文以实战为主,举了2个常见的场景和4种解决方案,并且选择其中一种进行了实现。我想这篇还是比较有价值的,可以给大家多一些借鉴价值。

  第十篇还是业务上的补缺和完善,业务主导的一篇内容。

  第十一篇其实更多的是为第十二篇打铺垫。

  第十二篇从技术角度来看引入了较多的东西:领域事件、领域事件的发布、和在多个上下文之间集成会遇到的问题和解决方案,并且进行了代码实现。

  第十三篇是对第十二篇放到分布式场景中的考量。

  到目前为止,其实在用DDD做项目的过程中涉及的基本概念和相应的实现都已经有了。所开放的Demo,麻雀虽小但五脏俱全。

四、结语

  本系列的Demo,仅包含了一些核心的部分,我希望可以促使大家多一些思考。特别是一些仅仅是有兴趣的或者刚入门的童鞋,可以在这个基础之上,去实践。我们不要盲目的追求技术的炫酷,比如那些相对偏向技术层面的CQRS、事件源等的实现。我觉得大家在真正经过实战之后,自然会有更深的理解,为什么会出现这些技术方案,和它真正用来解决的问题是什么,并且自己能够去实现。

作者:Zachary_Fan
出处:http://www.cnblogs.com/Zachary-Fan/p/DDD_14.html

如何一步一步用DDD设计一个电商网站(十四)—— 回顾与总结的更多相关文章

  1. 如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户

    阅读目录 前言 怎么卖 领域服务的使用 回到现实 结语 一.前言 上篇中我们讲述了“把商品卖给用户”中的商品和用户的初步设计.现在把剩余的“卖”这个动作给做了.这里提醒一下,正常情况下,我们的每一步业 ...

  2. 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...

  3. 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成

    阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...

  4. 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车

     阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...

  5. 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文

    阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...

  6. 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文

    阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...

  7. 如何一步一步用DDD设计一个电商网站(五)—— 停下脚步,重新出发

    阅读目录 前言 单元测试 纠正错误,重新出发 结语 一.前言 实际编码已经写了2篇了,在这过程中非常感谢有听到观点不同的声音,借着这个契机,今天这篇就把大家提出的建议一个个的过一遍,重新整理,重新出发 ...

  8. 如何一步一步用DDD设计一个电商网站(十一)—— 最后的准备

     阅读目录 前言 准备 实现 结语 一.前言 最近实在太忙,上周停更了一周.按流程一步一步走到现在,到达了整个下单流程的最后一公里——结算页的处理.从整个流程来看,这里需要用户填写的信息是最多的,那么 ...

  9. 如何一步一步用DDD设计一个电商网站(十二)—— 提交并生成订单

    阅读目录 前言 解决数据一致性的方案 回到DDD 设计 实现 结语 一.前言 之前的十一篇把用户购买商品并提交订单整个流程上的中间环节都过了一遍.现在来到了这最后一个环节,提交订单.单从业务上看,这个 ...

  10. 如何一步一步用DDD设计一个电商网站(十三)—— 领域事件扩展

    阅读目录 前言 回顾 本地的一致性 领域事件发布出现异常 订阅者处理出现异常 结语 一.前言 上篇中我们初步运用了领域事件,其中还有一些问题我们没有解决,所以实现是不健壮的,下面先来回顾一下. 二.回 ...

随机推荐

  1. 9、手把手教你Extjs5(九)使用MVVM特性控制菜单样式

    菜单的样式多了,怎么可以灵活的切换是个问题. 在使用标准菜单的时候,在菜单最前面有二个按钮,可以切换到树状菜单和按钮菜单. 在树状菜单的显示区,可以切换换到标准菜单,以及折叠式菜单. 切换到按钮菜单之 ...

  2. Eclipse PHP 代码无法自动提示函数

    在 linux 系统的 workwpace 里按 ctrl+h,显示出隐藏的文件,找到 .metadata 文件夹,然后将该文件夹删除,再重启 Eclipse 即可.其实它会将之前 Eclipse 连 ...

  3. R语言实战(四)回归

    本文对应<R语言实战>第8章:回归 回归是一个广义的概念,通指那些用一个或多个预测变量(也称自变量或解释变量)来预测响应变量(也称因变量.效标变量或结果变量)的方法.通常,回归分析可以用来 ...

  4. php 模式

    设计模式1.单例模式类的计划生育1.让该类在外界无法造对象2.让外界可以造一个对象,做一个静态方法返回对象3.在类里面通过静态变量控 class Dog { static $dx; public $t ...

  5. IOS开发-UI学习-使用代码创建button

    使用代码创建button分5个步骤,分别是: 1.定义一个按钮,根据定义位置不同可定义为局部变量或者全局变量: 2.初始化按钮,一般使用一个矩形初始化: 3.设置按钮控件的其他属性,如背景图片,或者背 ...

  6. Newman的 power law 参数估计的程序matlab(转载)

    转自:http://blog.sciencenet.cn/blog-4716-46173.html 对于幂率分布的估计问题是个很复杂的问题(..., the empirical detection a ...

  7. 网上搜集的一段php可逆加密函数

    php加密函数: function my_encrypt($data, $key='unun.in') { $char = $str = ''; $key = md5($key); $x = 0; $ ...

  8. java_web学习(2)Servlet

    软件编程体系 B\S 系统架构与C\S 系统结构 Web服务器         HTTP 协议:Web 浏览器与 web 服务器的交互所遵循的规则.         Web 服务器:Web服务器可以解 ...

  9. 浅谈tomcat的配置及数据库连接池的配置

    1.如何修改tomcat的端口 在某些情况下,可能需要修改tomcat监听的端口8080,比如: a.需要启动两份tomcat服务器 b.某个服务占用了8080端口(1433,1521,3306... ...

  10. Coding 代码管理快速入门

    当项目创建好了之后,我们该如何上传代码到 coding 上呢?Coding 网站使用“ Git 仓库”(类似 github )来管理代码.其操作原理在于:利用 git 服务,将本地的项目目录下的文件同 ...