如果软件架构是关于软件系统的结构,那就有必要理解哪些是主要结构单元,以及它们如何在不同的抽象层次上相互融合。
架构结构的简单模型
假设一个软件使用了面向对象的编程语言,我喜欢用如下方式来思考它的结构:软件系统由多个容器构成,容器又由多个组件构成,组件由一个或多个类实现。大多数软件系统都可以用这种简单的逻辑结构单元的层级关系来建模。
- 类 :对我们大多数人来说,在一个面向对象的世界里,类是软件系统的最小结构单元。
- 组件 :组件可以想象成一个或多个类组成的逻辑群组。比如,其他组件可以使用审计组件或认证服务,来确定对特定资源的请求是否放行。组件通常由多个类在更高层次的约束下组合而成。
- 容器 :容器是指一个在其内部可以执行组件或驻留数据的东西。它可以是从网络或应用服务器直到富客户端应用或数据库的任何东西。作为整个系统的一部分,容器通常是可执行文件,但未必是各自独立的流程。比如,我把每个Java EE网络应用或.NET网站都看作一个独立的容器,不管它们是否运行在同一个物理服务器流程中。从容器的角度理解一个软件系统的关键在于,任何容器间的通信可能都需要一个远程接口,比如SOAP网络服务、RESTful接口、Java RMI、Microsoft WCF、报文,等等。
- 系统 :系统是最高的抽象层次,代表了能够提供价值的东西。一个系统由多个独立的容器构成,例如金融风险管理系统、网络网银行系统、网站等。
通过精确定义各种结构单元并特化它们之间的联系,我们不难看出如何更进一步。但是我不确定这会特别有用,因为它会限制和复杂化我们的目标:理解软件系统的结构,并建立能描述它的、简单的抽象集合。