Cada componente de software debe tener una sola responsabilidad
El componente de software puede ser clase, método o módulo
Ejemplo, una navaja suiza es una herramienta multipropósito que viola el principio de responsabilidad única del desarrollo de software; en cambio, una navaja es un buen ejemplo que sigue la responsabilidad única (ya que solo se puede usar para cortar, a diferencia de la navaja suiza). que puede usarse para cortar, abrir latas, como llave maestra, tijeras,etc)
Dado que el cambio es constante ya sea en el mundo real o en el desarrollo de software, la definición del Principio de Responsabilidad Única también cambia en consecuencia
Cada componente de software debe tener una y solo una razón para cambiar
Hay tres razones por las cuales se pueden producir cambios en la siguiente clase Empleado
import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; /** * Employee class has details of employee * This class is responsible for saving employee details, getting tax of * employee and getting * details of employee like name, id, address, contact, etc. */ public class Employee { private String employeeId; private String employeeName; private String employeeAddress; private String contactNumber; private String employeeType; public void save() { String insert = MyUtil.serializeIntoString(this); Connection connection = null; Statement statement = null; try { Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection("jdbc://mysql://localhost:8080/MyDb", "root", "password"); statement = connection.createStatement(); statement.execute("insert into employee values (" insert ")"); } catch (Exception e) { e.printStackTrace(); } } public void calculateTax() { if (this.getEmployeeType().equals("fulltime")) { // tax calculation for full time employee } else if (this.getEmployeeType().equals("contract")) { // tax calculation for contract type employee } } public String getEmployeeId() { return employeeId; } public void setEmployeeId(String employeeId) { this.employeeId = employeeId; } public String getEmployeeName() { return employeeName; } public void setEmployeeName(String employeeName) { this.employeeName = employeeName; } public String getEmployeeAddress() { return employeeAddress; } public void setEmployeeAddress(String employeeAddress) { this.employeeAddress = employeeAddress; } public String getContactNumber() { return contactNumber; } public void setContactNumber(String contactNumber) { this.contactNumber = contactNumber; } public String getEmployeeType() { return employeeType; } public void setEmployeeType(String employeeType) { this.employeeType = employeeType; } }
Dado que el SRP (Principio de Responsabilidad Única) recomienda solo un motivo de cambio en la clase, tendremos que hacer algunas modificaciones en la clase Empleado
Cambios por SRP
Ahora, solo hay una razón por la cual se puede producir un cambio en la clase Empleado
Motivo del cambio: Cambio en el atributo del empleado
/** * Employee class has details of employee */ public class Employee { private String employeeId; private String employeeName; private String employeeAddress; private String contactNumber; private String employeeType; public void save() { new EmployeeRepository().save(this); } public void calculateTax() { new TaxCalculator().calculateTax(this); } public String getEmployeeId() { return employeeId; } public void setEmployeeId(String employeeId) { this.employeeId = employeeId; } public String getEmployeeName() { return employeeName; } public void setEmployeeName(String employeeName) { this.employeeName = employeeName; } public String getEmployeeAddress() { return employeeAddress; } public void setEmployeeAddress(String employeeAddress) { this.employeeAddress = employeeAddress; } public String getContactNumber() { return contactNumber; } public void setContactNumber(String contactNumber) { this.contactNumber = contactNumber; } public String getEmployeeType() { return employeeType; } public void setEmployeeType(String employeeType) { this.employeeType = employeeType; } }
Además, solo hay una razón por la cual se puede producir un cambio en la clase EmployeeRepository
Motivo del cambio: Cambio en la base de datos
import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class EmployeeRepository { public void save(Employee employee) { String insert = MyUtil.serializeIntoString(employee); Connection connection = null; Statement statement = null; try { Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection("jdbc://mysql://localhost:8080/MyDb", "root", "password"); statement = connection.createStatement(); statement.execute("insert into employee values (" insert ")"); } catch (Exception e) { e.printStackTrace(); } } }
Finalmente, solo hay una razón por la cual se puede producir un cambio en la clase TaxCalculator
Motivo del cambio: Cambio en el cálculo del impuesto
public class TaxCalculator { public void calculateTax(Employee employee) { if (employee.getEmployeeType().equals("fulltime")) { // tax calculation for full time employee } else if (employee.getEmployeeType().equals("contract")) { // tax calculation for contract type employee } } }
Nota: Las 3 clases ahora siguen el principio de responsabilidad única, por lo que siguen ambas definiciones
Al crear clases o cualquier componente de software, tenga en cuenta: Apunte a una alta cohesión y un acoplamiento flexible
Cada componente de software debe tener una sola responsabilidad y
Cada componente de software debe tener una y solo una razón para cambiar
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3