首页 > 其他分享 >类的设计原则——单一职责原则

类的设计原则——单一职责原则

时间:2023-11-23 23:33:05浏览次数:27  
标签:username 职责 原则 单一 User password public String

单一职责原则(Single Responsibility Principle, SRP)

  • 单一职责原则,又称单一功能原则,由罗伯特·C.马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中提出。
  • 单一职责原则是指一个类只应该有一个引起变化的原因。换句话说,一个类应该只有一个职责,只有一个修改的原因,如果有多余一个的原因,就需要对类进行拆分。
  • 为什么使每个类只能有一个职责?
    • 因为每一个职责都是变化的一个轴线。当需求变化时,该变化会反映为类的职责的变化。如果一个类承担了多余一个的职责,那么引起它变化的原因就会有多个。而当一个类承担的职责过多,就等于把这些职责耦合在一起。一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合则会导致脆弱的设计,当变化发生的时候,设计会遭到意想不到的破坏。
  • 优点
    • 如果遵循单一职责原则,可以降低类的复杂度,提高类的可读性和可维护性,变更引起的风险降低。
  • 什么情况下需要把两个职责分开?
    • 依赖于应用程序变化的方式。如果应用程序的变化会影响连接函数的签名,那么这个设计就具有僵化性的臭味。另一方面,如果应用程序的变化方式总是导致这两个职责同时变化,那么就不必分离它们。实际上,分离题目就会具有不必要的复杂性的臭味。在此还有一个推论。变化的轴线仅当变化实际发生时才具有真正的意义。如果没有征兆,那么去应用SRP,或者任何其他原则都是不明智的。
  • 举例:经常写项目的时候都需要写用户的登录和注册,有时图省事就会把注册和登录一块写到User,如下面示例代码1。这个时候User类就有两个职责:登录和注册。这违反了单一职责原则。
    • 示例代码1
      public class User {  
          private String username;  
          private String password;  
            
          public User(String username, String password) {  
              this.username = username;  
              this.password = password;  
          }  
            
          public boolean login() {  
              // 登录逻辑...  
              return true;  
          }  
            
          public void register() {  
              // 注册逻辑...  
          }  
      }
      
    • 根据单一职责原则改进代码,就要把登录和注册的功能分离到两个不同的类中,从而使每个类只负责一个职责
      // User类只负责存储用户信息
      public class User {  
          private String username;  
          private String password;  
            
          public User(String username, String password) {  
              this.username = username;  
              this.password = password;  
          }  
          // getter 和 setter 方法...  
      }
      // 登录
      public class LoginService {  
          private User user;  
            
          public LoginService(User user) {  
              this.user = user;  
          }  
            
          public boolean login() {  
              // 登录逻辑...  
              return true;  
          }  
      }
      // 注册
      public class RegistrationService {  
          private User user;  
            
          public RegistrationService(User user) {  
              this.user = user;  
          }  
            
          public void register() {  
              // 注册逻辑...  
          }  
      }
      
  • 总结分析
    • 什么是职责?在SRP中将职责定义为“变化的原因”。
    • SRP的概念看起来很简单,但是很难正确应用,因为我们在实现功能的时候,总是很容易将一部分职责放在一起,在实现过程中才会慢慢发现自己的代码又违背了SRP。

标签:username,职责,原则,单一,User,password,public,String
From: https://www.cnblogs.com/qq286442936/p/17852768.html

相关文章

  • 项目管理原则绩效域+敏捷原则、价值观
    目录项目管理原则绩效域+敏捷原则、价值观项目管理12大原则8大项目绩效域干系人绩效域团队绩效域开发方法和生命周期绩效域规划绩效域项目工作绩效域交付绩效域测量绩效域不确定性绩效域敏捷12原则敏捷价值观项目管理原则绩效域+敏捷原则、价值观项目管理12大原则1.成为勤勉......
  • 什么是敏捷DEEP原则?
    敏捷开发中的"DEEP"原则代表一组用于评估和管理产品backlog的原则。这些原则有助于确保backlog中的条目清晰、有价值、可执行。"DEEP"是以下四个原则的缩写:DetailedAppropriately(适度详细):产品backlog中的条目在适度的层次上应该被详细描述。这......
  • 什么是敏捷invest原则?
    在敏捷开发中,"INVEST"是一个用于评估和设计用户故事的缩写,代表了一组关键的原则。这些原则有助于确保用户故事(UserStories)具有良好的特性,以便于团队理解、评估和实现。以下是"INVEST"的原则:Independent(独立性):用户故事应该是相互独立的,一个故事的实现......
  • 1.设计原则
    五大设计原则分别为:单一职责原则、开闭原则、里式替换原则、接口隔离原则、依赖反转原则一、单一职责原则最初或者说字面解释:每个模块都应该只做一件事。符合设计层面的描述:任何一个软件模块都应该有且仅有一个被修改的原因。“被修改的原因”可以用用户或者所有者来指代:任何......
  • Quality Engineer 的工作职责和技能需求
    计算机软件质量工程师,或简称为质量工程师,是一个专注于软件开发流程中的质量保证和控制的职位。他们的主要职责是确保软件产品在发布之前满足所有的质量标准和用户需求。工作内容测试计划和测试用例开发:质量工程师需要根据软件的功能和性能需求,编写详细的测试计划和测试用例。......
  • MySQL索引的创建与设计原则
    索引的创建与设计原则1.索引的声明与使用1.1索引的分类MySQL的索引包括普通索引,唯一性索引,全文索引,单列索引,多列索引和空间索引等...。从功能逻辑上说,索引主要有4种,分别是普通索引,唯一索引,主键索引,全文索引。按照物理实现方式,索引分为2种:聚簇索引和非聚簇索引。按照......
  • 软件设计实验15:职责链模式
    实验15:职责链模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解职责链模式的动机,掌握该模式的结构;2、能够利用职责链模式解决实际问题。 [实验任务一]:财务审批某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万......
  • SAP ABAP Basis 从业人员的职责和日常工作内容
    在SAP系统中,ABAP和Basis是两个非常重要的组成部分。ABAP(AdvancedBusinessApplicationProgramming)是SAP的编程语言,用于开发业务逻辑和报表。而Basis是SAP系统的基础架构,包括系统安装、配置、监控、性能优化、故障排查等等。作为一名SAPABAPBasis人员,具体需要承......
  • 设计原则
    主要介绍面向对象六大原则中的单一职责原则(SRP)、开放封闭原则(OCP)、最少知识原则(LKP)。设计原则是指导思想,从思想上给指明程序设计的正确方向,是在开发设计过程中应该尽力遵守的准则。而设计模式是实现手段,因此设计模式也应该遵守这些原则,或者说,设计模式就是这些设计原则的一些具体......
  • 设计模式(十三)职责链
    一、定义避免将一个请求的发送者与接受者耦合在一起,让多个对象都有机会接受请求。将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止。职责链模式是一种行为型模式二、描述职责链可以是一条直线、一个环或者一个树形结构,最常见的职责链是直线型......