Ketika mengikuti SOLID, apakah membaca dan menulis file adalah dua tanggung jawab terpisah?

13

Saya baru mulai menjelajahi SOLID dan saya tidak yakin jika membaca dari file dan menulis ke file adalah tanggung jawab yang sama.

Targetnya adalah jenis file yang sama; Saya ingin membaca dan menulis .pdf di aplikasi saya.

Aplikasi ini menggunakan Python jika itu membuat perbedaan.

Layang-layang
sumber

Jawaban:

24

Implementasi membaca dan menulis kemungkinan memiliki kemungkinan tinggi untuk menjadi sangat kohesif. Jika satu akan berubah, demikian juga yang lain. Kohesi tinggi adalah indikasi kuat dari Satu Tanggung Jawab dan Prinsip Tanggung Jawab Tunggal memberi tahu kita bahwa mereka harus disatukan dalam kelas yang sama. Jika operasi-operasi tersebut memiliki kohesi yang rendah, kemungkinan pemisahan itu meningkatkan rawatan.

Namun, jika ada konsumen yang hanya membaca data tanpa menulis, atau hanya menulis tanpa membaca, itu merupakan indikasi bahwa dari perspektif antarmuka Anda harus memisahkan operasi ini, sebagaimana ditentukan oleh Prinsip Segregasi Antarmuka. Ini berarti bahwa konsumen harus mendefinisikan dua antarmuka yang dapat mereka andalkan, sementara Filekelas akan mengimplementasikan kedua antarmuka tersebut.

Steven
sumber
8

Saat Anda menerapkan prinsip SOLID untuk mendesain objek, Anda dapat mempertimbangkan membaca dan menulis file sebagai SATU tanggung jawab - bekerja dengan data persisten

Namun, Anda tidak harus meletakkan membaca dan menulis file dalam metode atau fungsi yang sama.

SergeyLebedev
sumber
5

Sebagian besar jawaban lain tampaknya telah mengabaikan bahwa dalam pertanyaan Anda satu informasi penting hilang - Anda tidak memberi tahu kami jika dan bagaimana dokumen yang akan Anda baca dan tulis terkait!

Apakah aplikasi Anda memiliki sesuatu seperti "objek dokumen" dan menulisnya ke dalam file PDF terlebih dahulu, dan kemudian membaca file yang sama lagi menjadi objek dokumen yang serupa? Atau sebaliknya, itu membaca PDF menjadi dokumen, membuat beberapa modifikasi untuk itu dan menyimpan dokumen yang sama ke PDF baru lagi? Maka membaca dan menulis harus dilihat sebagai satu tanggung jawab. Itu mungkin terjadi jika aplikasi Anda adalah atau mengandung sesuatu seperti komponen "editor PDF", atau "toolkit manipulasi PDF".

Namun, jika satu bagian dari aplikasi Anda membuat beberapa file PDF, misalnya, dalam komponen pelaporan, dan bagian lain yang tidak terkait dari aplikasi Anda membaca PDF yang berbeda (misalnya, evaluator lampiran surat untuk mesin pencari), dan representasi internal dari PDF yang terakhir tidak memiliki kesamaan dengan use case pertama, maka tugas-tugas tersebut adalah tanggung jawab yang berbeda.

Khusus untuk PDF, kasus penggunaan kedua adalah kasus yang saya lihat lebih sering di berbagai jenis aplikasi. Ada lebih banyak perpustakaan / komponen di luar sana yang hanya mendukung pembuatan PDF, dan hanya sejumlah kecil yang mendukung juga membaca PDF. Jika Anda akan menggunakan satu perpustakaan untuk menghasilkan file PDF, dan yang sama sekali berbeda untuk membaca PDF, maka harus jelas bahwa membaca dan menulis PDF akan menjadi tanggung jawab terpisah.

Doc Brown
sumber
Ini mirip dengan jawaban Steven, tetapi memberikan contoh nyata.
DavidS
@ David: Jawaban Steven hanyalah jawaban yang sangat abstrak, tetapi karena OP meminta secara khusus untuk file PDF, saya pikir masuk akal untuk menjawab ini dengan cara yang lebih konkret. Dan untuk PDF, saya tidak setuju dengan kalimat pertama Steven "membaca dan menulis implementasi memiliki probabilitas tinggi untuk menjadi sangat kohesif" - dalam pengalaman saya, untuk kasus penggunaan PDF yang khas, kebalikannya adalah benar (saya juga memberinya upvote).
Doc Brown
Contoh nyata sangat baik. Saya hanya membandingkan untuk analisis. Jawaban bagus!
DavidS
3

Menurut ( Robert C. Martin ) tanggung jawab adalah seperangkat fungsi yang melayani satu aktor tertentu.

Seorang aktor harus menjadi satu-satunya sumber perubahan dari responsabilitas yang diberikan (seharusnya hanya ada satu alasan untuk berubah).

Dalam kasus Anda, pertama-tama Anda harus mendefinisikan aktor sebagai langkah pertama, lalu ajukan pertanyaan:. Apakah ada aktor yang tertarik hanya dengan membaca file dan lainnya dengan menulis?

Jika demikian halnya maka membaca dan menulis file adalah dua tanggung jawab terpisah. Karena akan ada banyak sumber perubahan (banyak aktor mungkin meminta untuk mengubah logika membaca dan hal yang sama untuk menulis).

youness
sumber