Codificação não é tão difícil, na verdade . A parte difícil é escrever um código que faça sentido, seja legível e compreensível. Então, eu quero ter um desenvolvedor melhor e criar uma arquitetura sólida.
Então, eu quero criar uma arquitetura para NPCs em um videogame. É um jogo de estratégia em tempo real como Starcraft, Age of Empires, Command & Conquers, etc. etc. Portanto, terei diferentes tipos de NPCs. Um NPC pode ter um para muitas habilidades (métodos) destes: Build()
, Farm()
e Attack()
.
Exemplos:
Trabalhador pode Build()
e Farm()
Guerreiro pode Attack()
Cidadão podem Build()
, Farm()
e Attack()
Fisherman pode Farm()
eAttack()
Espero que tudo esteja claro até agora.
Então agora eu tenho meus tipos de NPCs e suas habilidades. Mas vamos ao aspecto técnico / programático.
Qual seria uma boa arquitetura programática para meus diferentes tipos de NPCs?
Ok, eu poderia ter uma classe base. Na verdade, acho que essa é uma boa maneira de manter o princípio DRY . Para que eu possa ter métodos como WalkTo(x,y)
na minha classe base, já que todo NPC poderá se mover. Mas agora vamos ao verdadeiro problema. Onde eu implemento minhas habilidades? (lembre-se: Build()
, Farm()
e Attack()
)
Como as habilidades consistirão na mesma lógica, seria irritante / violar o princípio DRY implementá-las para cada NPC (Worker, Warrior, ..).
Ok, eu poderia implementar as habilidades dentro da classe base. Isso exigiria algum tipo de lógica que verifica se um NPC pode usar a habilidade X. IsBuilder
, CanBuild
, .. Eu acho que é claro que eu quero expressar.
Mas não me sinto muito bem com essa ideia. Isso soa como uma classe base inchada com muita funcionalidade.
Eu uso c # como linguagem de programação. Portanto, herança múltipla não é uma opção aqui. Meios: Ter classes base extras como Fisherman : Farmer, Attacker
não vai funcionar.