一如照片,记忆留存。照片记录了一闪而过的时刻,并阐释了这个时刻,让记忆留存至今。从什么时候开始,数字摄影就已经彻底地改变了摄影领域,需要大圈边框和胶片的照相机被DSLR和闪存卡取而代之,摄影师利用照相机将光子转变为电子,但在一些情况下,又必须通过某些系统将这些电子转化为墨水原子和纸张。
首先,功能和约束影响了系统的构架。他必须做什么,必须在什么限制条件下工作?通过解决这些问题,在要求的行为和限制条件之间进行探索,创作出一个优雅的,美丽的系统构架。该系统面临着诸如多品牌、合伙人是摄影师,不是图像艺术家、照相馆是远程的、生产时集中式的、生产吞吐量很重要等等,这些事实导致了一些重要问题,必须权衡考虑。并且这些问题都来源于环境,一旦环境改变,问题也会随之改变。
其次,该架构的关注点是什么呢?将一个动态的、多维的系统简化为一种线性的描述形式。当我们研究一个架构的关注点时,要记住他们是研究整个系统的不同方式,同时,每个模块又是按分层架构来创建的。他们是正交的,相互穿插的。每个模块都可以按照相同的方式来分层,每个层都可以在所有的模块中找到。“产品家族”并不是单个的“应用程序”,我么必须支持几种不同的部署场景,而这些场景使用相同的底层代码。
在模块和加载程序中,作者向我们展示了“敏捷构架”的“美丽”之处,保持最小的架构,只有当避免新架构的特性的代价实现超过实现它的代价时,才采用新的架构。模块之间具有依赖关系,将每个顶层目录看成一个模块,让每个模块包含他自己的元数据。通过这种方式,模块只需要声明他用到的classpath和配置文件,并声明它需要哪些其他模块。
在UI和IU模型中,我们了解到:典型的分层架构包括“表示层”、“业务领域层”和“持久层”,在实践中,代码的重心集中到了表示层,业务领域层变成了简单的数据容器,持久层则转变为对框架的调用。同时,表示层嵌入了这样的逻辑:如果选中了这个复选框,那就让这四个文本字段也生效。所以在典型的三层架构中,一种类型的信息会散布在各层中,而另一种类型的重要信息则存在于UGI控制逻辑中。
创建强大的领域模型容易犯一个典型的错误,表示层常常与领域模型太过亲密。如果表示层遍历了领域模型中的关系,那么就很难改变领域模型了,显然,这与我们所追求的灵活性是相违背的。Martin Fowler的“应用程序外观”很好的解决了这一问题。应用程序外观只将领域模型的一部分暴露给表示层,表示层不会跟踪领域对象的关系图,而是让应用程序外观来帮助实现遍历,生命周期管理和激活等操作。
作者通过讲述该系统构建的目的,过程,注意事项,为我们展示了架构的曼妙之处,学习到一些新的名词。