一些简单的设计原则

被经理说过几次了,总结一下

案例:

  一个浏览文件系统的界面,当按下MENU中的“多选”项的时候,将可以勾选浏览的文件夹或者文件,然后按下“完成”,执行一些操作,退出“多选状态”,回到浏览界面。

生命周期

职责

需求变动

案例:

  有两种类型的终端,它们都从服务器上获取图片轮播。类型A有两个显示区域,分别轮播图集1或者图集2的图片。类型B只有一个区域,轮播图集1和图集2的图片。

  最简单的设计方法,是服务器提供图集1和图集2的下载接口,然后A的区域1绑定图集1,区域2绑定图集2;B的区域则绑定图集1和2。

  问题在于,当需要增加图集3,只是在A的区域1播放,而不能在B的区域里播放。我们能做的是回收所有的终端A,将区域1增加绑定图集3。这显然是不可行的。

  还有另一个问题,如果增加终端类型C,有一个播放区域,但是它播放的和A,B都不同。我们需要在服务器上增加图集3的接口。当我们需要增加接口的时候,那么也就是说,我们的设计的“需求变动”抵抗失败了。

  

  设计的问题是没有考虑到“真正变化的是什么”。看看上面的设计图,很容易发现问题所在,从名字上来说,Server的接口太奇怪了,getAList或者getBList给我们高度特化的接口,这些接口将是不可扩展的。那么应该是:


  这样,我们就不必修改Server的接口了就可以兼容显示区域的变化,不管是修改现有的或者扩展新的类型。原则很简单,因为变化的是显示区域display,那么将这个变化映射到设计中,有不同的display标志,Server只需要提供一个接口,根据display种类来提供不同的图集。

  一个被绑定的接口,也就是说,知道这个接口将被谁调用的接口,表明这个设计对“需求变动“的抵抗力会弱化。

原文地址:https://www.cnblogs.com/zhengwenwei/p/1991933.html