跳转至

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)

如何在实际项目中应用模式:

  1. 理解大局 (Understand the big picture): 通过需求模型理解软件所处的上下文。
  2. 提取模式 (Extract patterns): 在高层次抽象中识别存在的模式。
  3. 确立骨架 (Establish context): 使用“大局”模式(通常是架构模式)确立设计的骨架。
  4. 由外向内 (Work inward): 从骨架向内深入,寻找解决子问题的低层级模式。
  5. 重复与细化 (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)

  1. 模式定义 (Definition): 必须记住模式是 Context-Problem-Solution 的三段式规则,以及 "System of Forces" 的概念。
  2. 分类体系 (Taxonomy): 区分 Architectural, Component, Data 等层级模式,以及 GoFCreational, Structural, Behavioral 分类。
  3. 框架 vs 模式 (Framework vs Pattern): 理解框架是 Implementation-specific 的骨架,带有 Plug points/Hooks
  4. 设计流程 (Design Process): 掌握 "Work inward from the context" 的设计思路,即从架构模式到构件模式的层层细化过程。
  5. 常见错误 (Mistakes): 警惕 "Force fit""Applied too literally" 这两种典型的反模式行为。
  6. 应用案例 (Applications): 了解不同领域(Web, Mobile, UI)有哪些典型的问题和对应的模式类别。

这一章将设计从“技术”提升到了“艺术”和“科学”的层面,理解了模式,你就掌握了软件设计的通用语言。祝你复习顺利!

评论区

欢迎在评论区指出文档错误,为文档提供宝贵意见,或写下你的疑问