LZ 是一个 Python 开发者,在公司做 Python Web 开发。
公司的业务变得越来越复杂,团队也越来越大,感觉“ fat Active Record ORM Model ”的模式有点力不从心: Model 越写越臃肿、有的逻辑不明确应该放在哪里、依赖关系有点混乱、测试困难等等等。
现在觉得需要对业务进行一些分层处理,类似 Java 开发中常见的区分出 DAO 和 service 。
我理解的 DAO 即是只处理数据操作,隔离底层数据操作和逻辑。 service 处理逻辑。
在我的理解里,其中又有两种实现方式:
- “贫血模型”。数据对象简单,逻辑实现在类似过程式的“事务脚本”中,操作 DAO 进行数据处理。能想到的缺点是可能仍要写一些 service 间重复的逻辑。
- “领域模型”。对业务对象抽象为一个 domain object ,处理自身相关逻辑。上层 service 协调各个 domain object 处理逻辑。对业务理解和抽象的要求更高,感觉 service 和 domain object 在结构的组织上也比较麻烦。
貌似 Rails 开发也有类似的 Service Object 概念,来抽象业务模型间的逻辑。
LZ 对 Java 基本不懂,仅限大学时候“ Hello world ”水平。现在这套分层实践起来并不是很顺手,对于命名和结构都比较模糊。 service 的参数、返回值,以及实现方式也是跟着感觉走。对以上的理解也是来自网上东拼西凑,乱说一气,感觉有时间应该翻来 Martin Fowler 的书看看。
大家有类似的经验、什么好的实践、建议吗?或者有其它的方式解决现在遇到的问题?