Apakah SRP (Prinsip Tanggung Jawab Tunggal) objektif?

17

Pertimbangkan dua perancang UI yang ingin mendesain desain "menarik pengguna". "Daya tarik pengguna" adalah konsep yang tidak objektif dan hanya ada di benak para desainer. Jadi desainer A misalnya dapat mengambil warna merah, sementara desainer B mengambil warna biru. Desainer A membuat tata letak yang sepenuhnya berbeda dari desainer B, dan seterusnya.

Saya membaca tentang SRP (Prinsip Tanggung Jawab Tunggal) dan apa yang saya pahami adalah semacam analisis subjektif atau perincian tanggung jawab yang dapat bervariasi dari perancang OO ke perancang OO lainnya. Apakah saya benar? Dengan kata lain, apakah mungkin untuk memiliki dua penganalisa dan perancang berorientasi objek yang sangat baik yang menghasilkan dua desain berbeda untuk satu sistem berdasarkan prinsip SRP?

Saeed Neamati
sumber
4
Saya pikir segala jenis desain (seni, teknik, ...) memiliki keseimbangan antara objektivitas dan subyektivitas - beberapa aturan dan batasan yang jelas, beberapa pengalaman dan penilaian, dan bahkan beberapa pilihan gratis-sebagai-sebagus-sebagus-bebas pilihan masing-masing.
Steve314

Jawaban:

12

Pertanyaan yang bagus dan yang sering saya tanyakan.

Saya akan mengatakan tidak objektif, tidak. Jelas subyektif. Bagaimana Anda mendekati pemecahan masalah tergantung pada filosofi Anda terhadap jenis masalah itu. Ilmu pengetahuan menunjukkan kepada kita bahwa ada banyak cara berbeda untuk menyelesaikan masalah yang sama secara efektif. Ilmu pengetahuan juga menunjukkan kepada kita bahwa orang-orang di benua yang terpisah dapat menghasilkan solusi yang sama secara independen, sehingga beberapa solusi lebih jelas daripada yang lain. Bagaimanapun, menilai solusi dalam hal "terbaik" tergantung pada kriteria Anda.

Sungguh, apa yang mungkin dilihat sebagai dua bagian dari keseluruhan yang sama, yang lain mungkin melihat sebagai dua konsep yang sepenuhnya terpisah. Seseorang melihat ini sepanjang waktu ketika melihat bagaimana pengelola perpustakaan kode yang berbeda mendekati masalah yang sama. Namun kedua solusi bekerja dengan baik.

(PS. Diedit jawaban ini karena pertanyaan terakhir OP menanyakan kebalikan dari judul pertanyaan.)

Insinyur
sumber
5

Prinsip itu sendiri obyektif, tetapi ada begitu banyak cara berbeda untuk menerapkan sesuatu yang mengikuti prinsip tersebut, sehingga dua pengembang independen hampir selalu akan datang dengan desain sistem yang agak berbeda untuk aplikasi yang sama.

Bahkan kemungkinan pengembang yang sama melakukan desain yang sama dua kali, masih akan menghasilkan dua solusi yang setidaknya sebagian berbeda.

Agar suatu prinsip menyebabkan desain sistem selalu terlihat sama, itu harus mencakup setiap aspek keputusan desain. Prinsip tanggung jawab tunggal hanya mencakup sebagian kecil dari keputusan desain yang terlibat dalam membuat desain sistem apa pun.

Guffa
sumber
Analisis yang bagus @Guffa. +1. Saya menyukai gagasan tidak mencakup segalanya. Ya, SRP hanya memberitahu Anda untuk mencoba membuat semuanya bertanggung jawab untuk satu masalah. Tapi itu tidak memberi tahu Anda di mana batas tanggung jawab berada.
Saeed Neamati
2

Penerapan prinsip ini subyektif. Namun, "subyektif" tidak sama dengan "preferensi" seperti halnya estetika.

Jelas ada ekstrem. Kelas dengan tepat satu metode, dengan hanya beberapa baris kode, yang tidak memanggil kelas lain, pasti mengikuti SRP. Di sisi lain, kelas dengan dua metode, satu yang berisi implementasi e-mail lengkap melalui soket mentah dan lainnya yang membangun formulir GUI, jelas tidak mengikuti SRP.

Estetika adalah analogi yang buruk. Analogi yang lebih baik adalah konsep ilmu kopling dan kohesi komputer yang terkenal . Tak satu pun dari ini adalah atribut hitam-putih, benar-atau-salah. Namun, mereka dapat diukur, bahkan jika ada elemen kualitatif. Jika Anda menunjukkan kepada sekelompok pengembang berpengalaman dua desain terpisah untuk fitur yang sama, mereka akan memberikan bacaan serupa yang desainnya memiliki lebih banyak kopling dan / atau kohesi.

Faktanya, SRP pada dasarnya hanyalah kohesi fungsional. Dikatakan bahwa bagian-bagian dari beberapa modul (misalnya kelas) harus dikelompokkan bersama karena mereka semua berkontribusi untuk melakukan fungsi yang sama, dan tanpa alasan lain. "Fungsi" dapat dikenakan interpretasi - beberapa orang dapat menafsirkan ini secara harfiah sebagai deklarasi fungsi tunggal (atau metode atau prosedur) , yang lain mungkin mundur sedikit dan menganggap suatu fungsi sebagai "mengirim email" atau "memainkan musik" , tapi masih ada begitu banyak ruang untuk bermanuver. "Mengelola barang" bukan deskripsi fungsional yang valid.

Aaronaught
sumber
0

Ada definisi objektif tentang "tanggung jawab" sebagai "alasan untuk berubah". Pada saat pemrograman semua alasan untuk berubah terletak di masa depan, sehingga programmer hanya bisa menebak berdasarkan pengalaman dan pengetahuan domain mereka. Jadi menganalisis tanggung jawab adalah semacam perkiraan, sebagian subjektif.

maaartinus
sumber
0

SRP objektif; implementasi bersifat subjektif

dua implementasi dengan fungsionalitas yang sama persis dapat menggunakan struktur internal yang sama sekali berbeda, yang menghasilkan kelas dan metode yang berbeda, dan keduanya dapat memenuhi SRP

jika mereka menggunakan metode dan status yang sama, dan keduanya dinormalisasi (minimal / tidak berkurang) maka secara teori mereka akan berakhir dengan kelas dan metode yang sama di bawah SRP.

tapi saya tidak bisa membuktikannya. Namun.

Steven A. Lowe
sumber