精华帖 (0) :: 良好帖 (1) :: 新手帖 (9) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-06-25
chenjianjx 写道 深表同意。
有个应用场景就是:批量查找。在批量查找时如果没有这个字段是会死人的。 Inside 写道 我建议显示定义。
理由如下: 1、那个行走方式字段只应该让人判断行走方式,不应该做其它事情,过多的判断依赖这个字段或许是bad smell。 2、从规范上来说,加一个“是人是兽”的字段本身就是一种规范,而且是不会有歧义,学习成本查找成本很低的规范,比隐式推导所依赖的规范廉价得多。 3、开发方便许多,如果系统逻辑很复杂的话,大量隐式推导是会要人命的,出错的概率大大增加。 你要是把人动物都放在一个表中那才叫雷人 |
|
返回顶楼 | |
发表时间:2010-06-25
说话要过脑哦。不要想都不想就说出来。
抛出异常的爱 写道 chenjianjx 写道 深表同意。
有个应用场景就是:批量查找。在批量查找时如果没有这个字段是会死人的。 Inside 写道 我建议显示定义。
理由如下: 1、那个行走方式字段只应该让人判断行走方式,不应该做其它事情,过多的判断依赖这个字段或许是bad smell。 2、从规范上来说,加一个“是人是兽”的字段本身就是一种规范,而且是不会有歧义,学习成本查找成本很低的规范,比隐式推导所依赖的规范廉价得多。 3、开发方便许多,如果系统逻辑很复杂的话,大量隐式推导是会要人命的,出错的概率大大增加。 你要是把人动物都放在一个表中那才叫雷人 |
|
返回顶楼 | |
发表时间:2010-06-25
如果是一体化的设计自然是表里面不需要这个字段。
考虑到开发以及实施、测试的具体工作则经常需要冗余的信息。 比如说我后台批量改一下数据没必要调用业务类吧。 或者可以看做是一个校验码之类的东东。 |
|
返回顶楼 | |
发表时间:2010-08-30
enfield 写道 天啊,居然有这样的业务规则,记得一个故事,大概就是,某哲学老师说,人类就是直立行走,身上没有毛的啥啥,然后学生抓来一只鸡,把毛拔光,说,这就是人?
建议把业务规则改了先,不然还是再搞一个冗余字段比较好。 同意,感觉更应该用字段表示人兽,用方法表示业务规则。应该用符合思维习惯的方式构建系统。 |
|
返回顶楼 | |
发表时间:2010-09-12
同意。
我觉得楼主犹豫的地方在于添加字段有些靠近数据库,没有体现oo思想,但是开发和维护方便;而推导方式就比较oo,但是开发和维护成本提高了。 我的想法是数据表加字段描述,在应用中使用接口来体现业务逻辑。这样会好一些 chenjianjx 写道 深表同意。
有个应用场景就是:批量查找。在批量查找时如果没有这个字段是会死人的。 Inside 写道 我建议显示定义。
理由如下: 1、那个行走方式字段只应该让人判断行走方式,不应该做其它事情,过多的判断依赖这个字段或许是bad smell。 2、从规范上来说,加一个“是人是兽”的字段本身就是一种规范,而且是不会有歧义,学习成本查找成本很低的规范,比隐式推导所依赖的规范廉价得多。 3、开发方便许多,如果系统逻辑很复杂的话,大量隐式推导是会要人命的,出错的概率大大增加。 |
|
返回顶楼 | |
发表时间:2010-09-12
这个例子太脑残了,没什么感觉,楼主应该务实点。其实用的时候做成方法即可,下面怎么做的随时可以调整。
|
|
返回顶楼 | |
发表时间:2010-09-17
我同意这种说法。
显式设计,有些时候是节省了不少的时间。但更加要看到,冗余字段的维护的成本。 如果维护的成本很低,那么添加一个显式字段是正面的;但一旦维护这个冗余字段的成本非常大,比如业务中需要维护这个字段的地方非常多,那么再添加这个字段就得不偿失了。 所以我认为还是实际情况实际考虑吧,一味的抵制或者支持冗余字段都不是很好的想法。 魔力猫咪 写道 我个人赞成隐式推导,一般不建议定义布尔字段。
因为绝大多数的这种判断,都是需要进行一些比较计算的。如果设定一个字段来存这个值,那么在参与判断计算的其他字段发生变化或者计算公式变化的时候,就必须更新这个布尔值。如果考虑不到位,没有更新,那么就会造成错误。为了及时更新,编码里面判断计算的调用到处都是。只要相关字段有了变化,就得重新计算。至于什么时候读取这个字段就不知道了。也许永远不会被读取。所以从这点上说,定义一个布尔值字段是得不偿失的。既增加了大量的无用计算,又引入了忘记计算造成BUG的风险。触发器倒是可以保证不会忘记计算,但是性能损失很大。如果是频繁更新的表,触发器一多,那么插入修改的效率就非常低了。 我认为如果要定义布尔值字段,那么就要求这个字段不用任何判断计算。 我认为LZ提问的动物表问题,不应该设定是否“人”这种字段判断。而是应该使用继承关系进行处理。至于提出的程序员问题,这个不是设计问题而是管理问题。管理混乱,那么插再多的这种字段也没用。除了搞乱数据库结构,没任何好处。建议对新人采用老带新的办法。编码前一定要进行设计,搞清楚了要建哪些类、有哪些接口哪些调用再编码。最好编码前就把测试写出来。新人写完设计(当然不是那种骗客户的设计说明书)后老人一定要进行审核。确认没有重复编码和层次混乱。 最后还要说一下。LZ提出这个问题考虑的层次有点低,什么都放在了数据库层次考虑。这样会把太多的业务逻辑引入到数据库里面。建议尽可能把业务放到应用层而不是持久层。 |
|
返回顶楼 | |
发表时间:2010-09-17
hibernate在同表保存继承的实现已经如此被鄙视了么?
如果能肯定永远不会有人和动物之外的实现类,肯定永远有相应属性、方法或者接口,那么怎么实现都行。 借数据库的一个实现方式说,那个标志属性本身和是否为空的函数索引没啥区别。 不肯定的话,hibernate在数据库层面用标志位、对象层面用多实现类的方式,个人认为是个概念清晰的好方式。不用hibernate也可以参考这个思路。 |
|
返回顶楼 | |
发表时间:2010-09-17
隐式的说法很值得怀疑,是人是动物可以在运行时转换的设计?GSM。
|
|
返回顶楼 | |
发表时间:2010-09-19
为什么不再setter中书写逻辑呢?
当传入是人是兽时,就可以在其setter中确定了,再为行走方式赋值 这既可以减少冗余,又可以统一实现了吧,再新的新手,不会连实体有哪些属性都不清楚把 |
|
返回顶楼 | |