【选择恐惧症】需不需要通用设计?

症前兆

经常会遇到这样的问题:一份需求下来,在做设计的时候就会开始纠结了:到底需不需要先抽象公共元素进行通用设计,再来进行功能的细化设计呢?还是直接根据需求为每个功能进行设计?

症分析

出现这种情况通常是因为需求中存在着一些相似的地方,但是结合需求分析又感觉没有什么通用的东西可设计,抽象不出功能点。但是如果直接就进行具体设计又感觉可能无法满足日后的扩展性,显得设计没有什么技术含量,结果老半天都没有办法定下方案。

这样很容易就会走上两条极端的道路:决定需要通用设计的人设计了很多扩展功能,结果发现需求的发展与预想的功能不符,前期定下来的功能扩展都被否定了。而另外一些决定不需要通用设计的人,因为产品需求的快速发展,需求的不断调整和增加,由于缺乏通用层支撑,使得开发周期变得越来越长,越来越难维护。最后两种情况都避免不了走上重构的命运。

症解决

对于需不需要通用设计,不同的人可能有不同的见解,但是基于程序的可扩展性原则来考虑,个人觉得不管在什么时候都应该囊括这一层在设计里面,只是这层设计的重度视需求来定而已。毕竟是互联网的时代,在产品需要快速迭代的环境中,通用设计也应该顺应潮流,跟着产品的步伐进行快速迭代,不要想着一蹴而就。

举个例子,如果我们要开发一款社交app,里面包括个人信息、好友、聊天等等的UI界面。这些元素看起来都是没有什么关联性的,但是运用面向对象的分析(如果对面向对象分析理解比较模糊的同学,可以看一下之前写的一篇文章《我眼中的面向对象分析》)总能找到对应存在的关系。

基于MVC的设计模式,上面的需求我们可以先为其定义出数据模型的基类DataModel和视图逻辑处理的控制器基类ViewController来作为通用层次的核心类型,如:

class DataModel
{
    function getProperty(name:string):object;
    function setProperty(name:string,value:object):void;
}

class ViewController
{
    property view:View;
}

上面的两个核心类型其实就能组成应用的通用层了(在实际情况中通用层不仅仅包含抽象的内容,还应该包含一些工具类,服务等,这里为了方便说明问题,所以这里抽取了通用层的一部分来进行阐述),结构也相对很简单,这就是通用层的原型。所以不一定说通用设计要很复杂看上去功能很强大才是好,要知道设计没有最好的,只有最合适的。我们能允许它这么简单只是因为我们的需求还没达到需要一个更强大的体系来支撑而已。

随着应用的发展需求在不断地增加和调整,假如需要对所有数据进行本地缓存,UI上出现了一些列表类型的视图,这个时候我们就可以需求再次进行分析,对之前通用层进行扩展:如在DataModel中加入save方法,并为ViewController继承ListViewController。如:

class DataModel
{
    function getProperty(name:string):object;
    function setProperty(name:string,value:object):void;
    function save ();
}

class ViewController
{
    property view:View;
}

class ListViewController extends ViewController
{
    property dataSource:Array;
}

由上面代码可见,通用层在需求增加的时候得以进一步的完善。也可以从这个例子中看到了通用层的设计不是一步到位的实现,而是随着需求的增加、调整而改变和完善的。

貌似例子并没有说明通用设计的必要性,其实仔细想想这个必要已经融入到例子中了。试想如果没有前期的简单设计抽象,在调整数据源缓存本地的需求时,你是否需要为每个数据模型设计独立的缓存实现?即使你能够忍受为每个数据源写缓存实现,假如日后缓存的方式由文件存储变换到数据库存储,那么你是否又需要为每个数据模型进行调整?这样细想是否能够体会通用层的作用的重要性呢?

症总结

综上所述,本人总结了自己的一些观点:

  • 通用设计是必须要有的,但其复杂程度视需求而定,应该跟随需求的步伐来完善
  • 通用设计应该包含一类事物的抽象、常用功能以及服务的整合
  • 通用设计能够指导后续的相关设计
  • 通用设计能够减少后续开发的功能量及提高工作效率

其他症状

《【选择恐惧症】接口?虚基类?》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,688评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,559评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,749评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,581评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,741评论 3 271
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,684评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,122评论 2 292
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,847评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,441评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,939评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,333评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,783评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,275评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,830评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,444评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,553评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,618评论 2 249

推荐阅读更多精彩内容