trurl123
@trurl123

Булевское свойство или функция

У нас на работе возник спор по поводу добавления булевского свойства на C#.
Пусть у нас есть класс, отвечающий за хранение параметров авторизации. Авторизация может быть по логину или по сертификату.
Спор в том, стоит ли добавлять свойство для определения типа авторизации, либо ориентироваться в коде на заполненность поля сертификат.
Класс в дальнейшем сериализуется в xml.
  • Вопрос задан
  • 3560 просмотров
Пригласить эксперта
Ответы на вопрос 3
С точки зрения эволюции кода, безопаснее использовать, например, перечисления (enum). Не «правильнее», а именно «безопаснее», в смысле будущих модификаций.

Вдруг (наверняка?) у вас возникнет необходимость в дополнительных способах аутентификации (OAuth например)? В случае использования перечислений (или других аналогов шаблона «визитёр» — типа case classes из Scala), среда разработки подскажет вам, где вы забыли учесть новый вариант аутентификации. Не знаю как Visual Studio, а Eclipse или IDEA выдадут предупреждение в следующем коде:
switch (principal.getAuthMethod()) {
case LOGIN: /* Login / password auth */
    break;
case CERTIFICATE: /* Certificate auth */
    break;
}

как только добавится новый тип аутентификации (OAUTH). Это даст вам знать, что вы забыли учесть новый способ ещё в каком-то месте.

Так что если IDE помогает в таком деле, то почему бы этим не воспользоваться?
Ответ написан
EugeneOZ
@EugeneOZ
Заполненность поля сертификат говорит лишь о сертификате, о типе авторизации оно говорить не может. Может лишь косвенно намекать и этот намёк по стечению обстоятельств может быть правдивым — но полагаться на это 100% нельзя, особенно учитывая возможную эволюцию кода.
Ответ написан
@mayorovp
Идеологически правильнее использовать наследование — ввести поле абстрактного класса «данные авторизации», и два производных класса — «авторизация по логину» и «авторизация по сертификату».
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы