- 论坛徽章:
- 0
|
本帖最后由 狗蛋 于 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: 面向对象程序设计,根本上说就是“可以以一种一般化的方式处理同一类的对象,不管它内部如何变化”,这是面向对象方法所能提供的唯一优点。
这种机制使得设计师可以这么想“我要搞一个商品管理系统,我对商品的定义如下;不管你们如何实现,只要符合了我关于商品的接口定义,那么我就能有效的管理它”。
很明显,任何挑战这个根本原则的东西,都会导致商品管理系统崩溃,从而破坏掉面向对象原则带来的唯一好处。这就是我敢说“接口约束的是实现者而不是使用者”的原因所在。 |
|