Disons que je définis une classe de jeu qui met en œuvre deux vues différentes :
interface IPlayerView {
void play();
}
interface IDealerView {
void deal();
}
La vue qu'un jeu voit lorsqu'il joue, et une vue que le croupier voit lorsqu'il distribue le jeu (c'est-à-dire qu'un joueur ne peut pas faire d'actions de croupier et qu'un croupier ne peut pas faire d'actions de joueur). La définition du jeu est la suivante :
class Game : IPlayerView, IDealerView {
void play() { ... }
void deal() { ... }
}
Supposons maintenant que je veuille permettre aux joueurs de jouer le jeu, mais pas de le distribuer. Mon idée originale était qu'au lieu d'avoir
public Game GetGame() { ... }
J'aurais quelque chose comme
public IPlayerView GetGame() { ... }
Mais après quelques tests, j'ai réalisé que si j'essaie ce code plus tard, il fonctionne :
IDealerView dealerView = (IDealerView)GameClass.GetGame();
cela fonctionne et permet à l'utilisateur de jouer le rôle de croupier.
Est-ce que je m'inquiète trop ? Comment gérez-vous habituellement ces modèles ? Je pourrais plutôt créer deux classes différentes, peut-être une classe "principale", la classe du croupier, qui agirait comme une usine de classes de joueurs. De cette façon, je pourrais contrôler exactement ce que je souhaite transmettre au public. D'un autre côté, cela rend tout un peu plus complexe qu'avec cette conception originale.
Gracias