Lalu ada lampu hijau, dan dalam upaya untuk membersihkan, seseorang menulis GameManager. Mungkin untuk memegang banyak GameStates, mungkin untuk menyimpan beberapa GameObjects, tidak ada yang besar, sungguh. Manajer yang imut, kecil.
Anda tahu, ketika saya membaca ini, ada sedikit alarm yang berbunyi di kepala saya. Objek dengan nama "GameManager" tidak akan pernah lucu, atau kecil. Dan seseorang melakukan ini untuk membersihkan kode? Seperti apa itu sebelumnya? OK, bercanda samping: nama kelas harus menjadi indikasi yang jelas tentang apa yang dilakukan kelas, dan ini harus menjadi satu hal (alias: prinsip tanggung jawab tunggal ).
Juga, Anda mungkin masih berakhir dengan objek seperti GameManager, tetapi jelas, itu ada di level yang sangat tinggi, dan itu harusnya berkaitan dengan tugas level tinggi. Mempertahankan katalog objek game? Mungkin. Memfasilitasi komunikasi antar objek game? Tentu. Menghitung tabrakan antar objek? Tidak! Ini juga mengapa nama Manager disukai - terlalu luas, dan memungkinkan banyak penyalahgunaan di bawah spanduk itu.
Aturan praktis praktis tentang ukuran kelas: jika Anda menjalankan beberapa ratus baris kode per kelas, ada sesuatu yang mulai salah. Tanpa terlalu bersemangat, apapun yang berakhir, katakanlah, 300 LOC adalah bau kode bagi saya, dan jika Anda melebihi 1000, lonceng peringatan harus dimatikan. Dengan meyakini bahwa entah bagaimana 1000 baris kode lebih mudah dipahami daripada 4 kelas terstruktur masing-masing dari 250, Anda menipu diri sendiri.
Ketika waktu menjadi masalah, tidak ada cara untuk menulis kelas yang terpisah, atau untuk membagi manajer raksasa ini menjadi sub-manajer.
Saya pikir inilah masalahnya hanya karena masalahnya dibiarkan merambat ke titik di mana semuanya berantakan total. Praktik refactoring benar-benar apa yang Anda cari - Anda harus terus meningkatkan desain kode dengan peningkatan kecil .
Apa yang Anda sarankan untuk mencegah hal ini terjadi?
Masalahnya bukan masalah teknologi, jadi Anda seharusnya tidak mencari perbaikan teknologi untuk itu. Masalahnya adalah ini: ada kecenderungan dalam tim Anda untuk membuat potongan kode monolitik, dan keyakinan bahwa entah bagaimana menguntungkan dalam jangka menengah / panjang untuk bekerja seperti ini. Tampaknya juga tim tersebut kurang memiliki keunggulan arsitektur yang kuat, yang akan mengarahkan arsitektur permainan (atau setidaknya, orang ini terlalu sibuk untuk melakukan tugas ini). Pada dasarnya, satu-satunya jalan keluar adalah membuat anggota tim mengenali bahwa pemikiran ini salah. Tidak ada yang membantu. Kualitas produk akan memburuk, dan tim hanya akan menghabiskan lebih banyak malam memperbaiki barang.
Berita baiknya adalah manfaat langsung dan nyata dari penulisan kode bersih sangat besar, sehingga hampir semua pengembang menyadari manfaatnya dengan sangat cepat. Meyakinkan tim untuk bekerja dengan cara ini untuk sementara waktu, hasilnya akan melakukan sisanya.
Bagian yang sulit adalah mengembangkan rasa untuk apa yang merupakan kode buruk (dan bakat untuk cepat menghasilkan desain yang lebih baik) adalah salah satu keterampilan yang lebih sulit untuk dipelajari dalam pengembangan. Saran saya bergantung pada harapan bahwa Anda memiliki seseorang yang cukup senior dalam tim yang dapat melakukan ini - jauh lebih mudah untuk meyakinkan orang seperti itu.
Edit - Info lebih banyak:
Secara umum, saya tidak berpikir masalah Anda terbatas pada pengembangan game. Pada intinya, ini adalah masalah rekayasa perangkat lunak, maka komentar saya ke arah itu. Apa yang mungkin berbeda adalah sifat industri pengembangan game, apakah lebih banyak hasil dan berorientasi tenggat waktu daripada jenis pengembangan lainnya, saya tidak yakin.
Khusus untuk pengembangan game, jawaban yang diterima untuk pertanyaan ini di StackOverflow mengenai kiat "terutama arsitektur game", mengatakan:
Ikuti prinsip Solid dari desain berorientasi objek ....
Ini pada dasarnya persis apa yang saya katakan. Ketika saya di bawah tekanan, saya juga menemukan diri saya menulis potongan kode besar, tetapi saya telah mengebornya ke kepala saya bahwa itu adalah hutang teknis. Apa yang cenderung bekerja dengan baik bagi saya, adalah menghabiskan paruh pertama (atau tiga perempat) hari itu menghasilkan sejumlah besar kode berkualitas menengah, dan kemudian duduk santai, dan memikirkannya sebentar; lakukan sedikit desain di kepala saya, atau di atas kertas / papan tulis, tentang cara meningkatkan kode sedikit. Seringkali, saya melihat kode berulang, dan saya dapat benar-benar mengurangi total baris kode dengan memecah semuanya, sambil meningkatkan keterbacaan. Kali ini berinvestasi membayar untuk dirinya sendiri begitu cepat, yang menyebutnya sebagai "investasi" terdengar konyol - cukup sering saya akan mengambil bug yang mungkin terbuang setengah hari saya (seminggu kemudian), seandainya saya membiarkannya berlanjut.
- Memperbaiki hal-hal pada hari yang sama Anda kode mereka.
- Anda akan senang Anda melakukannya dalam beberapa jam.
Datang untuk benar-benar percaya hal di atas sulit; Saya telah berhasil melakukannya untuk pekerjaan saya sendiri hanya karena saya telah mengalami, berulang kali, efeknya. Meski begitu, masih sulit bagi saya untuk membenarkan memperbaiki kode ketika saya bisa mengeluarkan lebih banyak ... Jadi saya benar-benar mengerti dari mana Anda berasal. Sayangnya, saran ini mungkin terlalu umum, dan tidak mudah dilakukan. Saya sangat percaya akan hal itu! :)
Untuk menjawab contoh spesifik Anda:
Kode Bersih Paman Bob melakukan pekerjaan luar biasa untuk meringkas seperti apa kode kualitas yang baik. Saya kebetulan setuju dengan hampir semua isinya. Jadi, ketika saya memikirkan contoh Anda tentang 30.000 manajer kelas LOC, saya benar-benar tidak setuju dengan bagian "alasan bagus". Saya tidak ingin terdengar ofensif, tetapi berpikir seperti itu akan menyebabkan masalah. Tidak ada alasan bagus untuk memiliki kode sebanyak itu dalam satu file - hampir 1000 halaman teks! Setiap manfaat dari lokalitas (kecepatan eksekusi, atau desain "kesederhanaan") akan segera dibatalkan oleh pengembang yang sepenuhnya macet mencoba menavigasi monster itu, dan itu bahkan sebelum kita membahas penggabungan, dll.
Jika Anda tidak yakin, saran terbaik saya adalah mengambil salinan buku di atas, dan memeriksanya. Menerapkan tipe pemikiran seperti itu untuk mengarahkan orang secara sukarela membuat kode yang bersih dan jelas, yang terstruktur dengan baik.