本系列所有文章

如何一步一步用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. SD卡初始化以及命令详解

    SD卡是嵌入式设备中很常用的一种存储设备,体积小,容量大,通讯简单,电路简单所以受到很多设备厂商的欢迎,主要用来记录设备运行过程中的各种信息,以及程序的各种配置信息,很是方便,有这样几点是需要知道的 ...

  2. js实现的文章输入检查与测速。

    在群里聊天,一个群友求助.说要实现 文章对比输入,出错了标红,正确的标绿. 同时还需要统计正确率. 我一开始以为很容易,结果搞了半天.最后折腾出来了. 这里的思路如下:利用js的数组.将文章和输入的内 ...

  3. Swift迁入第三方库时的版本错误解决

    我的swift的项目用的是swift 2.3的版本,但是用CocoaPods迁入一个第三方:ObjectMapper后,编译会出现这样一个问题: Use Legacy Swift Language V ...

  4. Struts2配置dtd约束

    Struts2和Struts1的区别: 一.elclipse-ee开发 搭建环境eclipse-ee 1.加入jar包  apps/struts2-blank.war解压 2.在web.xml文件中配 ...

  5. Spring 之 配置(Java之负基础实战)

    1.程序加入Spring <?xml version="1.0" encoding="utf-8"?> <web-app xmlns=&quo ...

  6. 一个完整的PHP类包含的七种语法说明

    类中的七种语法说明 -属性 -静态属性 -方法 -静态方法 -类常量 -构造函数 -析构函数 <?php class Student { // 类里的属性.方法和函数的访问权限有 (函数和方法是 ...

  7. AngularJS 讲解五, Factory ,Service , Provider

    一. 首先说一下,为什么要引入Factory,Service和Provider这三个Service层. 1.因为我们不应该在controller层写入大量的业务逻辑和持久化数据,controller层 ...

  8. magento1.x 运行在 php7 优惠券的问题

    diff --git app/code/core/Mage/Sales/etc/config.xml index 5bb43d7..7db62ca 100644 --- app/code/core/M ...

  9. .NET DLL 保护措施详解(非混淆加密加壳)核心思路的实现

    最近有很多朋友通过BLOG找到我询问我的相关细节,其实相关的实现细节我早已把源码上传到51aspx上面了,地址是http://www.51aspx.com/code/codename/56949 也有 ...

  10. OBJECT和EMBED标签

    一.介绍: 我们要在网页中正常显示flash内容,那么页面中必须要有指定flash路径的标 签.也就是OBJECT和EMBED标签.OBJECT标签是用于windows平台的IE浏览器的,而EMBED ...