《代码大全》读书笔记3-架构设计的层次

上节中一个良好架构的特征中有一点,良好的层次结构。 本节说说架构设计的层次设计。

软件系统

第一层次就是整个系统,从整体的角度考虑

分解,子系统或包

这一层次的主要成果是识别出所有的主要子系统。这些子系统可能会很大。比如数据库,用户界面,业务规则,命令解释器,报表引擎等。并定义清楚子系统如何使用其他子系统,对于任何几周以上的项目,这个步骤都是必要的。
这一步中,子系统之间通信的规则非常重要,如果所有的都能同其他子系统通信——那就完全失去了子系统的意义。因为这样只会让复杂度成倍的增加(soa化系统中,很容易遇到这种问题)
毫无疑问,这是最为重要的一步。在设计子系统时,我们可以考虑如下问题:

  • 一个开发人员需要理解系统中多少个不同的部分,才能在(图形)子系统中改动某些东西
  • 当你在另一个系统中试图使用业务规则会发生什么…

  • 当你想在系统中插入一套新的用户界面(比如测试)时会发生什么?

  • 当你想把数据存放到一台远程计算机时会发生什么?

毫无疑问,它们对应着如下一些基本规则:

  • 模块划分的清晰度、与业务的对比性

  • 模块划分的扩展性

  • 模块划分的独立性

其实它们与软件工程中常见概念:高内聚,低耦合是一致的。子系统之间的通信也应该具备这个条件,比如接口调用明显优于继承,restful则更加适合解耦等等。
子系统之间应该避免出现环形调用。

划分为模块(maven modul,自己的理解)

对于任意一个子系统,通常来说一个modul是不够的。特别的,对于一个java项目,往往会分为启动模块,数据库模块,服务模块,接口模块等。 这一步需要明析这个问题

分解为类

这一层次设计需要识别出子系统中所有类,比如数据库子系统中会被进一步划分为数据访问类,持久化框架类以及数据库元数据。
当定义类时,也定义了类与当前子系统其他部分打交道的细节。尤其是接口。

分解为子程序

这一层次包括把每个类分为子程序,主要就是细化出类的私有程序,有些类的子程序很简单,而有些则有着更多层次化的子程序孙组成。
这一部分通常是有具体的编码人员来完成的。

子程序内部设计

这一层次就是如何完成具体的逻辑,通常是编码人员自己完成。包括编写伪代码,选择算法,组织内部代码块等等。(ps, 在具体编码设计时,对于OO语言,应该随时把 封装、继承、多态放在心中,对于任何可能得抽象都应该加以带入性思考)