Как правильно определить стратегию исключений в корпоративном приложении .NET с шаблоном DDD?

Я разрабатываю корпоративный проект, используя шаблон DDD. В моем решении C# есть следующие проекты:

  • Модель предметной области — проект DLL

  • WebUI — проект ASP.NET MVC3

  • DesktopUI — проект WPF

  • DAL — Entity Framework Code First

  • Persistance — SQL Server База данных

Этот проект невелик, но я пытаюсь использовать все передовые методы корпоративных приложений.

Теперь я хотел бы дать определение стратегии исключений, но я не уверен, как к этому подойти. Я, вероятно, должен использовать блоки обработки исключений и ведения журнала Enterprise Library, но я не уверен, как вписать это в картину. Некоторые конкретные сценарии, которые я пытаюсь решить в своей голове, следующие:

  • Если новый объект создается пользователем в приложении WPF и нажимается кнопка «Сохранить», как следует сообщать об ошибке и регистрировать ее в случае возникновения исключения на разных уровнях. (например, объект не создан должным образом в соответствии с правилами домена, или произошла ошибка при попытке сохранить новый объект в базе данных)

  • Пользователь пытается извлечь неизвестный объект из базы данных (например, из WebUI, указав идентификатор неизвестного объекта в URL-адресе)

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

Также я должен создать одно пользовательское исключение для каждой ошибки на каком-либо уровне (например, UserAlreadyExistInDatabaseException для попытки сохранить двух пользователей с одним и тем же адресом электронной почты и UnknownUserDatabaseException для попытки получить неизвестного пользователя из БД) или у меня должен быть один тип исключения, который обрабатывает многоуровневые ошибки (например, DatabaseException, а затем дифференцировать ошибки с помощью настраиваемого свойства или свойства Exception.Message).

5
задан matori82 25 June 2012 в 23:58
поделиться