2010-09-15 21 views
6

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

2

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

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

+2

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. –

+0

Đồ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ứ đó. –

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