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, Attackernão vai funcionar.