[已解决问题] 访问器,OO ?
提问时间: 2008-06-22 13:52
悬赏分:10 浏览:249 次

看了Allen Holub的《Why getter and setter methods are evil -- Make your code more maintainable by avoiding accessors》这篇文章,感觉就是对我的当头一棒,从前也近似崇拜地根着书上所说那样想:让字段成为private,然后用访问器将其公开,是为了更好的封装。确实,用了访问器会比直接公开字段好得多,但是,当访问器返回的是一个具体类型时,使用访问器还是不可取。

但是在.net中,访问器的普遍使用是让我疑惑的主要原因,尤其是实体类,网上看到的许多关于分层架构的文章中的实体类几乎全都是用访问器公开了所有的属性,FCL中也有大量的属性的使用,既然如此,那肯定有使用它的道理,那“道理”是什么呢?也许这也是度的问题,那要如何把握这个度呢?

还请指教!

提问者:水言木 - 菜鸟二级
最佳答案
目前的开发中,有很多约束使你不能够完全的使用OO。例如,数据库的访问还无法做到完全的OO. 因此,在关于数据访问层,大多时候,我们会直接暴露实体类上的所有字段。这样设计更简单一些。 另一方面,什么是OO也是一个不很清楚的定义。简单的一个问题:设计模式中的访问者模式(Visitor)是不是破坏了OO的封装性呢? 因此,我们在设计时更多的应该思考,怎样让这个设计在满足需求和扩展性的基础上最简单。只要设计足够简单,并且能够满足可预期的所有需求。这个设计就很好了。不要太强求OO。
2008/6/23 13:28:42 回答者:Colin Han


提问者对于答案的评价:谢谢您的回答,令我豁然开朗!
其它回答(2)

3个月前   回答者:林间曦阳 - 小虾三级
没有看过你上文提到的文章,个人感觉使用geter,seter,即便是在geter,seter中什么都不做,也没有什么不好的。体现了对数据的封装,性能上也没有什么影响。
3个月前   回答者:玉开 - 大侠五级
评论
3个月前   水言木 :
@玉开
文章地址是:http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html
----------
如文章所说,比如一个getter,返回的是一个int,但是一旦某天发些要把它的类型从int改成long的话,那就会在引用了这个属性的地方都出现编译错误。

文章中有一句:Don't ask for the information you need to do the work; ask the object that has the information to do the work for you.

对于文章中说到的问题,还算都可以理解,只是如我的问题中所说,.net应用中那么多的属性应用让我感到了迷惑...

   您需要登录以后才能回答!
 

我要提问

我的问题


快到期问题

> 问题排行榜

相关内容

相关链接