В моем приложении я создаю серию классов проверки, чтобы проверить, например, что введенное пользователем свойство Name класса (из WinForm) не превышает размер varchar () в базе данных.
В настоящее время код проверки будет выдавать пользовательское исключение, если поле Имя слишком большое. (При обнаружении пользовательского интерфейса пользовательское исключение будет отображать пользовательское сообщение об исключении в MessageBox, в отличие от моей общей формы ошибок для обычных исключений.) Классы проверки находятся в библиотеке классов приложения и определены как Friend. Поток выглядит так:
- Уровень публичной службы DLL, используемый WinForms - (вызовы) -> Уровень проверки друзей
- Уровень публичной службы DLL, используемый WinForms - (вызовы) -> Уровень доступа к дружественным данным, если проверка прошла успешно.
Упрощенный пример:
Public Shared Sub CreateCustomer(cust as Customer)
Validation.Customer.ValidateForCreate(cust) ' scoped as Friend
Dal.Customer.Create(cust) ' scoped as Friend
End Sub
Является ли "умным" дизайном, чтобы слой проверки выдавал пользовательские исключения обратно в пользовательский интерфейс при сбое проверки?
Лучше ли просто возвращать значение True / False из слоя проверки вместе со строковым сообщением о том, что не удалось, и обработчик уровня обслуживания обрабатывает исключения?
Лучше ли просто возвращать значение True / False из слоя проверки, и чтобы уровень служб выдавал пользовательскому интерфейсу значение True / False вместе с сообщением String о том, что не удалось?
Я пытаюсь сохранить объектно-ориентированный подход. Мое мнение таково, что создание пользовательских исключений не нарушает принципы ООП, но я хотел бы, чтобы другие мнения:)