第五章:软件构建中的设计(Design in Construction)
这属于第二部分了:创建高质量的代码(Creating High-Quality Code)
前面的四章属于第一部分:打好基础(Laying the Foundation)
才知道全书共分为了七部分
这次好久没来写了,这章虽然读了也有段时间了,一是最近时间有点紧(其实是自己懒),二是从这章开始读的体会就没那么深了,也可能是没了最开始时的激情了吧……任何事做久了都会有点厌倦的吧~即使是赚钱,不然怎么会有那么多的人觉得钱多了没意思……
说实话,这章没怎么读懂,就是不好怎么总结,再看看,再看看……希望尽量能用一点简短的语句表达本章描述的意图。
又大概看了一遍本章,抓住主题:设计。都已经写在章节名称中了!为何还会有疑惑呢?实在是因为设计这个词太广泛了……
“软件设计”即:去构思、创造或发明一套方案,来把一份计算机软件的规格说明书要求转化为可实际运行的软件。设计就是把需求分析和编码调试连在一起的活动!这儿又谈到了需求分析。
设计很大程度上是由系统的架构所决定的,看到这儿,我就明白了,即设计是使架构更明确,将前面所谈的软件构建前的准备中的工作做的更细致!这就是设计了!在软件工程中就是概要设计与详细设计。
怪不得我看设计有很多与架构重复的地方呢!还有作者所言:在一些大型的项目中,设计可能会详细到能够让编码工作近乎机械化!!!!!这就是所谓的架构了吧!!大公司不都这样的么,没有自己的架构,怎么能快速开发,怎么能赚到钱!封装的太多就是为了能让人快速上手嘛,傻瓜式开发,和傻瓜式相机一样,要是相机全都是要自己手动调节光圈快门等参数才能拍出一张看得清的照片出来,那相机怎么能赚钱呢,除了那些摄影工作室吧,,所以才有了傻瓜相机,全自动化,封装好了,让人快速上手,因此公司才能快速赚钱!!!!!!!但是人是一个奇怪动物的,有了精米要吃杂粮,有了自动化相机,那肯定又得追求手动相机了,就是现在很多人都完全不懂单反的却想要一部单反。因为那样反其道而行之逼格才够高。但是单反也是继承了很多自动的拍摄模式的,也许他们就是拿那些Auto档来拍拍罢了~~这扯远了,不属于本思路( ⊙ o ⊙ )啊! 话说最近我也在看单反教程,准备买一部入门级单反练练手呢~人故逃不脱庸俗罢~在考虑Canon的600D和700D,索尼的D3200,D7000,都是入门级的机器……
设计会遇到很多问题,有些问题是永远想不到的除非你遇到了并解决了TA,设计没有最好,只有更好,又想起了前几天设计一个数据库的表结构,A方案设计:表中数据紧凑,但是读写不方便;B方案设计:会有很多冗余数据,但是读写很方便……这就需要看自己取舍了,也是和项目实际有关的,比如,现在计算机的性能很好了,那么多存点数据,占点内存、占点磁盘也无所谓的;但如果要考虑优化,那就不能这么设计了……
管理复杂度:软件的失败很少说是由于技术的原因,大多都是由于不当的需求、管理、规划等造成的。人能够理解很简单的东西,所以把一个系统分成了很多子系统来考虑,但是子系统还是太复杂,所以一级一级的分下去……开发时就专注于一个子系统或者子模块,因此如果子系统与子系统间的依赖越少,那么就越能专注而不用考虑其他,所以这里又验证了前面所谈架构时的构造块问题:每个构造块应该专一,对其他构造块知道的越少越好,将设计的信息局限于各个构造块之中!
设计也是有很多理论作支撑的:最小复杂度、易于维护、松散耦合、可扩展性、可重用性、高扇入、低扇出、可移植性、层次性……等等一大堆
这里只说一下层次性:就是所谓的MVC结构。将设计分层是一种思想,而MVC就是后来具体的实现。根据子系统的不同作用将其分为不同的层次。
本章又讲到了前面所说的构造块的设计:抽象、封装、继承等方法的使用。也提到了设计模式的使用,当然少不了GOF的《设计模式》这本大作。
设计的方法有:自下而上和自上而下、迭代、分而治之、合作设计等……设计要做的多详细?这是个问题!记录下设计的成果,不管是画的图、写的文档、总结等……
所以本章的总结就是:设计!