Memperkenalkan kompleksitas sebelum waktunya dengan menerapkan pola desain sebelum dibutuhkan bukanlah praktik yang baik.
Tetapi jika Anda mengikuti semua (atau bahkan sebagian besar) prinsip-prinsip SOLID dan menggunakan pola desain umum Anda akan memperkenalkan beberapa kompleksitas karena fitur dan persyaratan ditambahkan atau diubah untuk menjaga desain Anda dapat dipertahankan dan fleksibel sesuai kebutuhan.
Namun begitu kompleksitas itu diperkenalkan dan bekerja seperti jagoan kapan Anda menghapusnya?
Contoh. Saya punya aplikasi yang ditulis untuk klien. Ketika awalnya dibuat di sana di mana beberapa cara untuk memberi kenaikan gaji kepada karyawan. Saya menggunakan pola strategi dan pabrik untuk menjaga seluruh proses tetap bagus dan bersih. Seiring waktu metode kenaikan tertentu di mana ditambahkan atau dihapus oleh pemilik aplikasi.
Waktu berlalu dan pemilik baru mengambil alih. Pemilik baru ini berhidung keras, menjaga segala sesuatunya sederhana dan hanya memiliki satu cara tunggal untuk menaikkan gaji.
Kompleksitas yang dibutuhkan oleh pola strategi tidak lagi dibutuhkan. Jika saya di mana kode ini dari persyaratan seperti sekarang saya tidak akan memperkenalkan kompleksitas tambahan ini (tapi pastikan saya bisa memperkenalkannya dengan sedikit atau tanpa pekerjaan jika perlu muncul).
Jadi, apakah saya menghapus implementasi strategi sekarang? Saya tidak berpikir pemilik baru ini akan pernah mengubah cara kenaikan gaji diberikan. Tetapi aplikasi itu sendiri telah menunjukkan bahwa ini bisa terjadi.
Tentu saja ini hanya satu contoh dalam aplikasi di mana pemilik baru mengambil alih dan telah menyederhanakan banyak proses. Saya bisa menghapus lusinan kelas, antarmuka dan pabrik dan membuat keseluruhan aplikasi jauh lebih sederhana. Perhatikan bahwa implementasi saat ini berfungsi dengan baik dan pemilik senang dengan hal itu (dan terkejut dan bahkan lebih bahagia bahwa saya dapat mengimplementasikan perubahannya begitu cepat karena kompleksitas yang dibahas).
Saya akui bahwa sebagian kecil dari keraguan ini adalah karena sangat mungkin pemilik baru tidak akan menggunakan saya lagi. Saya tidak terlalu peduli bahwa orang lain akan mengambil alih ini karena itu bukan penghasil pendapatan besar.
Tapi saya peduli tentang 2 hal (terkait)
Saya sedikit peduli bahwa pengelola baru harus berpikir sedikit lebih keras ketika mencoba memahami kode. Kompleksitas adalah kompleksitas dan saya tidak ingin membuat orang gila gila datang setelah saya.
Tetapi lebih lagi saya khawatir tentang pesaing melihat kompleksitas ini dan berpikir saya hanya menerapkan pola desain untuk menambah jam saya pada pekerjaan. Kemudian menyebarkan desas-desus ini untuk menyakiti bisnis saya yang lain. (Saya telah mendengar ini disebutkan.)
Begitu...
Secara umum apakah kompleksitas yang diperlukan sebelumnya harus dihilangkan meskipun berfungsi dan telah ada kebutuhan historis yang diperlihatkan untuk kompleksitas tersebut tetapi Anda tidak memiliki indikasi bahwa kompleksitas akan diperlukan di masa mendatang?
Bahkan jika pertanyaan di atas secara umum dijawab "tidak", apakah bijaksana untuk menghilangkan kompleksitas "yang tidak diperlukan" ini jika menyerahkan proyek kepada pesaing (atau orang asing)?