يجب أن يتحمل كل مكون برمجي مسؤولية واحدة فقط
يمكن أن يكون مكون البرنامج عبارة عن فئة أو طريقة أو وحدة
على سبيل المثال، سكين الجيش السويسري هي أداة متعددة الأغراض تنتهك مبدأ المسؤولية الفردية لتطوير البرمجيات، وبدلاً من ذلك تعتبر السكين مثالًا جيدًا يتبع المسؤولية الفردية (حيث لا يمكن استخدامها إلا للقطع على عكس سكين الجيش السويسري) التي يمكن استخدامها للقطع، وفتح العلبة، كمفتاح رئيسي، ومقص، وما إلى ذلك)
بما أن التغيير ثابت سواء كان ذلك في العالم الحقيقي أو في تطوير البرمجيات، فإن تعريف مبدأ المسؤولية الفردية يتغير أيضًا وفقًا لذلك
يجب أن يكون لكل مكون برمجي سبب واحد فقط للتغيير
هناك ثلاثة أسباب لحدوث التغيير في الفئة أدناه الموظف
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; } }
نظرًا لأن SRP (مبدأ المسؤولية الفردية) يوصي بـ سبب واحد فقط للتغيير في الفصل، سيتعين علينا إجراء بعض التعديلات في فئة الموظف
التغييرات بواسطة SRP
الآن، هناك سبب واحد فقط لحدوث التغيير في فئة الموظف
سبب التغيير: التغيير في سمة الموظف
/** * 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; } }
أيضًا، هناك سبب واحد فقط لحدوث التغيير في فئة مستودع الموظفين
سبب التغيير: التغيير في قاعدة البيانات
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(); } } }
أخيرًا، هناك سبب واحد فقط لحدوث التغيير في فئة TaxCalculator
سبب التغيير: التغيير في حساب الضريبة
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 } } }
ملاحظة: تتبع جميع الفئات الثلاثة الآن مبدأ المسؤولية الفردية، وبالتالي تتبع كلا التعريفين
عند إنشاء فئات أو أي مكون برمجي، ضع في اعتبارك: الهدف إلى تحقيق تماسك عالٍ وارتباط فضفاض
يجب أن يكون لكل مكون برمجي مسؤولية واحدة فقط و
يجب أن يكون لكل مكون برمجي سبب واحد فقط للتغيير
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3