zoukankan      html  css  js  c++  java
  • 贫血的Domain Model之说

    例子1、银行帐号Account:
    一个经常引起争论的问题就是,deposit/draw方法到底应该建模到 Account中还是建模到AccountManager(对一个银行出纳员的建模)中。
    我觉的将deposit/draw建模到AccountManger中是反映现实的,因为Account反映到现实世界就是一个没有行为能力的实体,而出纳员才具有行为能力。
    例子2:选课的学生Student
    对学生建模的时候,enroll(选课行为)毫无疑问应该建模到类Student中。
    除此之外,我们假设每个学生有一个考察级点,可以根据这个学生的表现增加或者减少级点,而我们就遇到同例1中提到的deposit/draw一样的问题,就是增加级点的方法addScore/减少级点的方法reduceScore建模到Student中还是StudentManager中,个人认为,同于例1,应该建模到StudentManager中而不是Student中。

    总的来说,方法到底建模到那个Class中,就根据这个方法是否是这个Class自发的行为。譬如,Account的deposit/draw就不应该建模到Account中,但是实践中,建模到Account中,往往会带来一些好处,至于什么好处,Martin的《Domain Logic and SQL》非常全面的分析过了。所以,我感觉,Martin举的例子中,贫血的Domain Model是乱扣大帽子。

    本来就没什么Transaction Script,没什么贫血的Domain Model,Martin非要将一种正确的模型叫做“贫血的Domain Model",而将没有反映现实世界的、但是有一定实践价值的模型起一个风度翩翩的名字。

    为什么有人经常提到贫血的Domain Model?我觉的,可能很多应用是以数据为中心的,所以,建模的时候,习惯性地思维定向到数据上,建模出来的类完全是DB Entity的反映。而正确的思路,应该针对整个系统进行对象建模,不要一开始就考虑持久化的问题。

  • 相关阅读:
    【题解】小Z的袜子
    浅谈最小生成树
    【题解】钻石收藏家
    浅谈线段树
    浅谈拓扑排序
    浅谈树的直径和树的重心
    浅谈求逆序对
    浅谈欧拉回路
    浅谈离散化
    浅谈高斯消元
  • 原文地址:https://www.cnblogs.com/wildfish/p/123788.html
Copyright © 2011-2022 走看看