如何一步一步用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设计一个电商网站(十四)—— 回顾与总结的更多相关文章
- 如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户
阅读目录 前言 怎么卖 领域服务的使用 回到现实 结语 一.前言 上篇中我们讲述了“把商品卖给用户”中的商品和用户的初步设计.现在把剩余的“卖”这个动作给做了.这里提醒一下,正常情况下,我们的每一步业 ...
- 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑
阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...
- 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成
阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...
- 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车
阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...
- 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文
阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...
- 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文
阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...
- 如何一步一步用DDD设计一个电商网站(五)—— 停下脚步,重新出发
阅读目录 前言 单元测试 纠正错误,重新出发 结语 一.前言 实际编码已经写了2篇了,在这过程中非常感谢有听到观点不同的声音,借着这个契机,今天这篇就把大家提出的建议一个个的过一遍,重新整理,重新出发 ...
- 如何一步一步用DDD设计一个电商网站(十一)—— 最后的准备
阅读目录 前言 准备 实现 结语 一.前言 最近实在太忙,上周停更了一周.按流程一步一步走到现在,到达了整个下单流程的最后一公里——结算页的处理.从整个流程来看,这里需要用户填写的信息是最多的,那么 ...
- 如何一步一步用DDD设计一个电商网站(十二)—— 提交并生成订单
阅读目录 前言 解决数据一致性的方案 回到DDD 设计 实现 结语 一.前言 之前的十一篇把用户购买商品并提交订单整个流程上的中间环节都过了一遍.现在来到了这最后一个环节,提交订单.单从业务上看,这个 ...
- 如何一步一步用DDD设计一个电商网站(十三)—— 领域事件扩展
阅读目录 前言 回顾 本地的一致性 领域事件发布出现异常 订阅者处理出现异常 结语 一.前言 上篇中我们初步运用了领域事件,其中还有一些问题我们没有解决,所以实现是不健壮的,下面先来回顾一下. 二.回 ...
随机推荐
- laravel安装excel功能
原文安装链接:https://github.com/Maatwebsite/Laravel-Excel 代码如下: if ($rows = DB::connection('glist')->ta ...
- tools_list
http://files.cnblogs.com/files/yansc/ExportQingtaoImage.rar
- Java对象嵌套
1.基础篇 Java面向对象东西太深奥了,本文只是发表一点自己的见解. 首先 举个栗子!! 汽车, 我们先给汽车定义个轮胎类 有一个属性名 轮胎尺寸 /** *定义一个轮胎类 */ class Wh ...
- 由浅入深Mysql优化
选Mysql优化作为我的第一篇博文,实在是因为这个东西很有意思,也是能体现后端开发人员设计细节及逻辑分析的一个知识点. 那么来吧: 作为Mysql优化,很多人大概能跟着感觉说出如下 : (1)常 ...
- iOS 之 UIStackView
UIStackView是iOS9新推出的布局控件,它的出现,可以说颠覆了以往的布局方式. 问题时,如果我使用UIStackView,它能用在iOS7.8系统中吗? 我要测试一下.测试程序我放到gith ...
- iOS 之 NSString 去除前后空格和回车键
NSString *string = @" spaces in front and at the end "; NSString *trimmedString = [string ...
- PHP 递归实现层级树状展现数据
<?php $db = mysql_connect('localhost', 'root', 'root') or die('Can\'t connect to database'); mysq ...
- 使用ActionBar实现Tab导航
ActionBar还有常用的功能,实现Tab导航.ActionBar在顶端生成多个Tab标签,当用户单击点击某个Tab标签时,系统根据用户点击事件导航指定Tab页面. 为了使用ActionBar实现T ...
- Tomcat 使用过程中的一些技巧
url中文地址乱码 原因: tomcat默认的在url传输时是用iso8859-1编码. 解决方案一: 在使用get传输参数时,将参数中的中文转换成url格式,也就是使用urlEncode和urlDe ...
- HMX-Server C++ 分步式服务器大版本更新了(有源码)
原文地址:http://www.cnblogs.com/hellohuang/p/6294763.html # HMX-ServerHMX-Server分步式服务器框架,主要分为网关.登录.世界.场景 ...