今天继续打卡学习极客时间上的专栏“设计模式之美”, 本篇是专栏第11, 12节的学习笔记,是专栏中介绍"面向对象"这一设计原则和设计思想的两节。

笔记

这两节分上、下两节主要介绍了在Java Web开发中盛行的传统的贫血模型开发模式,是典型的面向过程的编程风格;而基于充血模型的DDD开发模式,是面向对象的编程风格。 然后作者结合一个虚拟钱包系统的例子给出了两种开发模式的示例代码,只是示例代码略微简单,作者介绍的设计思路在示例代码中体现不大。

个人理解

技术圈里造了太多的理论词儿,其实贫血和充血这两种开发模式早在这些词儿出来之前早就有了,不断有高人造出新的概念,不断总结,于是充血模型的DDD形成了自己一套理论体系,什么"领域"、“子域”、“核心域”、“通用域”、“支撑域”、“界限上下文”、“实体”、“值对象”、“聚合”、“聚合根”…,各种词儿就出来了。其实没有银弹,每种方法论都有自己的局限性和适用范围。很多为互联网产品的需求开发的服务实际上有短暂的生命周期,业务也不复杂,需求也很多变,可能在这种情况下贫血模型反而更好用。因此充血模型可能更适合复杂且稳定业务领域,例如银行的业务。 因此,我们要争论的不不应该是"贫血模型好?还是充血模型好?",而要更多关注当前场景下更合适的解决方案。杀鸡焉用牛刀。记不清楚在某本介绍微服务的书上看到过这样一个观点"微服务多微合适?一个服务大小差不多在1~2周时间可以换一种技术或语言重写完",互联网需求下要的是快,你可能还在为了扩展性、可维护性正在做"DDD的战略战术级别的设计"呢,人家的需求已经上线了一个版本,甚至推已经推倒原来的需求重做了一个版本了。

“贫血模型”、“充血模型”、“DDD”、“设计模式"其实都是套路,很多不是OOP的语言照样能开发出扩展性、可维护性很强的项目。因此,我们需要学习这些东西,但也不要过于膜拜。尤其是Java设计开发领域就有过度强调设计模式了,而很多人在做设计时也会做出"过度设计”

参考