共计 1360 个字符,预计需要花费 4 分钟才能阅读完成。
本文转载自【何以解耦】:https://codedecoupled.com/php…
增删改查
如果你是一名 PHP 后端开发,增删改查(CRUD)对你来说,肯定不生疏。简略来说,它是指对数据库进行减少,删除,批改,查阅基本操作。增删改查是面向数据库的一种建模形式。PHP 几乎是为增删改查而生,它语法简略,无需编译,ORM 遍地开花,你能够疾速地将数据库表和网页买通,从而实现增删改查性能。这种快感给人一种错觉,仿佛这就是一个后端开发者的外围工作。
让咱们用增删改查的思路,设计一个简略购物车:
数据库设计
增删改查的第一步必然是数据库设计。为便于演示,咱们设计从简,省去了很多细节,所以千万不要将这种设计用于你的产品中。咱们仅应用一个表 carts 来贮存购物车商品。
演示
当产品 p-1(ID:1)被退出购物车时,在 carts 表中削减一条数据:
当产品 p-2(ID:2)被退出购物车时,在 carts 表中再次削减一条数据:
当产品 p-1(ID:1)被再次退出购物车时,更新 carts 表中相应数据:
当产品 p-2 被移除购物车时,删除 carts 表中对应数据:
购物车的内容被实时地记录在数据库中,这是增删改查的次要特色。
让咱们再来看看另一种截然不同的思维。
事件溯源
事件溯源(Event Sourcing)是畛域驱动设计(Domain Driven Design)设计思维中的架构模式之一。畛域驱动设计是面向业务的一种建模形式。它帮忙咱们将留神点放回业务自身。
事件溯源的外围是事件,所有聚合(一种非凡的类)的状态源头来自于事件,所以它叫事件溯源。这里的事件叫做畛域事件,与咱们通常所讲的事件不同的是,畛域事件是指领域专家所关怀,业务过程中所产生的事件,它与业务非亲非故。
让咱们用事件溯源的思维来设计上文中的购物车。
应用畛域事件
在购物车这个业务中,假如本人是一个用户的话,咱们最感兴趣的几件事件是将商品退出购物车,将商品移除购物车以及对购物车进行结算。于是咱们能够总结出几个畛域事件。值得注意的是,畛域事件都应该是过来式。
当产品 p-1(ID:1)被退出购物车时,在 events 表中削减一条事件数据:
当产品 p-2(ID:2)被退出购物车时,在 events 表中削减一条事件数据:
当产品 p-1 被再次退出购物车时,在 events 表中削减一条事件数据:
当产品 p-2 被移除购物车时,依然在 events 表中削减一条事件数据:
购物车的内容以事件的模式记录了下来,事件只可追加,不能够删除或者改变。
读取购物车商品
当须要展现购物车内容时,重播 events 表中所贮存的事件即可:
拥抱事件溯源
事件溯源要求开发者扭转本人的传统的,以数据库设计为源头的思维,从业务开始剖析问题。用其开发的零碎不仅仅自带日志,而且能够以畛域事件为核心来不便地排查问题,同时事件驱动建设的聚合模型也非常容易编写单元测试。
增删改查并非恶魔
须要补充的是,增删改查并非一无是处,相同,在适宜它的畛域,它是十分弱小的。在一些畛域,增删改查就是以后的业务。比方一个简略的 CMS,比方 IoT 我的项目中对数据的存储。
结语
本文转载自【何以解耦】:https://codedecoupled.com/php-to-ddd.html,如果你也对 TDD,DDD 以及简洁代码感兴趣,欢送关注公众号【何以解耦】,一起摸索软件开发之道。