16 基于模式的设计¶
说明
本文档由 AI 生成
这一章(Chapter 16: Pattern-Based Design)是软件工程中关于**基于模式的设计 (Pattern-Based Design)** 的核心章节。它将前面章节(如架构设计、构件设计、UI设计)中零散介绍的设计原则和解决方案进行了系统化的梳理,引入了“设计模式 (Design Patterns)”这一强大的复用工具。
这一章的逻辑非常清晰,首先从哲学层面定义了什么是模式(Pattern)及其核心要素,然后分类介绍了不同抽象层级的模式(架构模式、构件模式等)以及著名的GoF分类法,接着阐述了如何在实际项目中应用这些模式进行设计,最后分别针对UI、Web应用和移动应用展示了具体的模式应用案例。
以下是为你整理的详细笔记(Markdown格式),专有名词后均已附上英文对照:
🏗️ 软件工程 Chapter 16: 基于模式的设计 (Pattern-Based Design)¶
1. 什么是设计模式 (Design Patterns)¶
设计模式是描述问题及其解决方案的**规范化 (Codified)** 方法,它使软件工程界能够以可复用的方式捕获设计知识。
- 核心定义 (Basic Concepts): 一个**三段式规则 (Three-part rule),表达了**上下文 (Context)、问题 (Problem) 和**解决方案 (Solution)** 之间的关系。
- 上下文 (Context): 理解问题所处的环境,以及该环境中哪些解决方案是合适的。
- 作用力系统 (System of Forces): 一组需求、限制和约束,影响着对问题的解释和解决方案的应用。
- 有效模式的特征 (Effective Patterns):
- 解决问题 (Solves a problem): 不是抽象原则,而是针对具体问题的解决方案。
- 经过验证 (Proven concept): 是已被证实的概念,而非理论或推测。
- 非显而易见 (Not obvious): 解决方案不是显而易见的,通常用于解决最困难的设计问题。
- 描述关系 (Describes a relationship): 不仅仅描述模块,而是描述更深层次的系统结构和机制。
- 人性化组件 (Human component): 具有显著的人性化组件,明确诉诸于美学 (Aesthetics) 和实用性 (Utility)。
2. 模式的分类 (Kinds of Patterns)¶
PPT中展示了两种主要的分类视角:
| 分类视角 | 类别名称 | 英文 | 描述 |
|---|---|---|---|
| 按抽象层级 | 架构模式 | Architectural patterns | 解决 broad-based 的设计问题,使用结构化方法。 |
| 数据模式 | Data patterns | 解决反复出现的数据导向问题及数据建模方案。 | |
| 构件模式 | Component patterns | 也称设计模式,解决子系统/构件的开发、通信及在架构中的放置问题。 | |
| 接口设计模式 | Interface design patterns | 解决特定于最终用户特征的作用力系统中的UI问题。 | |
| WebApp模式 | WebApp patterns | 解决构建Web应用时遇到的问题集,常融合其他模式。 | |
| 按GoF (四人组) | 创建型模式 | Creational patterns | 关注对象的创建、组合和表示 (如 Abstract factory, Factory method)。 |
| 结构型模式 | Structural patterns | 关注类和对象如何组织和集成以构建更大结构 (如 Adapter, Aggregate)。 | |
| 行为型模式 | Behavioral patterns | 关注对象间责任的分配和通信方式 (如 Chain of responsibility, Command)。 |
3. 框架 (Frameworks)¶
- 定义: 针对特定领域的**可复用的微型架构 (Reusable mini-architecture)**,提供了一组抽象的通用结构和行为。
- 骨架与插槽 (Skeleton & Plug points): 框架是一个带有**“插槽” (Slots/Hooks)** 的骨架,允许你将特定于问题的类或功能集成到骨架中。
- 与架构模式的区别: 框架是**特定于实现 (Implementation-specific)** 的,而架构模式更偏向于抽象的指导原则。
4. 如何描述一个模式 (Describing a Pattern)¶
一个完整的模式描述通常包含以下关键部分(INFO Section):
- 名称与问题 (Pattern name & Problem): 动机 (Motivation) 和意图 (Intent)。
- 上下文与作用力 (Context & Forces): 描述问题的环境和约束。
- 解决方案 (Solution): 核心的解决逻辑。
- 协作与后果 (Collaborations & Consequences): 对象间的协作方式及方案的优缺点。
- 实现与应用 (Implementation & Known uses): 具体的代码实现指导和已知应用案例。
5. 基于模式的设计流程 (Pattern-Based Software Design)¶
如何在实际项目中应用模式:
- 理解大局 (Understand the big picture): 通过需求模型理解软件所处的上下文。
- 提取模式 (Extract patterns): 在高层次抽象中识别存在的模式。
- 确立骨架 (Establish context): 使用“大局”模式(通常是架构模式)确立设计的骨架。
- 由外向内 (Work inward): 从骨架向内深入,寻找解决子问题的低层级模式。
- 重复与细化 (Repeat & Refine): 重复上述步骤,直到完整的设计被 fleshed out,并根据具体需求调整模式。
6. 常见的设计错误 (Common Design Mistakes)¶
- 理解不足 (Not enough understanding): 没花足够时间理解问题、上下文和作用力,导致选择了看似正确但不合适的模式。
- 强行套用 (Force fit): 一旦选错模式,拒绝承认错误并强行套用。
- 忽略作用力 (Ignored forces): 所选模式未考虑问题中存在的某些作用力,导致拟合度差。
- 生搬硬套 (Applied too literally): 过于死板地应用模式,未根据问题空间进行必要的调整。
7. 不同领域的模式应用 (Pattern Applications)¶
PPT分别展示了三个主要领域的模式应用重点:
-
架构模式 (Architectural Patterns):
- 关注点: 并发 (Concurrency)、持久性 (Persistence)、分布 (Distribution)。
- 案例: 厨房模式 (Kitchen pattern)。它不规定唯一的厨房设计,而是在“存储和准备食物”这一上下文中,提供关于操作台、照明、中央岛等元素的解决方案建议。
-
构件级模式 (Component-Level Patterns):
- 关注点: 解决需求模型中提取的子问题,通常聚焦于系统的某个功能元素。
- 案例 (SafeHomeAssured.com): 为了解决“如何获取产品规格信息”的问题,应用了搜索相关的模式,如
AdvancedSearch,HelpWizard,SearchBox,SearchResults等。
-
用户界面模式 (User Interface Patterns):
- 关注点: 涵盖从整体UI结构到具体页面元素的全方位设计指导。
- 分类: 整体UI与导航、页面布局、表单与输入、表格、直接数据操作、搜索、页面元素、电子商务特定元素。
-
WebApp 模式 (Webapp Patterns):
- 信息架构模式 (Information architecture): 信息空间的整体结构。
- 导航模式 (Navigation): 链接结构(层次、环、导览等)。 import 交互模式 (Interaction): 界面如何告知用户操作后果、内容展开方式、链接目的地描述等。
- 呈现模式 (Presentation): 内容的组织、控制函数的可用性、内容层级建立。
- 功能模式 (Functional): WebApp内的工作流、行为、处理和通信算法。
-
移动应用模式 (Patterns for Mobile Apps):
- UI层面: 签到屏幕 (Check-in screens)、地图 (Maps)、弹出框 (Popovers)、注册流程 (Sign-up flows)、自定义标签导航 (Custom Tab Navigation) 等。
- 架构/功能层面: 活跃对象 (Active Objects)、惰性获取 (Lazy Acquisition)、模型-视图-控制器 (MVC)、分页 (Pagination)、数据传输对象 (Data Transfer Object)、同步 (Synchronization) 等。
💡 复习重点总结 (Key Takeaways for Exam)¶
- 模式定义 (Definition): 必须记住模式是 Context-Problem-Solution 的三段式规则,以及 "System of Forces" 的概念。
- 分类体系 (Taxonomy): 区分 Architectural, Component, Data 等层级模式,以及 GoF 的 Creational, Structural, Behavioral 分类。
- 框架 vs 模式 (Framework vs Pattern): 理解框架是 Implementation-specific 的骨架,带有 Plug points/Hooks。
- 设计流程 (Design Process): 掌握 "Work inward from the context" 的设计思路,即从架构模式到构件模式的层层细化过程。
- 常见错误 (Mistakes): 警惕 "Force fit" 和 "Applied too literally" 这两种典型的反模式行为。
- 应用案例 (Applications): 了解不同领域(Web, Mobile, UI)有哪些典型的问题和对应的模式类别。
这一章将设计从“技术”提升到了“艺术”和“科学”的层面,理解了模式,你就掌握了软件设计的通用语言。祝你复习顺利!
评论区
欢迎在评论区指出文档错误,为文档提供宝贵意见,或写下你的疑问