700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 《设计模式之美》实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统?

《设计模式之美》实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统?

时间:2024-03-24 13:52:10

相关推荐

《设计模式之美》实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统?

王争《设计模式之美》学习笔记

钱包业务背景介绍

五个功能:充值、支付、提现、查询余额、交易流水。业务划分两大块:虚拟钱包、三方支付。文中主要涉及虚拟钱包。交易流水的两种实现方式:一条记录,出账入账在一起;两条记录,支付与被支付。文中推荐第二种。交易流水还可以分两种形式:用户看的,包含交易类型;系统看的,只有余额的加减。

基于贫血模型的传统开发模式

基于虚拟钱包,一个典型的 Web 后端项目的三层结构。Controller 中,接口实现比较简单,主要就是调用 Service 的方法。重点说Service 层,VirtualWalletBo 是一个纯粹的数据结构,只包含数据,不包含任何业务逻辑,业务逻辑集中在 VirtualWalletService 中。

基于充血模型的 DDD 开发模式

也是重点说Service 层,把虚拟钱包 VirtualWallet 类设计成一个充血的Domain 领域模型,并且将原来在 Service 类中的中的部分业务逻辑移动到 VirtualWallet 类中,让Service 类的实现依赖 VirtualWallet 类。此例子中,领域模型 VirtualWallet 类很单薄,包含的业务逻辑很简单。不过,如果虚拟钱包系统需要支持更复杂的业务逻辑,那充血模型的优势就显现出来了。比如,我们要支持透支一定额度和冻结部分余额的功能。

辩证思考与灵活应用

在基于充血模型的 DDD 开发模式中,哪些功能逻辑会放到 Service 类中?

Service 类负责与 Repository 交流。将流程性的代码逻辑与领域模型的业务逻辑解耦,让领域模型更加可复用。Service 类负责跨领域模型的业务聚合功能。Service 类负责一些非功能性及与三方系统交互的工作。

Controller 层和 Repository 层还是贫血模型,是否有必要也进行充血领域建模呢?

没必要做充血建模,即便设计成充血模型,类也非常单薄,看起来也很奇怪。我们把Entity 传递到 Service 层之后,就会转化成 BO 或Domain 来继续后面的业务逻辑。Entity 的生命周期到此就结束了,所以也并不会被到处任意修改。Controller 层的 VO,主要是作为接口的数据传输承载体,将数据发送给其他系统,理应不包含业务逻辑、只包含数据。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。