Tôi có giao diện cho Đăng ký ứng dụng khách gọi là IRegistrationService. Điều này chứa một phương thức được gọi là Đăng ký và nó được thực hiện thông qua lớp RegistrationService. Nếu tôi muốn có các phương thức cho Xóa, Cập nhật, Lấy ví dụ, tôi sẽ tạo một giao diện riêng cho mỗi hành động như IDeletionService, IUpdateService, IRetrieveService hoặc chỉ cần đặt tất cả các phương thức vào IRegistrationService. Lý do tôi hỏi điều này là bởi vì đây là những nguyên tắc SOLID đặc biệt là nguyên tắc SRP dường như yêu cầu.Tôi nhận được mức độ chi tiết như thế nào với thiết kế lớp học khi cố gắng tuân theo các nguyên tắc SOLID?
Trả lời
Một cách để nêu rõ Nguyên tắc về trách nhiệm duy nhất là lớp học chỉ nên có một lý do để thay đổi. Điều đó không nhất thiết có nghĩa là nó chỉ làm một điều, mà đúng hơn là nó chỉ đề cập đến một phạm vi trách nhiệm.
Vì vậy, dịch vụ đăng ký của bạn là tốt để biết tất cả về những người đã đăng ký và tôi muốn xóa, cập nhật, truy xuất đăng ký trong đó. Nếu quá trình đăng ký thay đổi (ví dụ: bạn quyết định rằng tất cả người dùng mới hoặc người dùng được cập nhật sẽ nhận được email) so với thay đổi của lớp học. Tuy nhiên, chi tiết triển khai về cách email đăng ký được gửi không thuộc về dịch vụ này - đó sẽ là lý do thứ hai mà lớp học có thể thay đổi (ví dụ: bạn nhận ra mình muốn gửi email qua máy chủ SMTP bên ngoài thay vì cục bộ hoặc qua SMS thay vì email, v.v.).
- 1. Làm thế nào để thực hành nguyên tắc SOLID của thiết kế OOP?
- 2. Nhận mức độ chi tiết của giao diện
- 3. Các mẫu để thực hiện các nguyên tắc SOLID
- 4. Khi đánh giá thiết kế, bạn đánh giá mức độ phức tạp như thế nào?
- 5. Các sự cố khi cố gắng tạo hình học gradle
- 6. Tôi làm cách nào để mã xử lý ngoại lệ tuân theo nguyên tắc DRY?
- 7. Nguyên tắc thiết kế sau std :: ratio <>
- 8. Nó được gọi là gì khi mọi người cố gắng lạm dụng các mẫu thiết kế?
- 9. Tôi nhận được LNK2028 khi cố gắng bọc lớp gốc C++ sử dụng managed C++
- 10. Bản thiết kế chi tiết sử dụng thích hợp
- 11. Phát triển theo hướng thử nghiệm và Nguyên tắc mở/đóng hoạt động cùng nhau như thế nào?
- 12. CQRS - Nếu một lệnh cố gắng tạo một thực thể chi tiết tổng thể "phức tạp"?
- 13. Chọn hai hàng tuân theo quy tắc
- 14. Tại sao tôi nhận được một StringIndexOutOfBoundsException khi tôi cố gắng thay thế `\\` bằng `\`?
- 15. Selenium.WebDriver - Tôi nhận được lỗi khi tôi cố gắng chạy thử nghiệm của tôi trong Chrome
- 16. Làm lớp này thực hiện theo nguyên tắc phụ thuộc Inversion
- 17. Tại sao Hibernate cố gắng xóa khi tôi cố gắng cập nhật/chèn?
- 18. Thông báo lỗi chi tiết nên như thế nào?
- 19. Làm thế nào để sử dụng LeDeviceListAdapter khi cố gắng tìm các thiết bị BLE?
- 20. Thử nghiệm chấp nhận khách hàng chi tiết như thế nào?
- 21. Theo dõi các lớp học tiện ích
- 22. Các dự án nguồn mở chứng minh các nguyên tắc TDD và SOLID
- 23. Làm thế nào tôi có thể thiết lập mức độ chính xác cho bignum của Perl?
- 24. Tại sao tôi nhận được một ImportError khi tôi cố gắng chạy Kim tự tháp?
- 25. Khi tôi cố gắng chạy vim trong dòng lệnh tôi nhận được lỗi Python
- 26. Tại sao tôi nhận được lỗi về lớp học của tôi xác định __slots__ khi cố gắng chọn một đối tượng?
- 27. Thiết kế phần mềm ở mức độ phức tạp?
- 28. HTML5 Boilerplate với css kế hoạch chi tiết
- 29. Tại sao lớp học của tôi không được chấp nhận
- 30. Nhận được nhiều hơn "chi tiết" từ MVC Mini Profiler
Vì vậy, tắt câu trả lời của bạn, Đăng ký gói gọn các phương thức RegisterUser, DeleteUser, UpdateUser, nhưng nếu tôi muốn gửi thông báo cho người dùng thông qua Email hoặc Sms, tôi có lẽ nên có một lớp khác được gọi là UserNotifications xử lý tin nhắn. Tôi có hiểu bạn đúng không? Một điều bạn nói rằng vẫn còn ném tôi ra là lớp học không làm một điều, nó đề với một lĩnh vực trách nhiệm. Ý của bạn là gì? Bạn có một ví dụ? Cảm ơn – Xaisoft
Hầu hết các nguyên tắc SOLID là khá cụ thể, nhưng SRP là hơi chủ quan. Ý kiến của các nhà phát triển có khả năng có thể khác nhau về những gì cấu thành một trách nhiệm duy nhất, hoặc như JacobM đã đặt nó, một "quả cầu" của trách nhiệm. Điều đó nói rằng, tôi tin rằng sự hiểu biết của bạn là chính xác dựa trên ví dụ UserNotifications bạn đưa ra. Có lẽ SRP có thể được giải thích tốt nhất bằng cách suy nghĩ về một hành vi vi phạm rõ ràng: Một lớp cung cấp các phương thức để đăng ký khách hàng, tính toán lãi suất thế chấp của họ và thông báo cho họ biết họ có thực hiện thanh toán trễ hay không. –
Đồng ý rằng việc xác định một phạm vi trách nhiệm có thể khó khăn. Và đồng ý rằng thông báo người dùng sẽ là một lớp riêng biệt. Một cách để suy nghĩ về nó là suy nghĩ về loại cuộc trò chuyện bạn sẽ có khi tìm ra cách một lớp nên hoạt động. Bạn sẽ có một loại cuộc trò chuyện (có thể với khách hàng của bạn) để suy nghĩ về những thay đổi đối với quá trình đăng ký và một cuộc trò chuyện khác với người khác để tìm ra, trình điều khiển cơ sở dữ liệu nào sử dụng để kết nối khi đăng ký. Một lớp duy nhất không nên biết về cả hai thứ đó. –