Khi theo RẮN, việc đọc và ghi tệp có hai trách nhiệm riêng biệt?


13

Tôi mới bắt đầu khám phá RẮN và tôi không chắc chắn nếu đọc từ tệp và ghi vào tệp có cùng trách nhiệm hay không.

Mục tiêu là cùng loại tệp; Tôi muốn đọc và viết .pdf trong ứng dụng của mình.

Ứng dụng này là trong Python nếu điều đó làm cho bất kỳ sự khác biệt.

Câu trả lời:


24

Việc thực hiện đọc và viết có khả năng cao là có tính gắn kết cao. Nếu một người sẽ thay đổi, thì người khác cũng vậy. Sự gắn kết cao là một dấu hiệu mạnh mẽ của một Trách nhiệm duy nhất và Nguyên tắc Trách nhiệm duy nhất cho chúng ta biết rằng chúng nên được đặt cùng một lớp. Nếu các hoạt động đó có độ gắn kết thấp, nhiều khả năng việc chia tách chúng sẽ cải thiện khả năng bảo trì.

Tuy nhiên, nếu có những người tiêu dùng chỉ đọc dữ liệu mà không viết hoặc chỉ viết mà không đọc, thì đó là một dấu hiệu cho thấy từ góc độ giao diện, bạn nên tách các hoạt động này, theo quy định của Nguyên tắc phân chia giao diện. Điều này có nghĩa là người tiêu dùng nên định nghĩa hai giao diện mà họ có thể phụ thuộc, trong khi Filelớp sẽ thực hiện cả hai giao diện.


8

Khi bạn áp dụng nguyên tắc RẮN để thiết kế một đối tượng, bạn có thể coi việc đọc và ghi tệp là MỘT trách nhiệm - làm việc với dữ liệu liên tục

Tuy nhiên, bạn không nên đặt đọc và ghi tệp trong cùng một phương thức hoặc chức năng.


5

Hầu hết các câu trả lời khác dường như đã bỏ qua rằng trong câu hỏi của bạn, một phần thông tin quan trọng bị thiếu - bạn đã không cho chúng tôi biết các tài liệu bạn sẽ đọc và viết có liên quan như thế nào!

Có phải ứng dụng của bạn có một cái gì đó giống như một "đối tượng tài liệu" và ghi nó vào một tệp PDF trước, sau đó sau đó đọc lại cùng một tệp vào một đối tượng tài liệu tương tự? Hoặc ngược lại, nó đọc các tệp PDF thành một tài liệu, thực hiện một số sửa đổi cho nó và lưu lại cùng một tài liệu đó vào một tệp PDF mới? Sau đó đọc và viết nên được coi là một trách nhiệm. Đó có thể là trường hợp nếu ứng dụng của bạn có hoặc chứa một cái gì đó như thành phần "trình soạn thảo PDF" hoặc "bộ công cụ thao tác PDF".

Tuy nhiên, nếu một phần trong ứng dụng của bạn tạo một số tệp PDF, ví dụ, trong thành phần báo cáo và một phần không liên quan khác trong ứng dụng của bạn sẽ đọc các tệp PDF khác nhau (ví dụ: trình đánh giá tệp đính kèm thư cho công cụ tìm kiếm) và biểu diễn bên trong của các tệp PDF sau này không có gì chung với trường hợp sử dụng đầu tiên, sau đó các tác vụ đó là các trách nhiệm khác nhau.

Đặc biệt đối với PDF, trường hợp sử dụng thứ hai đó là trường hợp mà tôi đã thấy thường xuyên hơn trong các loại ứng dụng khác nhau. Có rất nhiều thư viện / thành phần ngoài đó chỉ hỗ trợ tạo PDF và chỉ có một số lượng nhỏ hơn hỗ trợ đọc PDF. Nếu bạn định sử dụng một thư viện để tạo các tệp PDF và một thư viện hoàn toàn khác để đọc các tệp PDF, thì rõ ràng việc đọc và viết PDF sẽ là trách nhiệm riêng biệt.


Điều này tương tự như câu trả lời của Steven, nhưng nó cung cấp một ví dụ cụ thể.
DavidS

@DavidS: Câu trả lời của Steven chỉ là một câu rất trừu tượng, nhưng vì OP đã hỏi cụ thể về các tệp PDF, tôi nghĩ rằng sẽ có ý nghĩa khi trả lời câu hỏi này một cách cụ thể hơn. Và đối với PDF, tôi không đồng ý với câu đầu tiên của Steven "việc thực hiện đọc và viết có xác suất cao về tính gắn kết" - theo kinh nghiệm của tôi, đối với các trường hợp sử dụng PDF điển hình, điều ngược lại là đúng (tôi cũng đưa cho anh ta một upvote).
Doc Brown

Ví dụ cụ thể là tuyệt vời. Tôi chỉ so sánh để phân tích. Câu trả lời chính xác!
DavidS

3

Theo ( Robert C. Martin ), trách nhiệm là một tập hợp các chức năng phục vụ một diễn viên cụ thể.

Một tác nhân nên là nguồn thay đổi duy nhất của khả năng đáp ứng nhất định (chỉ nên có một lý do để thay đổi).

Trong trường hợp của bạn, trước tiên bạn nên xác định các tác nhân là bước đầu tiên, sau đó đặt câu hỏi :. Có những diễn viên chỉ quan tâm bằng cách đọc các tập tin và khác bằng cách viết?

Nếu đó là trường hợp thì đọc và viết các tập tin là hai trách nhiệm riêng biệt. Bởi vì sẽ có nhiều nguồn thay đổi (nhiều diễn viên có thể yêu cầu thay đổi logic đọc và điều tương tự để viết).

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.