Wikipedia nói
"các thực thể phần mềm (lớp, mô-đun, chức năng, v.v.) nên được mở để mở rộng, nhưng đóng để sửa đổi"
Từ hàm lọt vào mắt tôi và bây giờ tôi tự hỏi liệu chúng ta có thể cho rằng việc tạo quá tải cho một phương thức có thể được coi là một ví dụ về nguyên tắc Mở / đóng hay không?
Hãy để tôi giải thích một ví dụ. Hãy xem xét rằng bạn có một phương thức trong lớp dịch vụ của mình, được sử dụng ở gần 1000 địa điểm. Phương thức được userId và xác định xem người dùng có phải là quản trị viên hay không:
bool IsAdmin(userId)
Bây giờ hãy xem xét rằng ở đâu đó cần xác định xem người dùng có phải là quản trị viên hay không, dựa trên tên người dùng, không phải userId. Nếu chúng tôi thay đổi chữ ký của phương thức đã đề cập ở trên, thì chúng tôi đã bị hỏng mã ở 1000 vị trí (các chức năng nên được đóng lại để sửa đổi). Do đó, chúng ta có thể tạo quá tải để lấy tên người dùng, tìm userId dựa trên tên người dùng và phương thức ban đầu:
public bool IsAdmin(string username)
{
int userId = UserManager.GetUser(username).Id;
return IsAdmin(userId);
}
Bằng cách này, chúng tôi đã mở rộng chức năng của mình thông qua việc tạo quá tải cho nó (các chức năng nên được mở để mở rộng).
Đây có phải là một ví dụ nguyên tắc mở / đóng?