Saya pikir ini mungkin jawaban meta yang kontroversial, dan saya agak terlambat ke pesta, tapi saya pikir sangat penting untuk menyebutkan ini di sini, karena saya pikir saya tahu dari mana Anda berasal.
Masalah dengan cara pola desain digunakan, adalah ketika mereka diajarkan, mereka menyajikan kasus seperti ini:
Anda memiliki skenario khusus ini. Atur kode Anda dengan cara ini. Inilah contoh yang tampak cerdas, tetapi agak dibuat-buat.
Masalahnya adalah bahwa ketika Anda mulai melakukan rekayasa nyata, hal-hal yang tidak cukup cut-and-dry. Pola desain yang Anda baca tidak akan cukup sesuai dengan masalah yang Anda coba selesaikan. Belum lagi bahwa perpustakaan yang Anda gunakan benar-benar melanggar semua yang dinyatakan dalam teks yang menjelaskan pola-pola itu, masing-masing dengan caranya sendiri-sendiri. Dan sebagai hasilnya, kode yang Anda tulis "terasa salah" dan Anda mengajukan pertanyaan seperti ini.
Selain itu, saya ingin mengutip Andrei Alexandrescu, ketika berbicara tentang rekayasa perangkat lunak, yang menyatakan:
Rekayasa perangkat lunak, mungkin lebih dari disiplin teknik lainnya, menunjukkan banyak keragaman: Anda dapat melakukan hal yang sama dalam banyak cara yang benar, dan ada nuansa tak terbatas antara benar dan salah.
Mungkin ini sedikit berlebihan, tapi saya pikir ini dengan sempurna menjelaskan alasan tambahan mengapa Anda mungkin merasa kurang percaya diri dengan kode Anda.
Pada saat-saat seperti ini, suara kenabian Mike Acton, pemimpin mesin game di Insomniac, berteriak di kepala saya:
TAHU DATA ANDA
Dia berbicara tentang input ke program Anda, dan output yang diinginkan. Dan kemudian ada permata Fred Brooks dari Bulan Mythical Man:
Tunjukkan pada saya diagram alur Anda dan sembunyikan meja Anda, dan saya akan terus menjadi bingung. Tunjukkan pada saya meja Anda, dan saya biasanya tidak membutuhkan diagram alur Anda; mereka akan jelas.
Jadi jika saya adalah Anda, saya akan mempertimbangkan masalah saya berdasarkan kasus input khas saya, dan apakah itu mencapai output yang benar yang diinginkan. Dan ajukan pertanyaan seperti ini:
- Apakah data output dari program saya benar?
- Apakah ini diproduksi secara efisien / cepat untuk kasus input saya yang paling umum?
- Apakah kode saya cukup mudah untuk dijadikan alasan, baik bagi saya maupun rekan satu tim? Jika tidak, dapatkah saya membuatnya lebih sederhana?
Ketika Anda melakukan itu, pertanyaan "berapa banyak lapisan abstraksi atau pola desain yang dibutuhkan" menjadi lebih mudah dijawab. Berapa banyak lapisan abstraksi yang Anda butuhkan? Sebanyak yang diperlukan untuk mencapai tujuan ini, dan tidak lebih. "Bagaimana dengan pola desain? Aku belum pernah menggunakannya!" Nah, jika tujuan di atas tercapai tanpa penerapan langsung suatu pola, maka itu tidak masalah. Buat itu bekerja, dan lanjutkan ke masalah berikutnya. Mulai dari data Anda, bukan dari kode.