Seorang teman saya bekerja untuk sebuah perusahaan kecil di sebuah proyek yang dibenci oleh setiap pengembang: dia terdesak untuk melepaskan secepat mungkin, dia satu-satunya yang tampaknya peduli dengan utang teknis, pelanggan tidak memiliki latar belakang teknis, dll.
Dia menceritakan kepada saya sebuah kisah yang membuat saya berpikir tentang kesesuaian pola desain dalam proyek-proyek seperti ini. Begini ceritanya.
Kami harus memajang produk di berbagai tempat di situs web. Misalnya, manajer konten dapat melihat produk, tetapi juga pengguna akhir atau mitra melalui API.
Kadang-kadang, informasi hilang dari produk: misalnya, banyak dari mereka tidak memiliki harga ketika produk baru saja dibuat, tetapi harga belum ditentukan. Beberapa tidak memiliki deskripsi (deskripsi menjadi objek yang kompleks dengan riwayat modifikasi, konten yang dilokalkan, dll.). Beberapa kekurangan informasi pengiriman.
Terinspirasi oleh bacaan saya baru-baru ini tentang pola desain, saya pikir ini adalah kesempatan yang bagus untuk menggunakan pola Obyek Null yang ajaib . Jadi saya melakukannya, dan semuanya lancar dan bersih. Seseorang hanya perlu menelepon
product.Price.ToString("c")
untuk menampilkan harga, atauproduct.Description.Current
untuk menunjukkan deskripsi; tidak diperlukan hal-hal bersyarat. Hingga, suatu hari, pemangku kepentingan diminta untuk menampilkannya secara berbeda di API, dengan memilikinull
di JSON. Dan juga berbeda untuk pengelola konten dengan menunjukkan "Harga [Ubah] tidak ditentukan". Dan saya harus membunuh pola Objek Null tercinta saya, karena tidak perlu lagi.Dengan cara yang sama, saya harus menghapus beberapa pabrik abstrak dan beberapa pembangun, saya akhirnya mengganti pola Fasad saya yang indah dengan panggilan langsung dan jelek, karena antarmuka yang mendasarinya berubah dua kali per hari selama tiga bulan, dan bahkan Singleton meninggalkan saya ketika persyaratan mengatakan bahwa objek yang bersangkutan harus berbeda tergantung pada konteksnya.
Pekerjaan lebih dari tiga minggu terdiri dari menambahkan pola desain, lalu merobeknya satu bulan kemudian, dan kode saya akhirnya menjadi spageti yang cukup untuk tidak mungkin dipertahankan oleh siapa pun, termasuk saya. Bukankah lebih baik tidak pernah menggunakan pola itu sejak awal?
Memang, saya harus bekerja sendiri pada jenis-jenis proyek di mana persyaratan berubah terus-menerus, dan ditentukan oleh orang-orang yang tidak benar-benar memikirkan kohesi atau koherensi produk. Dalam konteks ini, tidak masalah seberapa gesitnya Anda, Anda akan datang dengan solusi elegan untuk suatu masalah, dan ketika Anda akhirnya mengimplementasikannya, Anda belajar bahwa persyaratannya berubah secara drastis, sehingga solusi elegan Anda tidak cocok lebih lama lagi.
Apa yang akan menjadi solusi dalam kasus ini?
Tidak menggunakan pola desain, berhenti berpikir, dan menulis kode secara langsung?
Akan menarik untuk melakukan pengalaman di mana tim menulis kode secara langsung, sementara yang lain berpikir dua kali sebelum mengetik, mengambil risiko harus membuang desain asli beberapa hari kemudian: siapa tahu, mungkin kedua tim akan memiliki hutang teknis yang sama. Dengan tidak adanya data seperti itu, saya hanya akan menegaskan bahwa rasanya tidak benar untuk mengetik kode tanpa berpikir sebelumnya ketika mengerjakan proyek 20 man-month.
Pertahankan pola desain yang tidak masuk akal lagi, dan coba tambahkan lebih banyak pola untuk situasi yang baru dibuat?
Sepertinya ini juga tidak benar. Pola digunakan untuk menyederhanakan pemahaman kode; terlalu banyak pola, dan kode akan berantakan.
Mulai memikirkan desain baru yang mencakup persyaratan baru, lalu perlahan-lahan memperbaiki desain lama menjadi yang baru?
Sebagai ahli teori dan orang yang menyukai Agile, saya benar-benar menyukainya. Dalam praktiknya, ketika Anda tahu bahwa Anda harus kembali ke papan tulis setiap minggu dan mengulang kembali sebagian besar desain sebelumnya dan bahwa pelanggan tidak memiliki cukup dana untuk membayar Anda untuk itu, juga tidak cukup waktu untuk menunggu. , ini mungkin tidak akan berhasil.
Jadi, ada saran?