免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: pprpg
打印 上一主题 下一主题

[其他] 面条还是千层饼? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-08-02 09:09 |只看该作者
回复 2# folklore


    agree..

论坛徽章:
0
12 [报告]
发表于 2012-08-02 10:45 |只看该作者
本帖最后由 狗蛋 于 2012-08-02 10:52 编辑
pprpg 发表于 2012-08-01 22:12
我没理解你的意思.
但我举的例子中, 只涉及了a和b的公开接口.
通过a作为间接层来访问b, 会更稳定一些 ...


不沾边的事。

如果b被a公开,那它就是接口的一部分;后来被隐藏了,这就叫接口变动,会死一大片模块的。

会发生这种接口变动,是因为a的设计不良所致,因为它公布了本不该公布的细节。


反过来,如果b是a的私有成员,那么b在外部根本就访问不到,以后a自然可以随便改。

=======================================

加一点常识:
面向对象设计,根本上就是接口设计。你设计了a,你就设计了a的接口;你不应该对别人如何访问a做任何猜想;你唯一可以干预别人如何用a的接口的手段,就是根本就不要暴露那些不想让别人访问的东西。

反过来说,一旦你暴露了,那就只能一直暴露下去。请不要寄希望于“我的设计不良,但我提供了很多使用方式,请你一定要选择最‘良’的一种方式使用我的类”——不好意思,别人没有义务为你的失误买单。

——换句话说,迪米特法则是约束设计者而不是使用者的。


BTW: 面向对象程序设计,根本上说就是“可以以一种一般化的方式处理同一类的对象,不管它内部如何变化”,这是面向对象方法所能提供的唯一优点。
这种机制使得设计师可以这么想“我要搞一个商品管理系统,我对商品的定义如下;不管你们如何实现,只要符合了我关于商品的接口定义,那么我就能有效的管理它”。

很明显,任何挑战这个根本原则的东西,都会导致商品管理系统崩溃,从而破坏掉面向对象原则带来的唯一好处。这就是我敢说“接口约束的是实现者而不是使用者”的原因所在。

论坛徽章:
1
技术图书徽章
日期:2013-09-10 08:57:55
13 [报告]
发表于 2012-08-02 11:43 |只看该作者
举例有问题, 改了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP