Обработка ошибок в DDD-приправленном веб-приложении ASP.Net MVC2 - PullRequest
5 голосов
/ 22 августа 2010

Каковы "лучшие практики" в отношении обработки ошибок в веб-приложении ASP.NET MVC2, разработанном DDD?Например, давайте рассмотрим наиболее распространенный аспект веб-приложения: имя входа:

  • UserController : очевидно, координирует несколько объектов домена, чтобы в конечном итоге войти в систему или отказать пользователю, ипри необходимости перенаправить на другие части веб-интерфейса.В моем случае это несколько вызовов различных методов UserTasks, таких как IsLoggedIn () или LogIn (), плюс некоторое RedirectToAction.
  • UserTasks : имеет смысл работы по координации соответствующих объектов доменаслужбы, такие как SecurityService и объекты нижнего домена, такие как вызов SecurityService.ValidateUser () или проверка User.IsUserInactive ().
  • SecurityService : очевидно, координирует службы проверки подлинности / авторизации.Аналогично MembershipProvider, без сверхнормативного багажа.
  • Пользователь : представляет пользователя.Не анемичный, так как он имеет различные пользовательские методы, такие как IsuUserInactive (), который проверяет IsDeleted, IsLockedOut или если пользователь находится между FromDt и ThruDt.

Как вы можете всплывать ошибки, чтобы ониинформативно и не враждебно к пользователям?Вы засоряете код исключениями, а затем просто обрабатываете их все в Application_Error ()?Например, должен ли ValidateUser () генерировать ArgumentNullException (), если пароль пуст, и AuthenticationException (), если пароль неверный, или возвращать bool = false?Если последнее, как вы сообщите пользователю о том, что вызвало сбой проверки?

1 Ответ

0 голосов
/ 01 сентября 2010

Я предполагаю, что вы используете WhoCanHelpMe / S # arp Architecture, основанную на соглашениях об именах, которые я вижу? Если это так, я бы настоятельно рекомендовал взглянуть на эту статью , которая демонстрирует реализацию более чистого уровня сервисов приложений. Посмотрите на результат ActionConfirmation, возвращаемый из сервисного уровня; мы нашли, что это идеальный способ вернуть менее неприятный результат ошибки из слоя Tasks.

...