Recentemente ho refactoring uno dei miei progetti e ho preso una decisione che devo prendere.
Ho diverse interfacce:
-
Entity
: qualcosa nel mondo di gioco -
Actor
: unEntity
che può eseguire azioni -
Character
: unActor
che ha un nome (così come alcune altre caratteristiche che non ho ancora determinato -
Player
: ACharacter
riprodotto da un essere umano.
La gerarchia di tipi è attualmente
public interface Entity { }
public interface Actor extends Entity { }
public interface Character extends Actor { }
public interface Player extends Character { }
Il motivo per cui l'ho progettato in questo modo è perché gran parte delle funzionalità arriverà da mod community-driven che aggiungono funzionalità al gioco, e voglio che sia il più modulare possibile.
Ora, la decisione che ho preso è: dovrei mantenere questa gerarchia di tipi, o, per consentire un design più robusto (forse, non riesco a pensare ad un esempio), implementarli individualmente?
Gli attuali dettagli di implementazione sono
public class BaseEntity implements Entity { }
public class BaseActor extends BaseEntity implements Actor { }
public class BaseCharacter extends BaseActor implements Character { }
public class BasePlayer extends BaseCharacter implements Player { }
La mia domanda è, ci sarebbe qualche vantaggio (dal punto di vista del design) di fare qualcosa del genere, invece
public interface Entity { }
public interface Actor { }
public interface Character { }
public interface Player { }
public class BaseEntity implements Entity { }
public class BaseActor implements Entity, Actor { }
public class BaseCharacter implements Entity, Actor, Character { }
public class BasePlayer implements Entity, Actor, Character, Player { }
Non riesco a pensare a una buona ragione per farlo, ma qualcuno che userebbe la mia API per creare il proprio mod potrebbe avere il proprio
public class FooPlayer implements Player, Foo { }
E non voglio / preoccuparti dei metodi definiti in Entity
, Actor
o Character
.