# 软件开发发展历程(二)

10 min read
Table of Contents

从模块到分层:软件架构的第一次系统性演进

本系列第二篇,介绍 1980~1990 年代软件架构的第一次系统性演进。随着软件规模扩大与图形界面兴起,单纯的模块化已难以支撑需求,软件架构迈入了以“分层”为核心的系统性设计阶段。本文将梳理从模块化设计到 MVC 架构的演进逻辑,并介绍其中关键概念的优势与应用。


模块化的缺陷 → 引出OOP的必要性 → 三层架构雏形的出现 → 因GUI复杂度 → 需要MVC分层


一、模块化设计的困境:代码规模引发的连锁反应

1.1 软件复杂度的爆炸式增长

  • 从千行级代码(1980 年代)发展到十万行级的企业 ERP 系统
  • 多人协作需求增加,模块边界模糊引发冲突(如 IBM 大型银行系统案例)
  • UI 与数据库直接交互导致高耦合(早期 VB/Delphi 应用实例)

1.2 模块化失效的本质原因

  • 单一维度切分:功能划分忽略“变化率”不同(UI 频繁变 vs 业务规则稳定)
  • 缺乏抽象层次:如税率计算嵌入表单事件中,导致维护困难
  • 技术限制:过程式语言无法封装状态,结构体 vs 类对比(C vs C++)

👉 模块化设计已无法应对规模化与协同开发的挑战,促使更清晰的分层架构诞生。


二、面向对象编程(OOP):提升抽象能力以支撑复杂建模

2.1 背景

  • 过程式编程难以应对复杂系统
  • 面向对象语言(C++、Smalltalk)兴起

2.2 核心概念

  • 封装、继承、多态
  • “对象”成为系统建模的基本单元
  • 倡导以“现实世界建模”为目标

2.3 优势与应用

  • 更强的抽象能力 → 更自然地组织代码与模块
  • 更高的可扩展性与可维护性
  • 成为现代编程范式主流,C++、Java、C# 等语言大多基于 OOP

2.4 OOP 如何突破模块化局限

  • 封装性:银行账户类封装余额逻辑,仅暴露存取接口
  • 继承与多态:UI 控件继承结构(Button → Control → Component)
  • 现实建模能力:如订单、商品、仓库对象之间的交互关系

2.5 OOP 带来的架构可能性

  • 职责隔离:通过接口(如 IDataAccess)定义不同层的契约
  • 松耦合设计:观察者模式在事件驱动架构中的应用(Smalltalk 案例)

三、图形界面革命:迫使架构分层的外部推力

3.1 图形用户界面(GUI)的兴起

  • Windows、Mac OS 图形界面逐步取代命令行
  • 开发语言与工具支持 GUI(如 VB、Delphi、MFC)

3.2 带来的新挑战

  • UI 逻辑复杂化 → 更需要 MVC、三层等架构支撑
  • 多事件驱动、状态管理问题凸显

3.3 GUI 对架构的颠覆性要求

  • 事件驱动模型:区别于命令行顺序执行,GUI 采用消息循环机制
  • 状态管理复杂:如文档编辑器中的撤销/重做逻辑难以维护
  • 平台差异性:同一业务逻辑需适配多平台 UI(如 MFC 框架的痛点)

3.4 早期分层尝试:VB 的三层模型与 Delphi 的数据模块

  • 数据绑定机制:如 Delphi 中 TDataSet 与 UI 控件的自动同步
  • 可视化设计缺陷:过度依赖拖拽式开发,导致业务逻辑耦合在 Form 代码中(反例)

GUI 的流行推动了 MVC 等架构模式的实践落地。


四、三层架构雏形的出现:逻辑分层的首次系统性实践

4.1 架构分层思想的引入

将应用划分为:表示层(UI)业务逻辑层(BLL)数据访问层(DAL)

4.2 每层职责

  • 表示层:与用户交互,如按钮、输入框
  • 业务逻辑层:处理核心业务规则
  • 数据访问层:操作数据库或文件

