Coding tidak sulit sebenarnya . Bagian yang sulit adalah menulis kode yang masuk akal, dapat dibaca dan dimengerti. Jadi saya ingin mendapatkan pengembang yang lebih baik dan membuat arsitektur yang solid.
Jadi saya ingin membuat arsitektur untuk NPC dalam video-game. Ini adalah game Strategi Realtime seperti Starcraft, Age of Empires, Command & Conquers, dll. Jadi saya akan memiliki berbagai jenis NPC. Sebuah NPC dapat memiliki satu ke banyak kemampuan (metode) ini: Build()
, Farm()
dan Attack()
.
Contoh:
Pekerja bisa Build()
dan Farm()
prajurit bisa Attack()
Citizen bisa Build()
, Farm()
dan Attack()
Nelayan bisa Farm()
danAttack()
Saya harap semuanya jelas sejauh ini.
Jadi sekarang saya memiliki Jenis NPC saya dan kemampuan mereka. Tetapi mari kita sampai pada aspek teknis / programatik.
Apa yang akan menjadi arsitektur programatik yang baik untuk berbagai jenis NPC saya?
Oke saya bisa punya kelas dasar. Sebenarnya saya pikir ini adalah cara yang baik untuk tetap berpegang pada prinsip KERING . Jadi saya dapat memiliki metode seperti WalkTo(x,y)
di kelas dasar saya karena setiap NPC akan dapat bergerak. Tapi sekarang mari kita datang ke masalah sebenarnya. Di mana saya menerapkan kemampuan saya? (ingat: Build()
, Farm()
dan Attack()
)
Karena kemampuan akan terdiri dari logika yang sama itu akan mengganggu / mematahkan prinsip KERING untuk mengimplementasikannya untuk setiap NPC (Worker, Warrior, ..).
Oke saya bisa menerapkan kemampuan dalam kelas dasar. Ini akan membutuhkan semacam logika yang memverifikasi jika NPC dapat menggunakan kemampuan X IsBuilder
. CanBuild
,, .. Saya pikir jelas apa yang ingin saya ungkapkan.
Tapi saya merasa tidak enak dengan ide ini. Ini terdengar seperti kelas dasar yang membengkak dengan terlalu banyak fungsi.
Saya menggunakan C # sebagai bahasa pemrograman. Jadi pewarisan berganda bukan pilihan di sini. Berarti: Memiliki kelas dasar tambahan seperti Fisherman : Farmer, Attacker
tidak akan berhasil.