UI组件设计:减少冗余代码--类继承关系的考量
2014-04-01 10:20
274 查看
以横纵滚动条为例。
在类继承关系的设计中,就是如下关系
BaseScroll
|
|-------------------|
HScroll VScroll
BaseScroll中将抽象出HScroll/VScroll的共性。
有一种设计思路:在BaseScroll中根据定义的某个“横纵标志”,把横纵两种逻辑都写在其中。这样HScroll/VScroll中的代码将最少。
另一种设计思路:在BaseScroll中根据没有横纵相关的代码,横纵两种逻辑分别写在HScroll和VScroll中。这样BaseScroll似乎有共性抽象不足之嫌。
****************************************************************************
在为WebApp设计UI组件时,取后者。
理由:
在WebApp的UI中,横纵滚动条很少同时被应用。纵向滚动条应用的场景要远大于横向滚动条(通常,从美观和用户体验角度出发,我们都是设置足够宽,不让UI组件出现横向滚动条)
如果采用思路1,无疑纵向滚动条中有不需要的横向逻辑,反之亦然。
在最求UI组件体积最小的目标下,思路2是合理的选择。
******************************************************************************
反对:
类继承使得完整的逻辑执行思路产生断层和跳跃,代码可读性降低,维护难度增加。
且类似的逻辑分散在诸如HScroll/VScroll的不同类中。一旦类似的逻辑需要修改,则要修改多处。类似的逻辑代码不能集中在一处,容易产生差异,容易遗漏。
在不给UI组件体积带来很大影响的前提下,思路1也是可取的
*******************************************************************************
如何选择?
没有“正确答案”!
在类继承关系的设计中,就是如下关系
BaseScroll
|
|-------------------|
HScroll VScroll
BaseScroll中将抽象出HScroll/VScroll的共性。
有一种设计思路:在BaseScroll中根据定义的某个“横纵标志”,把横纵两种逻辑都写在其中。这样HScroll/VScroll中的代码将最少。
另一种设计思路:在BaseScroll中根据没有横纵相关的代码,横纵两种逻辑分别写在HScroll和VScroll中。这样BaseScroll似乎有共性抽象不足之嫌。
****************************************************************************
在为WebApp设计UI组件时,取后者。
理由:
在WebApp的UI中,横纵滚动条很少同时被应用。纵向滚动条应用的场景要远大于横向滚动条(通常,从美观和用户体验角度出发,我们都是设置足够宽,不让UI组件出现横向滚动条)
如果采用思路1,无疑纵向滚动条中有不需要的横向逻辑,反之亦然。
在最求UI组件体积最小的目标下,思路2是合理的选择。
******************************************************************************
反对:
类继承使得完整的逻辑执行思路产生断层和跳跃,代码可读性降低,维护难度增加。
且类似的逻辑分散在诸如HScroll/VScroll的不同类中。一旦类似的逻辑需要修改,则要修改多处。类似的逻辑代码不能集中在一处,容易产生差异,容易遗漏。
在不给UI组件体积带来很大影响的前提下,思路1也是可取的
*******************************************************************************
如何选择?
没有“正确答案”!
相关文章推荐
- UI设计理念: 减少类继承关系,增加某种程度的代码冗余,换取类之间的独立性(某种意义的解耦))
- 类设计要点: 变量/函数的命名要泛化,减少代码”冗余“
- 设计模式六种关系:依赖、关联、聚合、组合、继承和实现
- 减少代码冗余,封装你的程序
- PHP面向对象深入研究之【继承】,减少代码重复
- [技术讨论]架构设计和代码之间的关系以及程序员任务安排
- 继承的概念:继承是指类与类之间的继承关系 ,子类继承父类,子类可以将父类的属性方法继承下来 网址:www.iphonetrain.com 以下代码是了车类与出租车类 共同继承了Car属性
- 重构改善既有代码的设计-处理概括关系
- Hibernate继承关系的实体设计的两种方法
- 继承自TWinControl的控件不能在设计期间接受子控件,用代码设置子控件却可以(它的自绘是直接改写PaintWindow虚函数,而不是覆盖Paint函数——对TWinControl.WMPaint又有新解了)
- 改善代码设计 “.NET研究”—— 处理概括关系(Dealing with Generalization)
- 相比xib 使用代码编排view 的一个明显的好处就是可以更好地重复使用已有代码,减少代码冗余。
- 重构改善既有代码的设计-处理概括关系
- 4.1信息管理的设计和实现(利用泛型减少重复代码)
- 改善代码设计 —— 处理概括关系(Dealing with Generalization)
- 类设计(继承,抽象类,普通类)(最大化的重用代码!!!)
- 黑马程序员:装饰设计模式介绍及装饰模式与继承关系的区别
- UI组建结构设计:以冗(冗余)换易(代码结构的简单)
- JAVA之旅(六)——单例设计模式,继承extends,聚集关系,子父类变量关系,super,覆盖
- eclipse查看代码继承关系