zoukankan      html  css  js  c++  java
  • 一些简单的设计原则

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

    案例:

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

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

  • 相关阅读:
    基于Python的人脸动漫转换
    let 与 var的区别
    【LeetCode】汇总
    【HDU】4632 Palindrome subsequence(回文子串的个数)
    【算法】均匀的生成圆内的随机点
    【LeetCode】725. Split Linked List in Parts
    【LeetCode】445. Add Two Numbers II
    【LeetCode】437. Path Sum III
    【LeetCode】222. Count Complete Tree Nodes
    【LeetCode】124. Binary Tree Maximum Path Sum
  • 原文地址:https://www.cnblogs.com/zhengwenwei/p/1991933.html
Copyright © 2011-2022 走看看