本文转载自【WhyDecoupled】:https://codedecoupled.com/php...CRD如果你是PHP后端开发者,CRD(CRUD)一定不陌生你。简单来说,就是指对数据库进行增、删、改、查等基本操作。CRUD是一种面向数据库的建模方法。PHP简直就是为增删改查而生。它的语法简单,不需要编译,ORM无处不在。可以快速连接数据库表和网页,实现增删改查。这种快感给人一种错觉,好像这是一个后端开发人员的核心工作。让我们用增删改查的思路来设计一个简单的购物车:数据库设计增删改查的第一步一定是数据库设计。为了演示,我们简化了设计并省略了很多细节,因此请不要在您的产品中使用此设计。我们只使用一张桌子推车来存放推车物品。演示当商品p-1(ID:1)加入购物车时,在carts表中加入一条数据:当商品p-2(ID:2)加入购物车时,加入另一条数据datatothecartstable:当商品p-1(ID:1)再次加入购物车时,更新carts表中对应的数据:当商品p-2从购物车中移除时,删除对应的数据carts表:购物车的内容实时更新记录在数据库中,这是CRUD的主要特点。让我们看看另一个完全不同的想法。事件溯源事件溯源是领域驱动设计中的一种架构模式。领域驱动设计是一种面向业务的建模方法。它帮助我们重新关注业务本身。事件溯源的核心是事件,所有聚合(一个特殊的类)的状态源都来自于事件,所以称为事件溯源。这里的事件称为领域事件。与我们通常所说的事件不同,领域事件指的是领域专家关心的、业务流程中发生的事情,与业务密切相关。让我们用事件追踪的思想来设计上面的购物车。使用领域事件在购物车业务中,假设我们是一个用户,我们最感兴趣的事情是将商品添加到购物车、从购物车中移除商品以及检查购物车。所以我们可以总结出几个领域事件。值得注意的是,所有领域事件都应该用过去时。当商品p-1(ID:1)加入购物车时,在events表中加入一个事件数据:当商品p-2(ID:2)加入购物车时,在events中加入一个事件数据表:当产品p-1再次加入购物车时,事件表中增加了一个事件数据:当产品p-2从购物车中移除时,事件表中仍然增加了一个事件数据:内容购物车的事件是以事件的形式记录的,事件只能添加,不能删除和更改。阅读购物车中的商品。当需要显示购物车内容时,重放事件表中存储的事件:拥抱事件溯源事件溯源需要开发人员改变传统思维,从数据库设计入手,从业务问题入手分析。用它开发的系统不仅有自己的日志,而且可以轻松排查以领域事件为中心的问题。同时,事件驱动的聚合模型也非常容易编写单元测试。CRUD不是魔鬼。需要补充的是,CRUD并不是一无是处,相反,它在适合的领域非常强大。在某些领域,增删改查是当前的业务。比如一个简单的CMS,比如物联网项目中数据的存储。结论本文转载自【WhyDecoupling】:https://codedecoupled.com/php-to-ddd.html,如果你也对TDD、DDD和简洁代码感兴趣,欢迎关注公众号【Why解耦],让我们一起探索软件开发之道。
