内容提要
系统由关联个体按规则协作产生新能力,子系统是更大系统的一部分;模块按逻辑拆分以分离职责,组件按物理拆分以复用;框架关注规范,架构是软件系统的顶层结构,明确个体及运作规则。
延伸解读
系统与子系统的相对性
文章指出,系统由关联个体按规则运作并产生新能力,而子系统是更大系统的一部分。这种划分并非绝对,取决于观察视角:微信可视为系统,聊天、朋友圈是其子系统;若将朋友圈视为系统,动态、评论等又可成为其子系统。理解这种相对性有助于在架构设计中灵活界定边界,避免陷入名词之争。
模块与组件:逻辑与物理的拆分
模块和组件都是系统的单元,但拆分角度不同。模块从逻辑(功能)角度拆分,如学生信息管理网站分为登录注册、个人信息模块,目的是职责分离;组件从物理(部署环境)角度拆分,如Nginx、web服务器、Mysql,目的是单元复用。明确这一区别,能在设计中更准确地选择拆分方式,提升系统可维护性与复用性。
框架与架构:规范与顶层结构
框架关注规范,要么制定规范(如MVC、J2EE),要么实现规范(如Spring MVC)。架构则是软件系统的顶层结构,是对整体结构与组件的抽象描述,用于指导大型软件系统设计。架构需明确系统中包含哪些个体(子系统、模块、组件等)以及个体运作的规则。区分二者有助于在开发中正确选用框架,并理解架构的全局性。
架构定义的三个关键词
文章从维基百科定义中提炼出三个关键词:整体结构、抽象描述、软件系统。整体结构说明架构关注结构,不同视角可产生不同架构图(如RUP的4+1视图);抽象描述说明架构专注顶层设计,不陷入细节;软件系统说明架构适用于系统级别,并非所有软件开发都需要专门架构设计,需根据规模视情况而定。这三点帮助读者把握架构的本质。
Q&A
系统、子系统、模块、组件、框架和架构这些名词分别是什么意思?
系统是由一群有关联的个体按规则运作、能完成个体无法单独完成的工作的群体;子系统是更大系统中的一部分;模块是按逻辑拆分系统得到的单元,包含程序与数据结构;组件是按物理拆分系统得到的可重用、可组装的软件单元;框架是实现业界标准或完成特定基本任务的软件组件规范或提供基础功能的软件产品;架构是软件系统的顶层结构,明确系统包含的个体及其运作规则。
模块和组件有什么区别?
模块和组件都是系统的单元,区别在于拆分角度:模块是从逻辑角度拆分系统得到的单元,比如按功能分为登录注册模块、个人信息模块,目的是职责分离;组件是从物理角度拆分系统得到的单元,比如按部署环境分为 Nginx、web 服务器、Mysql,目的是单元复用。
框架和架构有什么不同?
框架关注的是规范,要么制定规范(如 MVC、J2EE),要么实现规范(如 Spring MVC);架构是软件系统的顶层结构,关注整体结构、抽象描述,用于指导大型软件系统的设计,明确系统包含哪些个体以及个体运作的规则。
架构的本质是什么?
架构的本质是软件系统的顶层结构。它需要明确系统中包含哪些个体(如子系统、模块、组件等),明确这些个体运作的规则,并且从系统视角出发覆盖系统的全貌,是最高层次的结构。
系统定义中的三个核心要点是什么?
系统定义包含三个核心要点:第一是关联,必须有关联的个体放在一起才能成为系统;第二是规则,每个个体有各自的分工和协作方式,按一定规则运行;第三是能力,系统不是个体能力之和,而是产生新的能力,即 1+1>2 的效果。
划分模块和组件的目的分别是什么?
划分模块主要是为了职责分离,从逻辑角度拆分系统,使每个模块有完整功能、可分开编写;划分组件主要是为了单元复用,从物理角度拆分系统,使组件可独立替换、易于组装到应用程序中。