NBA
对象模型(面向对象分析与设计 - 对象模型)

Hello,大家好,欢迎阅读冰洋架构文章。

摘要:作为面向对象分析与设计的核心产出,对象模型(Object Model)是连接 “业务领域” 与 “软件设计” 的桥梁 — 它不是凭空创造的抽象概念,而是对现实业务中 “事物、属性、行为及关联关系” 的结构化抽象。本文将从对象模型的演进、对象模型基础、对象模型要素、应用对象模型四个方面展开说明。

本文原创作者:彬哥

【彬哥经验】华为技术研发近7年经验,上市公司研发总监10+年经验,坚持在技术一线团队从事技术及架构研究。

【架构经验】近10年架构经验,负责过多个大型项目的架构设计和技术落地,涉及分布式微服务、大数据、安全架构、层次架构等内容;从0-1将单一产品做到大型项目,并成功商用到20家银行的实际经验。

【课程能力】持续输出200+篇原创文章,擅长结构化表达、知识体系的构建和复杂技术栈的通俗讲解。

【考试经验】完全靠自学拿下国家软考系统架构师和企业架构师(TOGAF)双认证。


一、什么是对象模型?(核心定义 + 类比理解)

1. 本质定义

对象模型是面向对象分析(OOA)阶段的核心产物,是对业务领域中 “核心实体、实体属性、实体行为、实体间关系” 的结构化描述。它通过抽象业务场景中的关键要素,形成一套独立于技术实现的 “业务抽象模型”,核心目标是:准确映射业务逻辑,为后续面向对象设计(OOD)和面向对象编码(OOP)实现提供 “业务蓝图”。

2. 类比理解(结合 Java / 微服务)

  • 对 Java 开发者:对象模型 ≈ “业务层面的类图草稿”— 它定义了 “业务对象” 的核心属性和行为(如 “用户” 有姓名 / 手机号,能 “下单”“支付”),但不涉及具体的访问修饰符(private/public)、接口实现(implements)、异常处理等技术细节(这些是 OOD 阶段的工作)。
  • 对微服务架构师:对象模型 ≈ “领域驱动设计(DDD)中的领域模型”—— 它聚焦业务核心实体(如电商领域的 “订单”“商品”“用户”),是划分微服务边界(如订单服务、商品服务)的重要依据,确保微服务的核心职责与业务实体对齐。

3. 核心特征

  • 业务聚焦:只关注与业务相关的要素,忽略技术实现细节(如不考虑数据库存储、接口调用方式);
  • 结构化:通过 “对象 - 属性 - 行为 - 关系” 的固定结构,清晰呈现业务逻辑;
  • 可沟通:是业务人员(理解业务)与技术人员(实现业务)的统一沟通语言(比如用 UML 类图呈现对象模型,双方都能看懂)。

二、对象模型的核心构成(4 大要素 + Java 示例)

对象模型的核心是 “抽象业务实体”,每个实体的描述需包含 4 个关键要素,缺一不可。我们以电商业务中的 “订单” 为例,结合 Java 代码片段辅助理解:

构成要素

定义

电商订单示例

Java 类比(业务层面)

对象(Object)

业务领域中的核心实体(现实事物的抽象),是属性和行为的载体

订单(Order)、商品(Product)、用户(User)

Java 中的 “类”(如Order类)

属性(Attribute)

描述对象的静态特征(数据),需是业务相关的核心信息

订单编号(orderId)、下单时间(createTime)、订单金额(amount)

类中的 “成员变量”(如private String orderId;)

行为(Behavior)

描述对象的动态操作(功能),即对象能 “做什么”

订单创建(createOrder)、订单支付(payOrder)、订单取消(cancelOrder)

类中的 “方法”(如public void createOrder(User user, List<Product> products))

关系(Relationship)

多个对象间的业务关联(核心是 “为什么关联”)

1 个用户(User)可创建多个订单(Order)→ 一对多关系;1 个订单(Order)包含多个商品(Product)→ 聚合关系

Java 中的 “关联 / 聚合 / 组合”(如Order类中包含List<Product>属性,User类中包含List<Order>属性)

关键补充:对象间的核心关系(业务视角)

对象模型的核心价值之一是 “梳理清楚对象间的业务关联”,常见关系有 4 种,用 UML 符号和业务场景说明:

  1. 关联关系(Association):对象间的 “弱依赖” 业务关联(如 “用户 - 订单”:用户下单后,订单存在但用户可独立存在)→ UML 用 “实线箭头” 表示;
  2. 聚合关系(Aggregation):对象间的 “整体 - 部分” 关联(部分可独立于整体存在,如 “订单 - 商品”:订单取消后,商品仍可存在)→ UML 用 “空心菱形 + 实线” 表示(菱形在整体侧);
  3. 组合关系(Composition):对象间的 “强整体 - 部分” 关联(部分不能独立于整体存在,如 “订单 - 订单详情”:订单删除后,订单详情无意义)→ UML 用 “实心菱形 + 实线” 表示;
  4. 继承关系(Inheritance):对象间的 “共性 - 个性” 关联(如 “订单 - 实物订单 / 虚拟订单”:实物订单和虚拟订单共享订单的核心属性,同时有自己的特有属性)→ UML 用 “空心三角 + 实线” 表示(三角在父类侧)。

三、对象模型的核心价值(为什么需要它?)

