何以解耦

TDD,DDD 以及简洁代码

image

趁早 return

最常用的逻辑语句非 if else 莫属。大量使用 if else 容易编写出逻辑混乱的代码。这种代码令阅读者云里雾里...
阅读全文 →
image

从布尔值到异常

在实现业务逻辑之前,我们通常需要检查一些前提条件,比如实现库存管理系统中的库存增加逻辑...
阅读全文 →
image

从原始数据类型到值对象

生活中,我们使用数量词来描述事物的长度,重量,金额等等。在建模过程中,缺乏经验的开发者习惯使用原始数据类型(Primitive data type)给数量词造型...
阅读全文 →
image

从验证到不变性保护机制

在应用程序中,无效状态是造成 Bug 出现的主要原因之一。特别是在像 PHP 这样的动态语言中,应用程序中尤其容易出现无效状态的对象...
阅读全文 →
image

从贫血模型到充血模型

领域模型是一种用于解决复杂业务逻辑的建模工具/思想。大神 Martin Fowler 定义其为包含行为和数据的对象模型...
阅读全文 →
image

千奇百怪的事件驱动模式

Martin Fowler 在2017年做了一次关于事件驱动模式的演讲【The Many Meanings of Event-Driven Architecture】。此文是本人观看演讲后的一篇总结...
阅读全文 →
image

从入门到放弃 - 事件溯源

在接触事件溯源之初,其截然不同的设计模式常会让初学者望而却步。这篇文章概括了几种导致初学者放弃继续学习事件溯源的误解...
阅读全文 →
image

剖玄析微聚合 - 事件溯源

聚合是 DDD(领域驱动设计)中一个相对复杂的概念。作为 DDD 战术设计中举足轻重的工具,我们有必要对其了若指掌。总体来说,聚合(Aggregate)是指一组紧密相关的类...
阅读全文 →
image

事件消费者之 Saga - 事件溯源

Saga 是一种用于处理漫长业务流程的设计模式。这里的长度并非时间长短,而是指一个业务流程由于跨域而涉及的领域宽度。所以一个 Saga 处理周期可能是一个星期...
阅读全文 →
image

事件消费者之 Reactor - 事件溯源

Reactor(反应机)与 Projector 大同小异,唯一的区别在于我们不能重播 Reactor 的行为。所以 Reactor 生为处理领域中有副作用(side-effects)的行为...
阅读全文 →
image

事件消费者之 Projector - 事件溯源

在事件溯源架构中,通过事件流获取应用的当前状态可能造成性能问题,Projector(放映机)通过监听事件,生成独立的视图保存应用的当前状态...
阅读全文 →
image

PHP 事件溯源

事件溯源(Event Sourcing)是领域驱动设计(Domain Driven Design)设计思想中的架构模式之一。领域驱动设计是面向业务的一种建模方式...
阅读全文 →
image

从增删改查到事件溯源 - PHP

如果你是一名 PHP 后端开发,增删改查(CRUD)对你来说,一定不陌生。简单来说,它是指对数据库进行增加,删除,修改,查阅基本操作...
阅读全文 →
image

浅析 DDD

DDD 是 Domain Driven Design 的缩写,在中文中常被翻译为领域驱动设计。在我们了解 DDD 是什么之前,首先讨论下它不是什么...
阅读全文 →