Итак. Я намерен использовать Presenter Model Viewer («пассивный» режим, в котором пользовательский интерфейс довольно тупой и отправляет все события Presenter, а Presenter заботится о работе с моделью) для склеиваниябизнес-логика моего домена и пользовательский интерфейс.
Мой вопрос заключается в том, как должен выглядеть мой Presenter.Это то, что я хочу?
public class TicTacToeGamePresenter
{
private readonly ITicTacToeView view;
private readonly PlayerController model;
public TicTacToeGamePresenter(ITicTacToeView view) {
this.view = view;
}
...
}
Должен ли я с помощью конструктора передавать экземпляр предполагаемого ITicTacToeView
?Это позволило бы мне использовать этот класс TicTacToeGamePresenter
с Forms, WPF, WebForms и т. Д. Мне нужно было бы только убедиться, что мой View реализует интерфейс ITicTacToeView
.
Или я должен просто создать экземпляр видаконкретные классы, которые я собираюсь использовать напрямую и просто иметь конструктор без параметров?Это кажется бессмысленным, но я должен был спросить :(.
В настоящее время интерфейс ITicTacToeView
определен как:
public interface ITicTacToePassiveView
{
event EventHandler<EventArgs<Point>> ButtonClicked;
void PlayerOPlayed(Point location);
void PlayerXPlayed(Point location);
void EnableStartButton();
void DisableStartButton();
}
Еще одна вещь. При кодировании конструктораиз TicTacToeGamePresenter
Я закончил с этим:
public TicTacToeGamePresenter(ITicTacToePassiveView view)
{
this.view = view;
IGameLogicAnaliser gameLogicAnaliser = new GameLogicAnaliser();
IPlayer playerO = new Player(gameLogicAnaliser);
IPlayer playerX = new Player(gameLogicAnaliser);
Game game = new Game(playerO, playerX);
this.playerOModel = new PlayerController(playerO, game);
this.playerXModel = new PlayerController(playerX, game);
}
Теперь, взглянув на код, я считаю, что, возможно, было бы лучше сделать эти 'зависимости класса более явными, указав "классвыше "ответственность за создание класса:
public TicTacToeGamePresenter(ITicTacToePassiveView view, IPlayer playerO, IPlayer playerX, Game game, PlayerController playerOModel, PlayerController playerXModel)
{
this.view = view;
this.playerO = playerO;
this.playerX = playerX;
this.game = game;
this.playerOModel = playerOModel;
this.playerXModel = playerXModel;
}
Какой из них будет лучше? Спасибо