Выполняет ли презентатор GUI Logic в шаблоне MVP?

Мы работаем с шаблоном MVP, и мне было интересно, как бороться с действиями GUI.

Например, когда пользователь хочет удалить строку из сетки, пользователь нажимает кнопку удаления. На этом этапе вы можете сделать две вещи:

1) Вызовите _presenter.DeleteRow(), и ведущий затем вызовет _view.SelectedRow. Затем ведущий вызывает view.AskUserForConfirmation(), и когда он возвращается DialogResult.OK, ведущий фактически удаляет базовый объект и обновляет сетку.

2) Форма запрашивает у пользователя подтверждение, а когда DialogResult - OK, тогда вызывается presenter.Delete(myObject), вызывается OR presenter.Delete() и внутри метода Delete объект извлекается вызовом _view.SelectedRow.

Как вы справляетесь с такими ситуациями?

Ответ 1

Предполагается, что шаблон MVP будет разделять вашу логику, просмотр и доступ к данным. Поэтому, пытаясь решить, куда что-то должно идти, спросите себя, существует ли реальная бизнес-логика в том, что вы пытаетесь сделать.

Вы хотите, чтобы ваш бизнес-уровень имел логику отображения всплывающего окна? Возможно нет. Это просто подтверждение. Вы можете захотеть иметь вспомогательный класс, который генерирует ваше стилизованное всплывающее окно, но это отдельно от вашего уровня Presenter.

Ответ 2

Вариант 2. Запрос на подтверждение - это ответственность пользовательского интерфейса, о которой ведущий не должен беспокоиться. Я не привлекаю ведущего до тех пор, пока не наступит время, чтобы на самом деле что-то сделать с моделью, или пока не потребуется вызвать сложную бизнес-логику.

Это не означает, что параметр 1 недействителен. На мой взгляд, это просто создает ненужную болтовню зрения/докладчика.