Ho una classe che è fondamentalmente un contenitore (o composto) di altri 4 oggetti. Sto cercando di capire il modo "migliore" di riferirsi a questi oggetti, pur continuando a consentirgli di essere abbastanza robusto, in modo che lo sviluppatore futuro possa aumentarlo a 5 o 6 o 20.
Potrebbe trattarsi di YAGNI, ma mi piacerebbe qualche altro input prima di bloccarlo a 4.
Attualmente ho qualcosa di simile
public interface MoveSet {
Move getFirstMove();
Move getSecondMove();
Move getThirdMove();
Move getFourthMove();
}
Una Move
è un'abilità che può essere usata nel combattimento a turni, non come una sequenza di mosse in una partita di scacchi.
Perché vorrei mantenere questo estensibile, un possibile sottotipo potrebbe essere
public interface SixMoveSet extends MoveSet {
Move getFifthMove();
Move getSixthMove();
}
Ma questo potrebbe diventare disordinato via via che sempre più sottotipi vengono creati, questo sfugge di mano. L'altra opzione che ho considerato stava usando un metodo indicizzato, come
public interface MoveSet {
public Move getMove(int moveIndex);
}
A quel punto, però, ho bisogno di eseguire ulteriori validazioni sull'input, che non posso garantire che le implementazioni seguiranno (che potrebbero essere sventolate a mano come comportamento non definito).
Il modo vanilla di fare ciò è di limitare il numero di mosse disponibili a 4, in tutti i casi. Allo stesso tempo, tuttavia, se qualcuno vuole avere un massimo di 5 mosse, voglio lasciarle, pur mantenendo il SOLIDO il più possibile.