Là SRP (Nguyên tắc trách nhiệm duy nhất)?


17

Hãy xem xét hai nhà thiết kế UI muốn thiết kế các thiết kế "hấp dẫn người dùng". "Thu hút người dùng" là một khái niệm không khách quan và chỉ nằm trong suy nghĩ của các nhà thiết kế. Do đó, nhà thiết kế A có thể lấy màu đỏ, trong khi nhà thiết kế B chọn màu xanh lam. Nhà thiết kế A tạo ra một bố cục hoàn toàn khác với nhà thiết kế B, v.v.

Tôi đã đọc về SRP (Nguyên tắc trách nhiệm duy nhất) và những gì tôi hiểu là loại phân tích chủ quan hoặc phân tích trách nhiệm có thể thay đổi từ một nhà thiết kế OO sang một nhà thiết kế OO khác. Tôi có đúng không Nói cách khác, có thể có hai nhà phân tích và nhà thiết kế hướng đối tượng xuất sắc đưa ra hai thiết kế khác nhau cho một hệ thống dựa trên hiệu trưởng SRP không?


4
Tôi nghĩ rằng bất kỳ loại thiết kế nào (nghệ thuật, kỹ thuật, ...) đều có sự cân bằng giữa tính khách quan và tính chủ quan - một số quy tắc và ràng buộc rõ ràng, một số lời kêu gọi kinh nghiệm và phán đoán, và thậm chí một số tùy chọn hoàn toàn miễn phí hoàn toàn miễn phí mỗi lựa chọn khác.
Steve314

Câu trả lời:


12

Một câu hỏi hay và tôi thường sử dụng.

Tôi sẽ nói không khách quan, không. Chắc chắn chủ quan. Cách bạn tiếp cận phá vỡ các vấn đề phụ thuộc vào triết lý của bạn đối với loại vấn đề đó. Khoa học cho chúng ta thấy rằng có thể có nhiều cách khác nhau để giải quyết cùng một vấn đề một cách hiệu quả. Khoa học cũng cho chúng ta thấy rằng mọi người ở các châu lục cách nhau có thể đưa ra các giải pháp tương tự một cách độc lập, và vì vậy một số giải pháp rõ ràng hơn các giải pháp khác. Trong mọi trường hợp, việc đánh giá các giải pháp theo cách "tốt nhất" phụ thuộc vào tiêu chí của bạn.

Thực sự, những gì người ta có thể xem là hai phần của cùng một tổng thể, phần khác có thể xem là hai khái niệm hoàn toàn riêng biệt. Người ta thấy điều này mọi lúc khi nhìn vào cách các nhà bảo trì của các thư viện mã khác nhau tiếp cận cùng một vấn đề. Nhưng cả hai giải pháp đều hoạt động tốt.

(PS. Đã chỉnh sửa câu trả lời này khi câu hỏi cuối cùng của OP hỏi ngược lại với tiêu đề câu hỏi.)


5

Nguyên tắc này là khách quan, nhưng có rất nhiều cách khác nhau để thực hiện một cái gì đó tuân theo nguyên tắc, rằng hai nhà phát triển độc lập sẽ hầu như luôn đưa ra các thiết kế hệ thống khá khác nhau cho cùng một ứng dụng.

Thậm chí có khả năng cùng một nhà phát triển thực hiện cùng một thiết kế hai lần, vẫn sẽ đưa ra hai giải pháp ít nhất khác nhau một phần.

Để một nguyên tắc làm cho các thiết kế hệ thống luôn trông giống nhau, nó sẽ phải bao gồm mọi khía cạnh của các quyết định thiết kế. Hiệu trưởng trách nhiệm duy nhất chỉ bao gồm một phần nhỏ trong các quyết định thiết kế liên quan đến việc thực hiện bất kỳ thiết kế hệ thống nào.


Phân tích tốt @Guffa. +1. Tôi thích ý tưởng không bao gồm tất cả. Vâng, SRP chỉ bảo bạn cố gắng làm mọi thứ chịu trách nhiệm cho một vấn đề. Nhưng nó không cho bạn biết ranh giới trách nhiệm ở đâu.
Saeed Neamati

2

Việc áp dụng nguyên tắc là chủ quan. Tuy nhiên, "chủ quan" không tương đương với "ưu tiên" giống như cách thẩm mỹ làm.

Có những thái cực rõ ràng. Một lớp có chính xác một phương thức, chỉ có một vài dòng mã, không gọi ra bất kỳ lớp nào khác, chắc chắn tuân theo SRP. Mặt khác, một lớp có hai phương thức, một phương thức chứa triển khai e-mail hoàn chỉnh thông qua các ổ cắm thô và một phương thức xây dựng biểu mẫu GUI, chắc chắn không tuân theo SRP.

Thẩm mỹ là một tương tự kém. Một sự tương tự tốt hơn sẽ là các khái niệm khoa học máy tính nổi tiếng về khớp nốisự gắn kết . Cả hai thuộc tính này đều là đen và trắng, đúng hoặc sai. Tuy nhiên, chúng thể đo lường được, ngay cả khi có yếu tố định tính. Nếu bạn hiển thị một nhóm các nhà phát triển có kinh nghiệm hai thiết kế riêng biệt cho cùng một tính năng, họ sẽ đưa ra các bài đọc tương tự về thiết kế nào có nhiều khớp nối và / hoặc sự gắn kết.

Trong thực tế, SRP về cơ bản chỉ là sự gắn kết chức năng. Nó nói rằng các phần của một số mô-đun (ví dụ: lớp) nên được nhóm lại với nhau vì tất cả chúng đều góp phần thực hiện cùng chức năng và không vì lý do nào khác. "Chức năng" có thể bị giải thích - một số người có thể hiểu điều này theo nghĩa đen là một tuyên bố chức năng (hoặc phương thức hoặc thủ tục) , những người khác có thể lùi lại một chút và nghĩ về một chức năng là "gửi e-mail" hoặc "phát nhạc" , nhưng vẫn còn rất nhiều chỗ để điều động. "Quản lý công cụ" không phải là một mô tả chức năng hợp lệ.


0

Có một định nghĩa khách quan về "trách nhiệm" là "lý do để thay đổi". Trong thời gian lập trình tất cả các lý do để thay đổi nằm trong tương lai, vì vậy lập trình viên chỉ có thể đoán dựa trên kinh nghiệm và kiến ​​thức tên miền của họ. Vì vậy, phân tích trách nhiệm là một loại dự báo, một phần chủ quan.


0

SRP là khách quan; thực hiện là chủ quan

hai triển khai có cùng chức năng chính xác có thể sử dụng các cấu trúc bên trong hoàn toàn khác nhau, dẫn đến các lớp và phương thức khác nhau và cả hai đều có thể đáp ứng SRP

nếu họ sử dụng cùng một phương thức và trạng thái, và cả hai đều được chuẩn hóa (tối thiểu / không cần thiết) thì về mặt lý thuyết - họ sẽ kết thúc với cùng các lớp và phương thức theo SRP.

nhưng tôi không thể chứng minh điều đó. Chưa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.