代码改变世界

Head First Object-Oriented Design and Analysis学习笔记(七)

2010-08-02 00:26  Aga.J  阅读(319)  评论(0编辑  收藏  举报

第七章 

Architecture

Bringing Order to Chaos

前言:

这一章继续上一章的内容,在得到上一章的需求分析和基本模块划分后,我们要怎样去对其中的小问题进行逐个击破,从哪一个开始?本章给了我们这样的思路

案例分析:

案例描述:

问题提出:

1面对那么多的需求和分析材料,我们应该从哪里入手来进行我们的系统设计呢?

2 那么我们怎么从需求材料中找出系统最重要的功能呢?

3 缩小了范围,得到了3个可以开始着手的东西,但是又要对哪个先呢?

4 解决了第一个,然后接下来呢?

问题解决:

1 这里使用的方法论还是和以前一样(三部曲:1 make sure your software does what the customer wants to do (2)Apply basic OO principles to add flexibility.(3)strive for a maintainable reusable design。注意:这只是一种开发方法,未必就是适合所有的项目)

按照三部曲的分析方法,接下来我们就应该make sure an application does what it’s supposed to do,所有我们目前要回到我们所取得的需求信息来找到“系统的功能”,而且是最重要的系统功能

2 问自己3个问题

(1)is it part of the essence of the system? Can you imagine the system without the feature?

(2)What the feature does it mean?(如果你对某个需求不明了,那么或许后面就会因为这个不明了的东西带来很大麻烦)

(3) how the heck do I do it?(如果某个地方比较难以解决,也需要先列为优先解决的东西)

(注:第2,和第3点有点像风险规避)

clip_image002根据上面这些feature list进行3Q分析

文章给出的答案是,board,Game-specific unit,coordinate movement

3 这些被选中的feature之所以architecturally significant就是因为它们会给系统带来风险(跟我上面说的一样)。所有不管哪个先开始,只要设好降低风险的目标就可以,文章选择从board开始。

采用scenario的方法来消除在对board的分析设计所可能的遗漏,同时要注意这个阶段只是要完成系统的雏形,所有对于board模块,我们不需要给出太详细的设计,这样才能更好的降低风险(:有点迭代的方法在里面。)

clip_image004 clip_image006

上面的代码或许不是很好的设计,但是我们现在的目标是完成基本功能,降低项目风险,所有能越简单越好

4 接下来就是和已经解决的模块相关性最大的那个模块了。所以就是unit模块。对于unit模块的不清楚,我们可以从客户那里得到更多信息,然后应用前面的common & different的方法来分析我们这个不熟悉的事物(注:对于所有不熟悉的事物都可以使用这种方法来做,经过不经意的实验,发现这样的效果很好)

第一次分析后得到这样的结果

clip_image008

我们从unit抽取出来的共性很少。继续考虑。。。把“不同”变为“相同”,这就是玩家和角色设计模式的其中一个应用,发现各个unit最大不同是type和properties,那么就把这两个东西做为基类的属性,这样每个子类就只充当其中的一个角色,而不是一个实体

clip_image010

(注:这里又使用到了“名值”相对的方法)

而且使用这种方法,一旦我们不断的为我们的游戏添加unit,我们不会因为unit的类型不同而需要给系统增加一大堆类。(注:我们也可以通过这样来逆向推出不应该采取第一种解决方法)

剩下的部分也由这样的方式进行

clip_image012

Important Point

1 architecture is your design structure, and highlights the most important parts of your app, and the relationships between those parts(所谓的架构,就是给出系统的最重要的部分,并且给出他们之间的关系,一种设计的结构,系统的结构)

2 architecture is the organizational structure of a system, including its decomposition into parts, their connectivity, interaction mechanisms, and the guiding principles and decisions that you use in the design of a system(系统的组织结构)

3 抓住the essence of a system,就是抓住系统的most basic level,不要过多的考虑其他外在的修饰或者其他东西,只要考虑那些系统为完成功能所必须的部分,the essence of a system is what that system is at its most basic level

4 focus on one feature at a time to reduce risk in your project