it-swarm-id.com

Bagaimana Anda menjelaskan Pemisahan Kekhawatiran kepada orang lain?

Jika Anda memiliki kolega yang tidak memahami manfaat Separation of Concerns, atau tidak cukup memahaminya untuk diterapkan secara konsisten dalam pekerjaan sehari-hari mereka, bagaimana Anda menjelaskannya kepada mereka?

37
Marcie

Bayangkan Anda memiliki program yang telah dirilis. Seorang pelanggan datang dan menawarkan untuk membayar Anda untuk peningkatan ke salah satu fitur-fiturnya. Untuk mendapatkan uang, Anda perlu mengubah program Anda untuk menambahkan fitur baru. Beberapa hal yang akan mempengaruhi apa margin keuntungan Anda adalah:

  1. berapa banyak kode yang harus Anda ubah
  2. betapa mudahnya melakukan perubahan
  3. seberapa besar kemungkinan Anda memecah fitur yang ada yang sedang digunakan oleh pelanggan lain
  4. seberapa banyak Anda dapat menggunakan kembali model/arsitektur yang ada

Pemisahan masalah membantu Anda mendapatkan lebih banyak jawaban positif untuk pertanyaan-pertanyaan ini.

  1. jika semua kode untuk perilaku tertentu dari aplikasi dipisahkan, maka Anda hanya perlu mengubah kode yang terkait langsung dengan fitur baru Anda. Kode mana yang harus diubah lebih sedikit.
  2. jika perilaku yang Anda minati dipisahkan dengan rapi dari sisa aplikasi, kemungkinan besar Anda akan dapat bertukar dalam implementasi baru tanpa harus sepenuhnya memahami atau memanipulasi sisa program. Seharusnya juga lebih mudah untuk mengetahui kode mana yang perlu Anda ubah.
  3. Kode yang tidak harus Anda ubah cenderung lebih kecil daripada kode yang Anda ubah. Jadi memecah kekhawatiran membantu Anda untuk menghindari kerusakan pada fitur yang tidak terkait dengan mencegah Anda dari harus mengubah kode yang dapat mereka panggil. Jika fitur Anda tercampur menjadi satu, Anda dapat mengubah perilaku satu secara tidak sengaja saat mencoba mengubah yang lain.
  4. Jika arsitektur Anda agnostik dengan detail teknis atau logika bisnis, maka perubahan pada implementasi cenderung membutuhkan fitur arsitektur baru. Misalnya, jika logika domain utama Anda adalah database agnostik, maka mendukung database baru semudah bertukar dalam implementasi baru dari layer persistence.
53
flamingpenguin

Lihatlah rumah sakit, dan pikirkan semua peran berbeda yang terlibat dalam memberikan perawatan kepada pasien: perawat triase, dokter, asisten medis, teknisi, staf administrasi, kafetaria, dll.

Apakah ada satu orang yang tahu bagaimana semua orang-orang itu menyelesaikan pekerjaannya? Tidak, karena itu akan sangat luar biasa. Mereka harus memisahkan tanggung jawab yang berbeda menjadi peran yang berbeda dan titik kontak antara peran tersebut sangat spesifik.

10
RationalGeek

Jika dia bekerja di kantor, ambil contoh, jelaskan peran masing-masing staf di kantor itu, dan tanyakan padanya, apa yang akan terjadi, jika staf itu tidak dibagi sesuai dengan pekerjaannya?

5

Saya akan melihat bagaimana dia gagal menerapkan SoC dalam kode/desainnya dan mengubahnya menjadi contoh dunia nyata yang bisa dia hubungkan dengan dan itu jelas tidak diinginkan.

Misalnya, jika ia memiliki kelas di mana klien perlu menyediakan beberapa informasi yang tidak relevan untuk klien tersebut, maka saya akan menggunakan analogi toko roti di mana Anda harus membawa biji-bijian dan ragi sendiri jika Anda ingin membeli sebuah roti.