Saya sudah memikirkan hal ini selama berhari-hari dan saya masih tidak yakin apa yang harus saya lakukan. Saya mencoba untuk memperbaiki sistem pertarungan di PHP (... maaf.) Inilah yang ada sejauh ini:
- Ada dua (sejauh) jenis entitas yang dapat berpartisipasi dalam pertempuran. Sebut saja mereka pemain dan NPC. Data mereka sudah ditulis dengan cukup baik.
- Ketika terlibat dalam pertempuran, entitas ini dibungkus dengan objek lain dalam DB yang disebut
Combatant
, yang memberi mereka informasi tentang pertarungan tertentu. Mereka dapat terlibat dalam banyak pertarungan sekaligus. - Saya mencoba menulis mesin logika untuk pertempuran dengan menyuntikkan para petarung ke dalamnya.
- Saya ingin bisa mengejek segalanya untuk pengujian.
Untuk memisahkan logika dan data, saya ingin memiliki dua antarmuka / kelas dasar, yang satu ICombatantData
dan yang lainnya ICombatantLogic
. Dua pelaksana data akan menjadi satu untuk objek nyata yang disimpan dalam database, dan yang lainnya untuk objek tiruan saya.
Saya sekarang menghadapi ketidakpastian dengan mendesain sisi logis dari banyak hal. Saya dapat memiliki satu pelaksana untuk masing-masing pemain dan NPC, tetapi kemudian saya memiliki masalah. Seorang pejuang harus dapat mengembalikan entitas yang dibungkusnya. Haruskah metode pengambil ini menjadi bagian dari logika atau data? Saya merasa sangat bahwa itu harus dalam data, karena bagian logika digunakan untuk mengeksekusi pertempuran, dan tidak akan tersedia jika seseorang hanya mencari informasi tentang pertarungan yang akan datang. Tetapi kelas data hanya memisahkan tiruan dari DB, bukan pemain dari NPC. Jika saya mencoba memiliki dua kelas anak-anak dari pelaksana data DB, satu untuk setiap jenis entitas, lalu bagaimana cara membuat arsitek itu sambil menjaga tiruan saya di loop? Apakah saya memerlukan antarmuka ketiga seperti IEntityProvider
yang saya masukkan ke dalam kelas data?
Juga dengan beberapa ide yang telah saya pertimbangkan, saya merasa seperti saya harus meletakkan cek di tempat untuk memastikan Anda tidak cocok, seperti membuat logika untuk NPC tanpa sengaja membungkus data untuk pemain. Apakah itu masuk akal? Apakah itu situasi yang bahkan mungkin terjadi jika arsitekturnya benar, atau akankah desain yang tepat melarang itu sepenuhnya sehingga saya tidak perlu memeriksanya?
Jika seseorang dapat membantu saya hanya membuat diagram kelas atau sesuatu untuk ini, itu akan banyak membantu saya. Terima kasih.
sunting
Juga berguna untuk dicatat, kelas data tiruan tidak benar-benar membutuhkannya Entity
, karena saya hanya akan menentukan semua parameter seperti statistik pertarungan secara langsung. Jadi mungkin itu akan mempengaruhi desain yang benar.
Combatant.entity
tidak digunakan selama pertempuran dan karena itu seharusnya tidak ada. Mungkin Anda memerlukan kelas lain sepertiEntityVsEntityCombat
yang membungkus logika tempur, berisiEntity <--> Combatant
pemetaan danEntity
status pembaruan setelah pertempuran selesai? Mungkin beberapa info lebih lanjut tentang arsitektur Anda saat ini dapat membantu.