"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > مبدأ المسؤولية الفردية

مبدأ المسؤولية الفردية

تم النشر بتاريخ 2024-11-09
تصفح:330

Single Responsibility Principle

يجب أن يتحمل كل مكون برمجي مسؤولية واحدة فقط

يمكن أن يكون مكون البرنامج عبارة عن فئة أو طريقة أو وحدة

على سبيل المثال، سكين الجيش السويسري هي أداة متعددة الأغراض تنتهك مبدأ المسؤولية الفردية لتطوير البرمجيات، وبدلاً من ذلك تعتبر السكين مثالًا جيدًا يتبع المسؤولية الفردية (حيث لا يمكن استخدامها إلا للقطع على عكس سكين الجيش السويسري) التي يمكن استخدامها للقطع، وفتح العلبة، كمفتاح رئيسي، ومقص، وما إلى ذلك)

بما أن التغيير ثابت سواء كان ذلك في العالم الحقيقي أو في تطوير البرمجيات، فإن تعريف مبدأ المسؤولية الفردية يتغير أيضًا وفقًا لذلك

يجب أن يكون لكل مكون برمجي سبب واحد فقط للتغيير


هناك ثلاثة أسباب لحدوث التغيير في الفئة أدناه الموظف

  1. التغيير في سمة الموظف
  2. التغيير في قاعدة البيانات
  3. التغيير في حساب الضريبة
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
        }
    }
}

ملاحظة: تتبع جميع الفئات الثلاثة الآن مبدأ المسؤولية الفردية، وبالتالي تتبع كلا التعريفين

عند إنشاء فئات أو أي مكون برمجي، ضع في اعتبارك: الهدف إلى تحقيق تماسك عالٍ وارتباط فضفاض

يجب أن يكون لكل مكون برمجي مسؤولية واحدة فقط و
يجب أن يكون لكل مكون برمجي سبب واحد فقط للتغيير

بيان الافراج تم نشر هذه المقالة على: https://dev.to/prashantrmishra/single-responsibility-principle-m8n?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3