Không có câu trả lời rõ ràng cho điều đó. Mặc dù câu hỏi hẹp, nhưng lời giải thích không có.
Đối với tôi, nó là thứ gì đó giống như Occam's Razor nếu bạn muốn. Đó là một lý tưởng nơi tôi cố gắng đo mã hiện tại của mình. Thật khó để đóng đinh nó bằng những từ đơn giản và đơn giản. Một phép ẩn dụ khác sẽ là »một chủ đề« mang tính trừu tượng, nghĩa là khó nắm bắt, như »trách nhiệm duy nhất«. Một mô tả thứ ba sẽ là »xử lý một mức độ trừu tượng«.
Điều đó có nghĩa gì thực tế?
Gần đây tôi sử dụng một phong cách mã hóa bao gồm chủ yếu hai giai đoạn:
Giai đoạn I được mô tả tốt nhất là sự hỗn loạn sáng tạo. Trong giai đoạn này tôi viết mã xuống khi những suy nghĩ đang trôi chảy - tức là thô và xấu.
Giai đoạn II là hoàn toàn ngược lại. Nó giống như dọn dẹp sau một cơn bão. Điều này mất nhiều công việc và kỷ luật nhất. Và sau đó tôi nhìn vào mã từ quan điểm của một nhà thiết kế.
Bây giờ tôi đang làm việc chủ yếu bằng Python, điều này cho phép tôi nghĩ về các đối tượng và các lớp sau này. Đầu tiên Giai đoạn I - tôi viết chỉ có chức năng và lây lan cho họ gần như bằng ngẫu nhiên trong module khác nhau. Trong Giai đoạn II , sau khi tôi thực hiện mọi thứ, tôi sẽ xem xét kỹ hơn về mô-đun nào liên quan đến phần nào của giải pháp. Và trong khi lướt qua các mô-đun, chủ đề nổi lên với tôi. Một số chức năng có liên quan theo chủ đề. Đây là những ứng cử viên tốt cho các lớp học . Và sau khi tôi biến các hàm thành các lớp - gần như được thực hiện bằng cách thụt lề và thêm self
vào danh sách tham số trong python;) - Tôi sử dụng SRP
như Occam's Razor để loại bỏ chức năng cho các mô-đun và lớp khác.
Một ví dụ hiện tại có thể là viết chức năng xuất khẩu nhỏ vào ngày khác.
Có nhu cầu về csv , excel và các bảng excel kết hợp trong một zip.
Các chức năng đơn giản được thực hiện trong ba chế độ xem (= chức năng). Mỗi hàm sử dụng một phương thức chung để xác định các bộ lọc và phương thức thứ hai để lấy dữ liệu. Sau đó, trong mỗi chức năng, việc chuẩn bị xuất khẩu đã diễn ra và được gửi dưới dạng Phản hồi từ máy chủ.
Có quá nhiều mức độ trừu tượng lẫn lộn:
I) xử lý yêu cầu / phản hồi đến / đi
II) xác định bộ lọc
III) truy xuất dữ liệu
IV) chuyển đổi dữ liệu
Bước dễ dàng là sử dụng một trừu tượng ( exporter
) để đối phó với các lớp II-IV trong bước đầu tiên.
Điều duy nhất còn lại là chủ đề xử lý các yêu cầu / phản hồi . Ở cùng một mức độ trừu tượng là trích xuất các tham số yêu cầu là được. Vì vậy, tôi đã cho quan điểm này một "trách nhiệm".
Thứ hai, tôi đã phải chia tay nhà xuất khẩu, mà như chúng ta thấy bao gồm ít nhất ba lớp trừu tượng khác.
Xác định tiêu chí lọc và thực tế retrival gần trên cùng một mức độ trừu tượng (các bộ lọc là cần thiết để có được những tập hợp con bên phải của dữ liệu). Các cấp độ này đã được đưa vào một cái gì đó giống như một lớp truy cập dữ liệu .
Trong bước tiếp theo, tôi đã tách các cơ chế xuất thực tế ra: Khi cần ghi vào tệp tạm thời, tôi đã chia nó thành hai "trách nhiệm": một cho việc ghi dữ liệu thực tế vào đĩa và một phần khác xử lý định dạng thực.
Cùng với sự hình thành của các lớp và mô-đun, mọi thứ trở nên rõ ràng hơn, những gì thuộc về nơi. Và luôn luôn là câu hỏi tiềm ẩn, cho dù lớp học làm quá nhiều .
Làm thế nào để bạn xác định trách nhiệm mà mỗi lớp nên có và làm thế nào để bạn xác định trách nhiệm trong bối cảnh của SRP?
Thật khó để đưa ra một công thức để làm theo. Tất nhiên tôi có thể lặp lại mật mã »một mức độ trừu tượng« - quy tắc nếu điều đó có ích.
Chủ yếu đối với tôi đó là một loại "trực giác nghệ thuật" dẫn đến thiết kế hiện tại; Tôi mô hình mã như một nghệ sĩ có thể điêu khắc đất sét hoặc vẽ tranh.
Hãy tưởng tượng tôi là một Mã hóa Bob Ross ;)