You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于单一职责原则(SRP):Actor与Responsibility的区别是什么?

单一职责原则(SRP)中Actor与Responsibility的区别

先明确:SRP里的“一个类仅因一个原因变更”,核心其实是类的职责要对应单一的需求发起者(Actor),搞懂Actor和Responsibility的区别,就能彻底理解SRP的本质。

什么是Actor?

Actor是系统中的利益相关角色——可以是终端用户、管理员、第三方服务、定时任务,甚至是另一个系统模块。每个Actor代表一类独立的需求来源,他们的诉求变化会驱动代码修改。比如:

  • 普通用户会要求优化界面展示逻辑
  • 财务部门会要求调整报表的数据格式
  • 支付系统会要求修改订单的回调处理逻辑

什么是Responsibility?

Responsibility是类所承担的具体功能集合,是类要完成的实际任务。比如:

  • 一个User类的职责可能是“管理用户基本信息”
  • 一个PaymentProcessor类的职责可能是“处理支付请求与结果回调”

核心区别

  1. 本质不同

    • Actor是需求的发起者,是“谁会让代码变更”
    • Responsibility是功能的执行者,是“类要做什么”
  2. 与SRP的关联逻辑不同
    SRP的核心不是“一个类只能做一件事”,而是“一个类的所有职责都应该来自同一个Actor的需求”。如果一个类的多个职责对应不同Actor,就会导致它因为多个原因变更——比如一个同时处理用户界面展示和财务数据导出的类,会因为用户的界面需求、财务的格式需求两次修改,这就违反了SRP。

举个实际例子

假设你有一个OrderExporter类,它同时负责:

  • 生成给用户看的PDF订单详情(Actor:普通用户)
  • 生成给财务系统的JSON订单数据(Actor:财务部门)

这时候,用户要求PDF加个二维码,你得改这个类;财务要求JSON加个税率字段,你又得改这个类——这个类就有两个变更原因,违反了SRP。

拆分后变成两个类:

  • UserPdfExporter:只处理用户的PDF导出需求
  • FinanceJsonExporter:只处理财务的JSON导出需求

每个类只对应一个Actor,只会因为一类需求变更,完全符合SRP。

内容的提问来源于stack exchange,提问作者Muhammad Nabeel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 05:11:06