Итак, я намерен использовать презентацию Model View Presenter («пассивный» режим, в котором пользовательский интерфейс довольно тупой и отправляет все события в Presenter, а Presenter заботится о работа с моделью), чтобы приклеить бизнес-логику моего домена и пользовательский интерфейс.Реализация вопроса о ведущем в MVP
Мой вопрос: как должен выглядеть мой презентатор. Это то, чего я хочу?
public class TicTacToeGamePresenter
{
private readonly ITicTacToeView view;
private readonly PlayerController model;
public TicTacToeGamePresenter(ITicTacToeView view) {
this.view = view;
}
...
}
Должен ли я инъекция конструктора передать экземпляр предполагаемого ITicTacToeView
? Это позволило бы мне использовать этот класс TicTacToeGamePresenter
с формами, 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;
}
Какой из них лучше? Thanks
В конечном итоге я начну использовать контейнеры IoC. Но сейчас у меня уже есть много вещей, которые я должен изучить, и вызывают достаточный хаос сами по себе. –
Кстати, этот пост, который вы связали, кажется приятным. –
Еще один вопрос, вы сказали, что «во время выполнения ваше представление уже создается, когда его создатель впервые создает экземпляр, если вы создаете представление в презентаторе, то вы будете работать с отдельным экземпляром вашего представления, и ни один из события, которые вы ожидаете, будут обработаны ». Не могу ли я просто создать представление в презентаторе? Таким образом, представление будет создаваться только ПОСЛЕ ПРЕДСТАВИТЕЛЯ. Или я чего-то не хватает? –