Saya akan mengatakan untuk tidak memulai dengan TDD. Buat keputusan berdasarkan informasi saat Anda menghabiskan lebih banyak waktu mempelajari strategi arsitektur secara umum. TDD tidak akan membiarkan Anda melewatkan pekerjaan rumah itu meskipun Anda mungkin mulai percaya itu.
Inilah masalah saya dengan itu. Ketika Anda mengatakan sepertinya banyak waktu terbuang untuk hal-hal yang tidak akan pernah melanggar TDDers mengatakan Anda akan menghargainya ketika satu hal yang tidak Anda antisipasi dalam rantai besar dependensi menjadi rusak. Ketika Anda menunjukkan bahwa tidak mungkin untuk memprediksi hal-hal seperti itu sebelum Anda menulis aplikasi Anda, yang merupakan ... mengapa kami menguji, mereka memberi tahu Anda itu benar-benar lebih banyak tentang desain dan tidak menguji meskipun pengujian itu berguna.
Tetapi bukankah rantai raksasa dari ketergantungan terkait yang tidak dapat diprediksi merupakan produk dari desain jelek?
Jadi yang mana?
Inilah sebuah pemikiran. Mari kita tidak memiliki rantai besar ketergantungan yang rumit di tempat pertama dengan mempertimbangkan dua prinsip desain berorientasi objek berikut dari Pola Desain:
"Program ke antarmuka, bukan implementasi"
Dengan kata lain, objek Anda seharusnya tidak peduli siapa yang melakukan pemanggilan atau bagaimana mereka dibuat. Hanya arg yang tepat dimasukkan dan metode yang mereka panggil dari objek lain yang diarahkan untuk bekerja seperti yang diharapkan. Rantai ketergantungan Anda dalam kebanyakan kasus harus berada pada satu titik penghubung, pemanggilan metode pada bagian pemanggil dan tempat di mana args dimasukkan ke dalam metode Anda. Di situlah Anda login dan memvalidasi dan mengirim pesan yang berguna untuk debug ketika hal-hal buruk.
Dan:
"Komposisi objek yang disukai daripada warisan kelas"
Siapa boneka itu? Orang yang melakukan sesuatu pada suatu kelas dalam skema pewarisan cascading yang berbelit-belit yang melibatkan seperti 30 kelas yang mengakibatkan kerusakan case fringe, atau dev yang muncul dengan arsitektur itu sejak awal? TDD mungkin membantu Anda menyelesaikan masalah di dalam menara miring kelas Pisa lebih cepat daripada yang bisa Anda dapatkan tanpa itu, tetapi apakah itu membuatnya lebih tidak menyakitkan untuk mencoba memodifikasi salah satu titik akhir dari bencana kode itu di waktu berikutnya?
Dan di situlah saya sampai pada hal yang mengganggu saya. Apakah TDD benar-benar membantu desain atau apakah itu memungkinkan arsitektur yang buruk? Bagi saya sepertinya memiliki potensi untuk menjadi strategi yang memuaskan diri sendiri. Semakin banyak tim Anda tidak harus memiliki tanggung jawab untuk arsitektur yang buruk, komponen-komponen pengujian granular yang lebih bermanfaat tampaknya menjadi, tetapi akhirnya aplikasi Anda menjadi PITA semakin besar untuk bekerja dengan (dengan asumsi mereka tidak pernah terlalu memikirkan arsitektur di pertama tempat). Dan kegagalan untuk mengakui konsekuensi dari itu adalah turun tangan, selalu kesalahan paling mahal yang dapat Anda buat ketika bekerja pada aplikasi yang dimaksudkan untuk ditingkatkan dan dimodifikasi dari waktu ke waktu.