0

0

详解Java中的设计原则:单一职责原则 (SRP) 在小型项目中的应用

P粉602998670

P粉602998670

发布时间:2026-02-13 08:24:37

|

407人浏览过

|

来源于php中文网

原创

srp 的本质是“一个变化原因对应一处修改”,而非机械拆分类;小型项目中应聚焦修改点收敛,通过提取常量、封装变化、协调式api等轻量方式落地,警惕隐性职责污染。

详解java中的设计原则:单一职责原则 (srp) 在小型项目中的应用

SRP 不是“一个类只能做一件事”

很多人一看到单一职责原则,就下意识把类拆得特别碎,比如 User 类里不能有保存逻辑,非得抽出个 UserRepository,哪怕项目总共就三个类、两百行代码。这反而增加认知负担,不是在用原则,是在套公式。

小型项目里,SRP 的真实意思是:**当某个变化原因出现时,只有一处代码需要改**。比如用户头像格式变了,你只改头像处理相关逻辑,而不是翻遍 UserUserServiceApiHandler 去找哪几行在解析图片。

  • 判断依据不是“功能数量”,而是“变化频率和原因”——UI 层改了、数据库换字段、导出格式调整,这些都可能是不同变化原因
  • 如果 User 类同时负责数据结构定义、JSON 序列化规则、校验逻辑,那 JSON 库升级(如从 Jackson 换成 Gson)就可能牵连三处
  • 小项目中,把校验逻辑直接写在 setAvatarUrl() 里比单独建 UserValidator 更直接;但若校验规则要复用于 API 入参和后台任务,那就该抽出来

怎么识别“职责混杂”的信号

别等重构时才发现,写代码当下就能观察到几个典型征兆:

  • 方法名里带“and”或“or”:比如 saveUserAndSendNotification(),说明它在响应两个变化原因(存储失败 or 推送失败)
  • 单元测试用例描述里反复出现不同主语:“when user is created…”, “when email format changes…”, “when SMS gateway fails…”——这是多个职责在抢同一个测试文件
  • 加个日志、换种序列化方式、改个字段名,都要打开三个以上文件——说明职责边界被手动“粘合”了
  • User 类里出现了 HttpClientFileOutputStreamnew ObjectMapper() 这类强外部依赖,大概率在干不止一件类型的事

小型项目里怎么落地 SRP 而不搞复杂

不做大手术,只做“切口最小的分离”。重点不是拆类,而是让修改点收敛。

柏顿企业网站管理系统 1.0
柏顿企业网站管理系统 1.0

柏顿企业网站管理系统(免费版)秉承了东莞柏顿软件的一惯原则(致力于打造简洁、实用、绿色的管理系统)而推出的一款适合广大中小型企业的网站管理系统。主要功能如下:1.基本设置:联系方式、关键字、版权信息等等;2.菜单管理:用户可以在线增加、删除、修改和隐藏前台的菜单栏目和菜单项3.新闻系统:支持二级分类,可分类查看新闻、修改新闻、批量推荐、删除新闻,可设置是否推荐、新闻点击等4.产品系统: 产品类别新

下载

立即学习Java免费学习笔记(深入)”;

  • 把硬编码的格式规则提成常量或配置项:MAX_AVATAR_SIZE = 2 * 1024 * 1024,而不是散落在 if 判断里
  • 用私有方法封装变化点:比如所有时间格式化统一走 formatTimestamp(long),而不是各处 new SimpleDateFormat
  • 对外暴露的 public 方法只做协调,具体动作交给参数或策略:比如 processUser(User user, UserProcessor processor),而不是在方法内部 new 各种工具类
  • 避免在实体类里写业务逻辑:如果 User.isActive() 依赖当前日期、配置开关、第三方状态,那就别放进去——改成 UserStatusChecker.isActive(User)

容易被忽略的“隐性职责”

最常踩坑的是把“可测试性”“可调试性”当成理所当然,结果让职责悄悄膨胀。

  • 为了方便单元测试,在 User 里加了 setCreatedAtForTest() 方法——这其实引入了“测试支持”这个新职责
  • 日志里打印了完整对象(log.info("user: {}", user)),而 User.toString() 里拼接了数据库连接信息或敏感字段——序列化行为污染了领域模型
  • 使用 Lombok 的 @Data 时没注意它自动生成了 equals()/hashCode(),而这两个方法实际依赖了哪些字段,决定了“什么算同一个用户”——这其实是领域一致性职责,不该由工具全权决定

小型项目节奏快,最容易在“先跑起来再说”的瞬间,把临时方案变成隐性契约。SRP 真正难的不是拆分,是每次加一行代码前,问一句:这一行,到底是因为哪个原因才可能被改?

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
504 gateway timeout怎么解决
504 gateway timeout怎么解决

504 gateway timeout的解决办法:1、检查服务器负载;2、优化查询和代码;3、增加超时限制;4、检查代理服务器;5、检查网络连接;6、使用负载均衡;7、监控和日志;8、故障排除;9、增加缓存;10、分析请求。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

602

2023.11.27

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

226

2023.12.07

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

436

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

317

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1550

2023.10.24

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

807

2023.08.22

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

4

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.5万人学习

C# 教程
C# 教程

共94课时 | 9.3万人学习

Java 教程
Java 教程

共578课时 | 64.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号