刚开始接触领域驱动的时候,一直有个小疑问很困扰,如骨鲠在喉,今天在这里记录并和大家讨论一下。
复杂软件开发场景下,领域驱动的好处就不多说了。
我的疑问是:假设代码按已经照领域驱动的方式的写好了,我强行将领域的充血模型代码拆分成两个文件:贫血模型+配套服务。可读性、可复用性、可维护性跟领域驱动设计是一样的,无非是一个代码文件变成了两个代码文件。
那是不是可以认为:领域驱动可以做到的设计,普通MVC开发方式也一样可以做到?
其实这个假设前提是不存在的。如果原来直接站在面向数据库编程的角度,是很难写出面向领域(面向对象)的代码的,处理逻辑都沉浸在如何拼装功能、如何操作数据库了。
领域驱动不是简单战术上的文件的合并,不是简单将函数添加到对象中变成充血模型,而是思想和设计哲学上的改变。
可以说领域驱动的实现必然包含了充血模型,而有充血模型的代码却不一定是领域驱动设计,可能只是改变形式的MVC开发方式。