Jadi mungkin seperti banyak, saya sering menemukan diri saya mengalami sakit kepala dengan masalah desain di mana, misalnya, ada beberapa pola desain / pendekatan yang tampaknya sesuai dengan masalah dan memiliki manfaat yang diinginkan. Sangat sering ada beberapa peringatan yang membuatnya sulit untuk menerapkan pola / pendekatan tanpa semacam pekerjaan di sekitarnya yang kemudian meniadakan manfaat dari pola / pendekatan tersebut. Saya dapat dengan mudah berakhir iterasi melalui banyak pola / pendekatan karena diprediksi hampir semuanya memiliki beberapa peringatan yang sangat signifikan dalam situasi dunia nyata di mana tidak ada solusi yang mudah.
Contoh:
Saya akan memberi Anda contoh hipotetis berdasarkan longgar pada yang nyata yang baru-baru ini saya temui. Katakanlah saya ingin menggunakan komposisi di atas warisan karena hierarki warisan telah menghambat skala dari kode di masa lalu. Saya mungkin refactor kode tetapi kemudian menemukan bahwa ada beberapa konteks di mana superclass / baseclass hanya perlu memanggil fungsionalitas pada subclass, meskipun ada upaya untuk menghindarinya.
Pendekatan terbaik berikutnya tampaknya menerapkan setengah pola delegasi / pengamat dan pola komposisi setengah sehingga superclass dapat mendelegasikan perilaku atau sehingga subclass dapat mengamati peristiwa superclass. Kemudian kelas kurang dapat diukur dan dikelola karena tidak jelas bagaimana harus diperluas, juga sulit untuk memperluas pendengar / delegasi yang ada. Juga informasi tidak disembunyikan dengan baik karena seseorang mulai perlu mengetahui implementasinya untuk melihat cara memperluas superclass (kecuali jika Anda menggunakan komentar yang sangat luas).
Jadi setelah ini saya mungkin memilih untuk hanya menggunakan pengamat atau delegasi sepenuhnya untuk menjauh dari kelemahan yang datang dengan mencampuradukkan pendekatan untuk banyak. Namun ini datang dengan masalahnya sendiri. Sebagai contoh, saya mungkin menemukan bahwa saya pada akhirnya membutuhkan pengamat atau delegasi untuk jumlah perilaku yang meningkat sampai akhirnya saya membutuhkan pengamat / delegasi untuk hampir setiap perilaku. Salah satu opsi bisa dengan hanya memiliki satu pendengar / delegasi besar untuk semua perilaku tetapi kemudian kelas pelaksana berakhir dengan banyak metode kosong dll.
Maka saya mungkin mencoba pendekatan lain tetapi ada banyak masalah dengan itu. Kemudian yang berikutnya, dan yang berikutnya dll.
Proses berulang ini menjadi sangat sulit ketika setiap pendekatan tampaknya memiliki banyak masalah seperti yang lain dan mengarah ke semacam kelumpuhan keputusan desain . Juga sulit untuk menerima bahwa kode akan berakhir sama-sama bermasalah terlepas dari pola desain atau pendekatan yang digunakan. Jika saya berakhir dalam situasi ini, apakah itu berarti masalah itu sendiri perlu dipikirkan kembali? Apa yang dilakukan orang lain ketika mereka menghadapi situasi ini?
Sunting: Tampaknya ada sejumlah interpretasi dari pertanyaan yang ingin saya jelaskan:
- Saya telah mengeluarkan OOP sepenuhnya dari pertanyaan karena ternyata itu sebenarnya tidak spesifik untuk OOP, ditambah terlalu mudah untuk salah menafsirkan beberapa komentar yang saya sampaikan tentang OOP.
- Beberapa orang mengklaim saya harus mengambil pendekatan berulang dan mencoba pola yang berbeda, atau bahwa saya harus membuang pola ketika berhenti bekerja. Ini adalah proses yang saya maksudkan pada awalnya. Saya pikir ini jelas dari contoh tetapi saya bisa membuatnya lebih jelas, jadi saya telah mengedit pertanyaan untuk melakukannya.