Sekelompok teman dan saya telah mengerjakan sebuah proyek selama beberapa waktu terakhir, dan kami ingin menemukan cara OOP yang bagus untuk mewakili skenario khusus untuk produk kami. Pada dasarnya, kami sedang mengerjakan permainan peluru neraka bergaya Touhou , dan kami ingin membuat sistem di mana kami dapat dengan mudah mewakili setiap perilaku yang mungkin dari peluru yang dapat kami impikan.
Jadi itulah tepatnya yang kami lakukan; kami membuat arsitektur yang sangat elegan yang memungkinkan kami untuk memilah perilaku peluru menjadi komponen-komponen berbeda yang dapat dilampirkan pada contoh peluru sesuka hati, seperti sistem komponen Unity . Ini bekerja dengan baik, mudah diperluas, fleksibel dan mencakup semua pangkalan kami, tetapi ada sedikit masalah.
Aplikasi kami juga melibatkan sejumlah besar generasi prosedural, yaitu kami secara prosedural menghasilkan perilaku peluru. Mengapa ini menjadi masalah? Nah, solusi OOP kami untuk merepresentasikan perilaku peluru, meski elegan, sedikit rumit untuk dikerjakan tanpa manusia. Manusia cukup pintar untuk memikirkan solusi untuk masalah yang logis dan pintar. Algoritma generasi prosedural belum begitu pintar, dan kami merasa sulit untuk mengimplementasikan AI yang menggunakan arsitektur OOP kami untuk potensi penuhnya. Diakui, itu adalah cacat dari arsitektur adalah bahwa itu tidak intuitif dalam semua situasi.
Jadi untuk mengatasi masalah ini, kami pada dasarnya memasukkan semua perilaku yang ditawarkan oleh komponen yang berbeda ke dalam kelas bullet, sehingga segala yang kami bayangkan dapat ditawarkan langsung di setiap instance peluru sebagai lawan dari instance komponen terkait lainnya. Ini membuat algoritma generasi prosedural kami sedikit lebih mudah untuk dikerjakan, tetapi sekarang kelas peluru kami adalah objek dewa yang sangat besar . Ini adalah kelas terbesar dalam program sejauh ini dengan kode lebih dari lima kali lipat dari yang lainnya. Agak sulit untuk dirawat juga.
Apakah tidak masalah bahwa salah satu kelas kami berubah menjadi objek dewa, hanya untuk membuatnya lebih mudah untuk bekerja dengan masalah lain? Secara umum, apakah boleh menggunakan kode bau di kode Anda jika ia mengakui solusi yang lebih mudah untuk masalah yang berbeda?