2009-04-02 26 views
5

SRP (PDF phiên bản; HTML phiên bản) cho rằngKhi nào bạn vi phạm SRP (Nguyên tắc Reponsibility duy nhất)?

Không bao giờ nên có nhiều hơn một lý do cho một lớp học để thay đổi

Khi bạn hãy nhìn vào Outlook, cửa sổ Lịch sự kiện , nút "Lưu Đóng".

alt text

Vì vậy, khi các chức năng của một trong hai hoặc cả hai Lưu hoặc Đóng thay đổi, nút đó nên thay đổi. Nó rõ ràng vi phạm SRP.

Chức năng này vừa tiết kiệm thời gian vừa thuận lợi vì đó là điều mà hầu hết người dùng mong đợi để thực hiện khi họ lưu một cuộc hẹn trên lịch.

Nhưng bây giờ, câu hỏi của tôi là, khi khác bạn có vi phạm SRP không khi tính năng cần phải có giá trị trong Outlook?

+0

Cái gì? Nút thay đổi khi Lưu hoặc Đóng thay đổi như thế nào? Bạn nghĩ lớp học nào sẽ lưu và đóng? Làm thế nào để thay đổi các chức năng đó có tác động đến nút? –

+0

Điều tôi muốn nói là "thay đổi" là khi thực hiện cơ bản các thay đổi "lưu" hoặc "đóng"; Không phải khi giao diện người dùng của nút phải thay đổi. – Sung

+0

Ví dụ không hợp lệ. Hàm có mã của nút có một _sequence_ của hai hành động: "Save()" và "Close()". Điều này không vi phạm bất cứ điều gì. Bất kỳ hàm nào cũng có thể là một chuỗi, một sự lặp lại hoặc một sự lựa chọn. –

Trả lời

19

SRP không áp dụng cho giao diện người dùng. Hãy nhớ rằng mặc dù nút được gọi là "Lưu và Đóng" có thể chắc chắn là hai phương pháp hoặc loại riêng biệt để xử lý chức năng lưu và đóng. Nút chỉ đơn giản là liên kết hai phần chức năng riêng biệt với nhau.

Nếu bạn cảm thấy cần phải vi phạm SRP thì bạn cần phải đánh giá lại cách tiếp cận của mình. Bất kỳ vi phạm SRP nào cũng có thể được tái cấu trúc thành một phương thức hoặc loại mới để lộ hàm tổng hợp bằng phương tiện của thành phần của hai phần.

+1

Thực ra, nó cũng áp dụng cho giao diện người dùng. Nhưng ví dụ này cho thấy một điều UI được thực hiện bởi một số điều khiển và/hoặc mô hình những thứ dưới mui xe. Câu hỏi sẽ làm thay đổi giao diện người dùng bằng các thay đổi về Mô hình/Kiểm soát; mà không có ý nghĩa nhiều - mỗi được xây dựng sau SRP. –

+0

Có, tôi đồng ý với bạn. Sau khi đọc lại câu đầu tiên của tôi, tôi nhận ra rằng tôi thực tế là không chính xác. Tôi nghĩ rằng tôi sẽ để nó ở đó vì bình luận của bạn sẽ không có ý nghĩa gì nhiều nếu tôi xóa nó đi. Tôi đánh giá cao nhận xét của bạn và tôi không muốn nó xuất hiện ngoài ngữ cảnh.:) –

+0

@Andrew: Theo nhận xét của bạn, bạn có nghĩa là, SRP không bao giờ nên (vi phạm sai sự lựa chọn từ) bị vi phạm và nếu nó bị vi phạm, cấu trúc mã cần thay đổi? – Sung

Các vấn đề liên quan