У меня есть небольшая дилемма, которая может помочь вам разобраться.Решение для определения класса
Я сегодня работаю над модификацией членства ASP.NET, чтобы добавить уровень косвенности. В принципе, членство ASP.NET поддерживает пользователей и роли, оставляя все правила авторизации на основе того, принадлежит ли пользователь роли или нет.
Что мне нужно сделать, это добавить концепцию функции, в которой пользователь будет принадлежать роли (или ролям), а роль будет иметь одну или несколько функций, связанных с ними, что позволит нам санкционировать определенное действие на основе если пользователь принадлежит к роли, у которой есть назначенная функция.
Сказав это, моя проблема не имеет к этому никакого отношения, это общая проблема дизайна класса.
Я хочу предоставить абстрактный метод в моем базовом классе RoleProvider для создания функции (и ее сохранения), но я хочу сделать это необязательным для сохранения описания этой функции, поэтому мне нужно создать мой метод CreateFunction с помощью перегрузка, одна подпись, принимающая имя, а другая - имя и описание.
я могу думать о следующих сценариях:
Создать обе подписи с абстрактным модификатора. Это связано с тем, что разработчик может не соблюдать лучшую практику, которая говорит о том, что одна перегрузка должна вызывать другую с нормализованными параметрами, а логика должна быть только в последней (той, которая имеет все параметры). Кроме того, неплохо потребовать, чтобы оба метода были реализованы разработчиком.
Создайте первый, как виртуальный, а второй, как абстрактный. Вызвать второе из первого, позволить разработчику переопределить поведение. У этой проблемы есть одна и та же проблема: разработчик может принимать «плохие решения» при ее переопределении.
То же, что и раньше, но не позволяйте первому быть переопределенным (удалить виртуальный модификатор). Проблема здесь в том, что разработчик должен знать, что метод может быть вызван с нулевым описанием и должен обрабатывать эту ситуацию.
Я думаю, что лучшим вариантом является третий один ...
Как этот сценарий обрабатывается в целом? Когда вы создаете абстрактный класс и включаете перегруженные методы. Это не то, что редко я думаю ...