Шаблон MVC в .NET: Может ли View вызывать исключения в модели? - PullRequest
2 голосов
/ 24 декабря 2008

Я использую шаблон MVC в WinNET-приложении .NET. В контроллере есть места, которые могут вызвать исключение. Вместо того, чтобы перехватывать исключение и отключать окно сообщения, которое является обязанностью View, я ничего не делаю в Controller и позволяю View обернуть эту область в try / catch. Пока что в этих исключениях не нужно ничего делать, кроме как показать пользователю приятное сообщение. Это не всегда так. Просмотр чем отображает ошибку исключения в окне сообщения. Мне это не нравится, потому что классы исключений происходят из модели. Таким образом, представление напрямую попадает в модель, чтобы получить доступ к исключениям. Но как еще это можно сделать и все же следовать шаблону MVC?

Я мог бы заставить контроллер обработать исключение и выдать строку обратно в пользовательский интерфейс. Как это сделать, хотя? Если functionA возвращает void, я не хочу изменять его тип возвращаемого значения только для оценки представления.

Ответы [ 3 ]

1 голос
/ 06 ноября 2009

Я чувствую, что ответственность контроллеров заключается в том, чтобы указывать представлению показывать сообщение и какое сообщение показывать.

Поэтому я бы поместил метод DisplayError (string) в представление и вызвал бы его, когда вы перехватываете исключение в Controller. Таким образом контроллер выполняет обработку исключений, так как представление по-прежнему управляет деталями отображения окна сообщения с сообщением, которое я говорю ему использовать.

0 голосов
/ 24 декабря 2008

Я не мог полностью уйти от этого, так как я использую Generic Events. Я использую модель событий для исключений, но события являются общими. Это требует от звонящего знать о вашем общем событии. Тем не менее, все это происходит через intellisense в представлении и все еще делает представление очень глупым:)

0 голосов
/ 24 декабря 2008

Обычно я делаю, чтобы Presenter (Controller) представлял событие OnError, которое прослушивает View. Затем представление использует информацию из этого события для представления пользовательского интерфейса, обновления строки состояния или чего-либо еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...