软件设计是怎样炼成的(1)——什么是优秀的设计?

摘要:数据库

某项目的设计文档评审会上,各路技术大牛进行了“热烈”的讨论,讨论的焦点是怎样的设计才漂亮!你们围绕着如何OO,如何高内聚低耦合,如何反转控制等话题进行了“热烈”的争论。照这样开下去,这个评审会岂不是变成了“神仙大会”!怎样的设计才叫优秀的设计呢?安全

 

大纲:架构

1.什么是优秀的设计?
2.优秀的设计能节省项目工做量
3.优秀设计从分析需求开始
4.软件系统不是木桶型的
5.软件设计的“大道理”
6.规划系统骨架——架构设计
7.打造系统的底蕴——数据库设计
8.细节决定成败——详细设计
9.用户感受好才是真的好——用户体验设计
10.持续提高设计水平数据库设计

 

1.什么是优秀的设计?网站

 

某项目的设计文档评审会上,各路技术大牛进行了“热烈”的讨论,讨论的焦点是怎样的设计才漂亮!你们围绕着如何OO,如何高内聚低耦合,如何反转控制等话题进行了“热烈”的争论。spa

你以为如下标准能够成为“漂亮”设计的标准吗?架构设计

1)高效
2)可靠
3)易用
4)安全
5)可扩展
6)兼容性强
7)移植性强
……设计

若是每次设计文档评审,咱们都采用上述标准来评审,你以为这个设计评审会有效果吗?视频

当时我参加了这样的一个设计评审会,以为气氛很不对,照这样开下去,这个评审会岂不是变成了“神仙大会”!游戏

因而我问了两个问题:

1)谁能说说这个项目的主要需求?
2)这些需求,设计上是如何考虑实现的?

结果没有人能答上来!

咱们从书本上看到的那些”通用“的设计标准,说得难听一点,就是废话!对实际的项目工做基本上没有实质用途!

 

请看下面4个例子,分别思考这4个案例的软件设计思路,你会发现上述“漂亮设计的标准”,真的是废话!

案例1:某项目要求在很短期内完成,并且客户对系统的当前认识仍是比较初步的,你打算怎样设计这个系统?

案例2:某软件公司接了一个“网页+数据库”类型的项目,这类项目已经作过多个,但此次的业务倒是新的,你怎样考虑这个项目的设计?

案例3:某软件公司已经成功为n个医院作了管理系统,如今须要为一家新的大医院作相似这个系统,你会怎样考虑这个系统的设计?

案例4:你接到一个任务,要作一个即时战略游戏,目标是要在当前游戏市场找中杀出一条血路,你怎样考虑这个游戏的设计?

 

4个案例各有特色,分别表明了4种“典型”:

案例1:需求很朦胧,工期很紧,技术上基本上没有积累。

案例2:需求是新的,但能够重用“网页+数据库”的技术架构。

案例3:需求是相似的,技术架构也是相似的,相信你会直接重用以前的系统。

案例4:这是一个须要创意和高技术含量的游戏,而游戏软件的需求和技术都是充满挑战的。

上述4种状况,相信你采起的设计策略是不同的,你可能会发现所谓的优秀设计没有固定的标准。

 

若是硬是要来一个优秀设计的标准呢?

我会这样说:就是作高性价比的设计!

一个优秀的设计应该具有如下特色:

1)优秀的设计都是需求驱动的,不熟悉需求就作出来的设计是不靠谱的;
2)优秀的设计应该是当前团队能理解能实现的,太超前的设计项目团队作不出来,这个设计只能是摆设;
3)优秀的设计应充分考虑当前各类限制条件,适当作出平衡,能保证达成项目的目标:
4)优秀的设计能尽可能下降项目的总体工做量,让整个项目更加可控。

 

 

2.优秀的设计能节省项目工做量

 

关于软件设计的话题,若是脱离一些实际案例讨论的话,很容易变成空洞无力的学术讨论,因此本文将会列出不少案例供你参考。

 

设计案例:开发某线上社区网站

背景:某社区已经举办了多期沙龙活动,为了拓展沙龙的影响力,让更多朋友受益,树立良好品牌,未来实现盈利,有必要创建一个线上的社区网站。

该网站应有这样的功能:

1)发布各类活动信息。
2)发布业界新闻。
3)能开展线上沙龙活动,包括在线视频沙龙。
4)具有SNS社区,可汇聚人气。
5)每位会员有本身的博客,能维护本身的我的页面。
6)支持简体中文、繁体中文、英文三种语言随时切换。
7)支持全文搜索。

你打算如何设计上述系统呢?

 

你可能会问,有工期限制吗?

你说呢?真实项目必定会有工期限制的,这个项目你的工期只有1个月!

你可能会说:你当我是神仙啊,1个月有可能怎样死都死不出啊!

这个时候能帮助你的就是优秀的设计,优秀的设计有可能能让你用不多的工做量就作出来,优秀的设计也不必定须要你所有从零开发的,咱们能够拿来主义!有很多开源软件是能够基本知足上述要求的,咱们能够直接拿来用,这样你须要付出的工做量就少不少了。

 

我曾经用某开源软件作了这样的一个网站出来,但发现没有全文搜索功能,结果我想了一个“投机取巧”的办法,本身不写一句代码,直接利用谷歌的这个搜索功能“site:域名 关键字”,让谷歌帮我搞定全文搜索。固然这样作出来的效果还不是很完美,但至少我能在很短期内能作出个大概啊,若是本身开发还不必定能作出这样的效果呢!

 

小结:

受工期限制、受能力限制等制约因素,十全十美的设计基本上是很难作到的,但若是由于赶工期而在软件设计上节省时间甚至是直接忽略这步,实际上是得不偿失的。在软件设计上“节省”1小时,可能会让你未来多投入成倍的项目时间;越是工期紧,越须要冷静思考软件的设计,合适的设计能大大地下降项目工做量,让你后期的工做轻松不少。

 

本文仅仅是本系列文章的第一篇,软件设计没有这么简单,这仅仅是开始噢……

若是本文对你有帮助,麻烦点一下“推荐”啦,谢谢!

 

 

做者:张传波

创新工场创业课堂(敏捷课程)讲师

软件研发管理资深顾问

CMMI首席专家

《火球——UML大战需求分析》做者

软件知识原创基地创办人