代码人生的小狗窝

一行行枯燥的代码,却描绘出人生的点点滴滴

推荐文章

DDD理论学习系列(十)- 聚合

    DDD理论学习系列(10)-- 聚合 DDD理论学习系列——案例及目录 1.引言 聚合,最初是UML类图中的概念,表示一种强的关联关系,是一种整体与部分的关系,且部分能够离开整体而独立存在,如车和轮胎。 在DDD中,聚合也可以用来表示整体与部分的关系,但不再强调部分与整体的独立性。聚合是将相关联的领域对象进行显示分组,来表达整体的概念(也可以是单一的领域对象)。比如将表示订单与订单项的领域对象进行组合,来表达领域中订单这个整体概念。 我们知道,领域模型是由一系列反映问题域概念的领域对象(实体和值对像)组成,聚合正是应用在领域对象之上。如果要正确应用聚合,我们首先得理清领域对象间的关联关系。 2. 梳理关联关系 在设计领域模型的初期,我们习惯专注于领域中的实体和值对象,而忽略领域对象之间的关联关系,以至于我们会基于现实业务场景或数据模型来建立关联关系。这样就会引入大量不必要的关联,比如下

    阅读全文>>

作者:coody分类:【_驱动开发浏览(2096

2018-10-16

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

    如何一步一步用DDD设计一个电商网站(十三)—— 领域事件扩展本系列所有文章 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念 如何一步一步用DDD设计一个电商网站(二)—— 项目架构 如何一步一步用DDD设计一个电商网站(三)—— 初涉核心域 如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户 如何一步一步用DDD设计一个电商网站(五)—— 停下脚步,重新出发 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成 如何一步一

    阅读全文>>

作者:coody分类:【_驱动开发浏览(988

2018-10-17

DDD理论学习系列(七)- 值对象

    DDD理论学习系列(7)-- 值对象 DDD理论学习系列——案例及目录 1.引言 提到值对象,我们可能立马就想到值类型和引用类型。而在C#中,值类型的代表是strut和enum,引用类型的代表是class、interface、delegate等。值类型和引用类型的区别,大家肯定都知道,值类型分配在栈上,引用类型分配在堆上。 那是不是值类型对应的就是值对象,引用类型对应的就是实体吗?很抱歉,不是的。 值对象我们要分开来看,其包含两个词:值和对象。值是什么?比如,数字(1、2、3.14),字符串(“hello world”、“DDD”),金额(¥50、$50),地址(深圳市南山区科技园)它们都是一个值,这个值有什么特点呢,固定不变,表述一个具体的概念。对象又是什么?一切皆为对象,是对现实世界的抽象,用来描述一个具体的事物。那值对象=值+对象=将一个值用对象的方式进行表述,来表达一个具体的

    阅读全文>>

作者:coody分类:【_驱动开发浏览(579

2018-10-15

从零开始使用CodeArt实践绝佳领域驱动开发(四)

    从零开始使用CodeArt实践最佳领域驱动开发(四)6. 为领域模型Permission编码   现在我们为账户子系统(AccountSubsystem)设计领域对象并编码实现细节。   账号、角色、权限是账户子系统里已知的3个事物,而一个子系统里面可以有多个内聚模型,所以我们首先要思考的问题是:以谁为聚合根创建第一个内聚模型?   与划分子系统的思路一样,我们以最简单、最独立的事物作为突破口。简单是指事物在特定领域里的特征比较少,没有那么复杂。很明显,权限是最简单、最独立的,它不依赖于账号、角色而独立存在,而且从目前收集到的需求来看,权限的特征只需要有名称即可。所以我们尝试以权限(Permission)为聚合根创建第一个内聚模型。请各位注意,我在这里用“尝试”一词表达要做的工作,因为我们并不能保证当前做的决策100%是对的,但是勇敢的去尝试总比畏首畏尾、不敢迈出第一个步子、始终原地踏步要

    阅读全文>>

作者:coody分类:【_驱动开发浏览(1330

2018-10-12

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

    如何一步一步用DDD设计一个电商网站(十一)—— 最后的准备  本系列所有文章 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念 如何一步一步用DDD设计一个电商网站(二)—— 项目架构 如何一步一步用DDD设计一个电商网站(三)—— 初涉核心域 如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户 如何一步一步用DDD设计一个电商网站(五)—— 停下脚步,重新出发 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成

    阅读全文>>

作者:coody分类:【_驱动开发浏览(1390

2018-10-17

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

    如何一步一步用DDD设计一个电商网站(十二)—— 提交并生成订单本系列所有文章 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念 如何一步一步用DDD设计一个电商网站(二)—— 项目架构 如何一步一步用DDD设计一个电商网站(三)—— 初涉核心域 如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户 如何一步一步用DDD设计一个电商网站(五)—— 停下脚步,重新出发 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成 如何一步

    阅读全文>>

作者:coody分类:【_驱动开发浏览(2064

2018-10-16

DDD理论学习系列(八)- 应用服务&领域服务

    DDD理论学习系列(8)-- 应用服务&领域服务 DDD理论学习系列——案例及目录 1. 引言 单从字面理解,不管是领域服务还是应用服务,都是服务。而什么是服务?从SOA到微服务,它们所描述的服务都是一个宽泛的概念,我们可以理解为服务是行为的抽象。从前缀来看,根据DDD的经典分层架构,它们又隶属于不同的层,应用服务属于应用层,领域服务属于领域层。 应用层(Application):负责展现层与领域层之间的协调,协调业务对象来执行特定的应用程序任务。它不包含业务逻辑。 领域层(Domain):负责表达业务概念,业务状态信息以及业务规则,是业务软件的核心。 所以综合来看应用服务是用来表述应用行为,而领域服务用来表述领域行为。 那怎么理解应用行为和领域行为呢,应用行为描述了一个具体操作从开始到结束的每一个环节,而领域行为是对应用行为的细化,用来处理具体的某一个环节。比如,我们手

    阅读全文>>

作者:coody分类:【_驱动开发浏览(894

2018-10-16

读书随感-软件的设计原则

    读书有感--------软件的设计原则任何傻瓜都可以写出计算机能懂的代码,但好的程序员可以写出人类能懂的代码-----Martin Fowler  如果你是新手,你可能会问,为什么代码需要设计原则? 我想说的是肯定不是为了故作高深,存在即是合理, 如果写了一个简单的程序,你可能不需要设计原则, 如果你写了一个复杂的,但是之后再也不会改,那么你也不需要, 但是现实生活中,基本上的软件系统有一定复杂度,而且都在不断的修改。 所以我们需要写出一个不仅让机器看懂,还能够让人类看懂的代码。 让人类能看懂的代码即是可维护性代码,它包含两个核心原则:高内聚、低耦合。 一个有助于实现高内聚低耦合的原则是关注点分离Separation of Concerns(SOC),关注点是软件功能的不同部分,像业务逻辑或者表现方式, SOC是关于把系统分解成不同的可能没有重叠的特性,比如尽量将业务逻辑放在领

    阅读全文>>

作者:coody分类:【_驱动开发浏览(801

2018-10-16

从零开始使用CodeArt实践绝佳领域驱动开发(一)

    从零开始使用CodeArt实践最佳领域驱动开发(一)前言:   目前绝大多数公司依然采用的是传统的项目实施方式——围绕数据库设计做应用程序开发。在这种方式下,程序员的主要工作就是不断的增删改查各种数据表,以数据为核心驱动系统的运行。随着项目进度的推进,系统暴露的问题却越来越多,程序员每天陷入无止境的修复状态中,增加或修改一个功能的代价也越来越大。项目进展看似在推进却好像永远都不会有完成的那一天。   我于2005年的时候就隐约感觉这种方式是错误的,关系型数据库的优势是处理数据的存储而非解决复杂的业务需求,以数据库为核心开发项目必然会导致失败。所以在往后的10多年里不论多么艰难我都坚持摒弃围绕数据库做开发的工作方式,最终我找到了正确的方向,完美的实践了领域驱动设计,在这方面可谓硕果累累。同时,为了降低领域驱动实施的门槛,我一手打造了企业级开发框架CodeArt。现在将其发布出来提供大家免费使

    阅读全文>>

作者:coody分类:【_驱动开发浏览(1977

2018-10-17

怎么一步一步用DDD设计一个电商网站(十四)—— 回顾与总结

    如何一步一步用DDD设计一个电商网站(十四)—— 回顾与总结本系列所有文章 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念 如何一步一步用DDD设计一个电商网站(二)—— 项目架构 如何一步一步用DDD设计一个电商网站(三)—— 初涉核心域 如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户 如何一步一步用DDD设计一个电商网站(五)—— 停下脚步,重新出发 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成 如何一步一步

    阅读全文>>

作者:coody分类:【_驱动开发浏览(2285

2018-10-17

从零开始使用CodeArt实践绝佳领域驱动开发(五)

    从零开始使用CodeArt实践最佳领域驱动开发(五)本章内容还在整理上传中,你可以等全部更新完毕后再查阅也可以先预览已上传的内容。。。。。。 7. 应用层的命令模式   在上个章节里我们设计并编码了领域对象Permission,但是目前Permission并没有任何行为上的设计。这是因为我们不建议“凭空去制造行为”,而是在领域对象第一个版本的代码实现之后就立即使用它。在使用过程中观察外界(应用层或其他领域对象)对它的需求,这些需求往往暗藏了进一步揭露对象本质特征的提示。我们可以根据这些提示逐渐挖掘出该对象更多的行为特征,结合CA里相关的设计原则,最终我们可以确认领域对象该如何提供哪些行为方法。所以,大家不要在意领域对象在设计初期有点类似“贫血模型”,因为这不是它的最终形态,这只是它成长的起点。那如果经过一番尝试后,我们还是没有为对象添加任何方法呢?这种情况的确存在,有些对象存在的意义只是被

    阅读全文>>

作者:coody分类:【_驱动开发浏览(1292

2018-10-16

DotNetCore跨平台~服务总线_事件总路线的重新设计

    DotNetCore跨平台~服务总线_事件总线的重新设计回到目录 理论闲话 之前在.netFramework平台用的好好的,可升级到.net core平台之后,由于不再需要二进制序列化,导致咱们的事件机制遇到了问题,之前大叔的事件一直是将处理程序序列化后进行存储的,处理存储的参数为事件源,一个事件源可以由多个处理程序订阅,当事件源被发布时,这些被序列化的代码段会被回调执行,这是大叔之前的思路,在RedisBus和MemoryBus里已经得到了实现,读过大叔源代码的同学应该有所了解了。 事件源和处理程序    /// <summary> /// 事件源 /// </summary> public class CreateUserCommand : BusData { public string UserName { g

    阅读全文>>

作者:coody分类:【_驱动开发浏览(831

2018-10-16

DDD理论学习系列(11)- 工场

    DDD理论学习系列(11)-- 工厂 DDD理论学习系列——案例及目录 1.引言 在针对大型的复杂领域进行建模时,聚合、实体和值对象之间的依赖关系可能会变得十分复杂。在某个对象中为了确保其依赖对象的有效实例被创建,需要深入了解对象实例化逻辑,我们可能需要加载其他相关对象,且可能为了保持其他对象的领域不变性增加了额外的业务逻辑,这样即打破了领域的单一责任原则(SRP),又增加了领域的复杂性。 那如何去创建复杂的领域对象呢?因为复杂的领域对象的生命周期可能需要协调才能进行创建。 这个时候,我们就可以引入创建类模式——工厂模式来帮忙,将对象的使用与创建分开,将对象的创建逻辑明确地封装到工厂对象中去。 2. DDD中的工厂 我们有必要先理清工厂和工厂模式。 DDD中工厂的主要目标是隐藏对象的复杂创建逻辑;次要目标就是要清楚的表达对象实例化的意图。 而工厂模式是计模式中的创建类模式之一。借助工厂

    阅读全文>>

作者:coody分类:【_驱动开发浏览(1439

2018-10-15
上一页 1/44页 下一页