4.3 优势与应用

  • 分工明确,职责清晰 → 更适合多人协作
  • 易于维护与测试
  • 提高模块重用性

应用于企业级应用开发中,成为信息系统的主流架构模型雏形。


五、MVC 架构模式:图形界面时代的最佳实践

5.1 起源

  • 最早由 Smalltalk-80 提出(1979)
    • Smalltalk-80:模型主动通知视图(观察者模式雏形)
  • 随着 GUI 编程发展(如 Java Swing、VB),得到广泛应用
    • Java Swing:采用事件监听机制(ActionListener)实现控制器解耦

5.2 MVC 如何解耦 UI 与逻辑

  • 模型层(Model):负责数据管理与业务规则(如银行账户余额更新)
  • 视图层(View):负责展示数据(如同一账户在表格和图表中的呈现)
  • 控制器层(Controller):响应用户操作,协调 Model 与 View

📌 MVC 可看作三层架构中“表示层”的内部实现框架,使 UI 更加结构化,利于复用与测试。

5.3 优势与应用

  • 分离关注点 → 提高模块独立性
  • 易于测试和扩展
  • 支持并行开发(界面开发和业务逻辑分开)

📌 MVC 架构在 GUI 桌面应用和 Web 开发(如 ASP.NET MVC、Spring MVC)中广泛使用。


六、三层架构 vs MVC 架构:从系统分工到交互分离

尽管三层架构与 MVC 架构在形式上都采用了“分层”的思想,但二者关注点不同,适用场景也有所差异。

6.1 分层维度对比

特征三层架构MVC 架构
切分依据系统职责(数据/逻辑/UI)用户交互流程(控制/视图/数据)
起源背景企业系统、后端服务图形界面(桌面 GUI / Web 前端)
层与层之间通常是顺序依赖控制器协调 Model 与 View,交互更频繁

6.2 应用场景差异

  • 三层架构:强调模块独立,便于维护和扩展,适合后端服务、信息管理系统
  • MVC 架构:强调交互分离、响应事件,适合 GUI 应用、前端框架

6.3 相互关系

可以将 MVC 看作是三层架构中表示层的内部再分层

三层架构
├── 表示层 View层 (UI)
│ └── MVC(三层架构内的进一步划分)
├── 业务逻辑层 Service层
└── 数据访问层 Dao层

七、设计模式的系统化提出:经验的提炼与规范化

7.1 《设计模式》一书出版(1994,Gang of Four)

总结了 23 个经典的面向对象设计模式(如工厂模式、观察者模式、单例、装饰器等)

7.2 作用与意义

  • 提高代码复用性与可读性
  • 提供通用解决方案,降低“重复造轮子”
  • 促进团队协作与代码风格统一

📌 MVC 也是一种设计模式,强调将视图、模型、控制器职责分离。


八、小结:架构第一次系统性升级的核心关键词

关键词代表意义
三层架构引入分层思想,明确职责划分
面向对象提升抽象与建模能力,支撑大型系统开发
设计模式提炼通用解决方案,促进团队协作
MVC 架构GUI 编程中的结构化最佳实践

My avatar

感谢您阅读我的博客文章!可随意查看我的其他帖子或通过页脚中的社交链接与我联系😊


More Posts

# 软件开发发展历程(一)

7 min read

本系列将回顾软件架构的发展演进,本文是第一篇,讲述软件架构最初的形态:单体程序,以及模块化和结构化编程的兴起。

Read

# 软件开发发展历程(三)

14 min read

本系列第三篇,聚焦 1990~2000 年代软件架构的第二次重大变革。个人计算机普及与互联网兴起,驱动软件架构从单机应用向网络化协作模式演进。本文将探讨单机应用的黄金时代、C/S 架构的崛起与局限,以及 B/S 架构如何成为 Web 时代的解决方案。

Read

Comments