Какова наилучшая практика для возврата ошибки бизнес-правила в BLL? Должен ли я просто генерировать исключения и ловить их на уровне презентации, shoudl Я возвращаю какой-то объект, который содержит информацию о типе исключений?
Слово "возвращение" здесь сложно.
Основным достоинством многоуровневой конструкции является ортогональность. Вы должны иметь возможность вызывать классы в вашем BLL из совершенно другого интерфейса, чем тот, который вы сейчас используете, и обрабатывать ведение журнала совершенно по-другому.
Если исключение можно обрабатывать без вмешательства пользователя или уведомления, вы должны, как правило, делать это в BLL. Если исключение должно быть привлечено к вниманию пользователя или занесено в журнал, позвольте ему перейти к пользовательскому интерфейсу, который может реализовать уведомление и протоколирование, не создавая такие вещи в BLL.