• 一些简单的设计原则


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

    案例:

      一个浏览文件系统的界面,当按下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种类来提供不同的图集。

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

  • 相关阅读:
    Sublime Text 3 3126 注册码
    修改bootstrap 的全局样式,bootstrap 3.0 是由html5和CSS 3组成的
    mysql-sql高级应用
    MySQL 主键冲突,无法插入数据
    jquery加载页面的方法(页面加载完成就执行)
    Jquery怎么获取select选中项 自定义属性的值
    使用Yii2中dropdownlist实现地区三级联动的例子
    Yii2中省市三级联动(栏目联动)
    [HNOI2009] 梦幻布丁
    [CJOJ2410]数列操作d
  • 原文地址:https://www.cnblogs.com/zhengwenwei/p/1991933.html
Copyright © 2020-2023  润新知