2010-02-19 30 views
5

Tôi đang cố gắng hiểu trách nhiệm thực sự là gì vì vậy tôi muốn sử dụng ví dụ về điều tôi hiện đang làm việc. Tôi có một ứng dụng nhập thông tin sản phẩm từ một hệ thống này sang hệ thống khác. Người dùng ứng dụng sẽ chọn các cài đặt khác nhau cho các trường sản phẩm trong một hệ thống muốn sử dụng trong hệ thống khác.Giúp hiểu Nguyên tắc Trách nhiệm Duy nhất

Vì vậy, tôi có một lớp, nói ProductImporter và trách nhiệm của nó là nhập sản phẩm. Lớp này lớn, có lẽ quá lớn.

Các phương pháp trong lớp này rất phức tạp và ví dụ, getDescription. Phương pháp này không chỉ đơn giản là lấy một mô tả từ hệ thống khác nhưng đặt mô tả sản phẩm dựa trên các cài đặt khác nhau do người dùng đặt. Nếu tôi đã thêm một thiết lập và một cách mới để có được một mô tả, lớp này có thể thay đổi.

Vì vậy, đó là hai trách nhiệm? Có một trong đó nhập khẩu sản phẩm và một trong đó được một mô tả. Có vẻ như theo cách này, hầu như mọi phương pháp tôi có trong lớp riêng của nó và dường như quá mức cần thiết.

Tôi thực sự cần một mô tả tốt về nguyên tắc này bởi vì thật khó để tôi hoàn toàn hiểu được. Tôi không muốn sự phức tạp không cần thiết.

Trả lời

3

'Trách nhiệm' được xác định trong nguyên tắc này là lý do để thay đổi. Trong trường hợp này, trách nhiệm duy nhất của lớp học của bạn là nhập sản phẩm. Nếu cách nhập sản phẩm thay đổi thì lớp sẽ thay đổi.

Mục đích là tránh những thứ khác nhau thay đổi cùng một lớp cùng một lúc. Ví dụ, nếu lớp nhập khẩu sản phẩm của bạn cũng định nghĩa định dạng đầu ra của nó, thì nó sẽ có hai trách nhiệm, vì khả năng định dạng đầu ra hoàn toàn không liên quan đến cơ chế nhập dữ liệu.

Bây giờ, lớp đó rất lớn và getDescription() cũng đặt mô tả không phải là vi phạm trực tiếp SRP, mà là các nguyên tắc khác nhau. Cụ thể, bạn nên tránh có các lớp học lớn (cho thấy thiếu thiết kế) và mỗi phương pháp nên làm một điều duy nhất (đó sẽ là một phiên bản cụ thể hơn của SRP.)

+0

Nó "Cho thấy thiếu thiết kế" - Đây là vấn đề mà tôi không chắc chắn làm thế nào để sửa chữa. Nếu phương pháp mô tả thuộc về lớp và tôi phải tính đến từng biến thể tùy thuộc vào các cài đặt khác nhau, bạn có thể thiết kế nó theo cách nào khác. Tôi không thấy cách nào khác. – user204588

+0

Bạn có thể có một lớp Mô tả, người chịu trách nhiệm xử lý biến thể. Và cứ như vậy, khi một trách nhiệm duy nhất là quá lớn, hãy phân chia nó thành những trách nhiệm nhỏ hơn. –

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