对架构师和开发团队而言,对象模型不是 “多余的文档”,而是提升开发效率、降低系统复杂度的关键工具,核心价值体现在 3 点:

  1. 需求沉淀:避免 “需求失真”业务需求往往是零散的(如 “用户能下单、支付、取消订单”),对象模型通过 “对象 - 属性 - 行为 - 关系” 的结构化梳理,将零散需求转化为清晰的业务实体映射,确保技术团队对需求的理解与业务方一致(比如明确 “订单必须关联用户和商品”,避免后续开发遗漏关联逻辑)。
  2. 设计依据:指导 “高内聚低耦合”对象模型明确了每个对象的 “职责边界”(如 “订单” 负责管理订单状态,“支付” 负责处理支付逻辑),这直接指导 OOD 阶段的类设计、接口设计和模块划分。例如:在微服务设计中,可根据对象模型将 “用户对象” 相关逻辑拆分为 “用户服务”,“订单对象” 相关逻辑拆分为 “订单服务”,天然实现 “高内聚低耦合”。
  3. 团队协作:统一 “沟通语言”面对复杂业务(如电商的 “秒杀订单”“拼团订单”),产品、架构师、开发、测试人员的沟通容易出现偏差。而对象模型(如 UML 类图)是可视化的 “业务蓝图”,所有人都能基于同一模型讨论,避免 “各说各的”(比如测试人员可根据对象模型中的 “行为” 设计测试用例,开发人员根据 “属性和关系” 设计数据库表)。

四、对象模型的构建步骤(从业务到模型的落地流程)

对象模型的构建不是 “拍脑袋设计”,而是基于业务需求的系统化梳理过程,分为 5 个步骤(结合电商 “订单下单” 场景示例):

步骤 1:需求分析→提取 “业务场景”

先明确核心业务场景(用例),比如电商订单的核心场景:“用户浏览商品→加入购物车→创建订单→支付订单→取消订单”。关键动作:与业务方确认场景的完整性,避免遗漏核心流程(如是否支持 “订单改价”“部分退款”)。

步骤 2:场景拆解→识别 “核心对象”

从每个业务场景中提取 “关键实体”,即对象。例如:

  • 场景 “创建订单” 涉及的实体:用户、商品、订单、购物车;
  • 场景 “支付订单” 涉及的实体:订单、支付记录、支付渠道(微信 / 支付宝)。
  • 关键原则:只保留 “业务核心实体”,忽略无关细节(如 “支付时的验证码” 不是核心对象,而是 “支付行为” 的参数)。

步骤 3:对象细化→定义 “属性和行为”

为每个对象补充 “业务相关的属性和行为”,避免冗余:

  • 订单对象(Order):
  • 属性:orderId(订单号)、createTime(创建时间)、status(订单状态:待支付 / 已支付 / 已取消)、amount(金额);
  • 行为:createOrder(创建订单)、payOrder(支付订单)、cancelOrder(取消订单)。
  • 用户对象(User):
  • 属性:userId(用户 ID)、userName(姓名)、phone(手机号);
  • 行为:login(登录)、createOrder(创建订单,关联订单对象)。

步骤 4:关系梳理→明确 “对象关联”

基于业务逻辑,梳理对象间的关系:

  • 用户(User)与订单(Order):1 个用户可创建多个订单→一对多关联;
  • 订单(Order)与商品(Product):1 个订单包含多个商品→聚合关系;
  • 订单(Order)与支付记录(PaymentRecord):1 个订单对应 1 条支付记录→一对一关联。

步骤 5:模型优化→符合 “面向对象原则”

对初步模型进行优化,避免职责混乱、关系冗余:

  • 职责单一:将 “支付逻辑” 从订单对象中拆分,单独创建 “支付对象(Payment)”,避免订单对象职责过重;
  • 消除冗余:如果 “购物车” 的核心作用是 “临时存储商品”,且不参与订单创建后的逻辑,可保留为独立对象,但无需与订单建立长期关联;
  • 抽象共性:如果存在 “实物订单” 和 “虚拟订单”,可抽象出父类 “订单(Order)”,子类继承父类属性,新增特有属性(如实物订单的 “物流地址”,虚拟订单的 “激活码”)。

五、对象模型 vs 数据模型(避免混淆的关键)

很多开发者会将 “对象模型” 与 “数据模型”(数据库表设计)混淆,这里用表格明确二者区别,帮读者理清边界:

维度

对象模型(OOA 阶段)

数据模型(数据库设计阶段)


核心目标

映射业务逻辑,明确对象职责与关系

映射数据存储,优化查询与存储效率


关注重点

行为(如 createOrder、payOrder)

字段(如 order_id、create_time)、约束(主键、外键)


抽象层面

业务层面(独立于技术)

技术层面(依赖数据库类型)


示例(订单)

包含 “支付订单”“取消订单” 等行为

包含 order_id(主键)、user_id(外键)、status(枚举字段)等


关联关系

聚合、组合、继承等业务关联

外键约束、联合索引等存储关联


关键联系:

对象模型是数据模型的 “上游依据”—— 数据模型的表结构(如order表、user表)需对应对象模型的属性,表之间的外键关系需对应对象模型的关联关系(如order表的user_id外键对应 User 和 Order 的关联)。

六、总结:对象模型的核心本质

对象模型不是 “复杂的 UML 图”,而是业务逻辑的 “结构化翻译” —— 它将零散的业务需求转化为 “对象 - 属性 - 行为 - 关系” 的清晰框架,既解决了 “需求失真” 问题,又为后续设计和开发提供了明确的指导。

对架构师而言,掌握对象模型的构建方法,本质是掌握 “从业务到技术的抽象能力”—— 如同微服务设计中 “领域驱动设计” 的核心思想,对象模型让我们在面对复杂业务时,能快速抓住核心、划分边界,最终设计出高内聚、低耦合、可扩展的软件系统。


如果您对系统架构感兴趣,对系统架构师感兴趣,可以点赞+关注,您可以免费获得学习资料,我们将竭尽所能陪您一起成长。


顶一下()     踩一下()

热门推荐

发表评论
0评