#c# #design-patterns
#c# #шаблоны проектирования
Вопрос:
У меня есть проект C # под названием Authentication, который позволяет пользователям входить в систему и проверять свои учетные данные для входа, и если проходит, возвращает токен.
Я хочу повторно использовать этот проект аутентификации C # для других приложений, которые я разрабатываю. Является ли хорошей практикой хранить всех пользователей из разных приложений в одной таблице или есть лучший способ кодирования для одного проекта аутентификации для многих приложений?
Комментарии:
1. Вам не нужно повторно использовать базу данных при повторном использовании кода. каждое приложение может иметь свою собственную базу данных с таблицей Users. Если вам не нужно какое-то централизованное решение?
Ответ №1:
Это зависит.
Существует разница между повторным использованием кода и повторным использованием инфраструктуры. Первое в порядке, поскольку вы получаете четкое разделение между приложениями. Совместное использование базы данных не рекомендуется, поскольку это может привести к уязвимостям в системе безопасности, если вы не разработаете ее тщательно.
Я бы также разделил понятие пользователей и учетных записей. Учетная запись используется для входа в приложение и загрузки правильных разрешений. т. Е. Учетная запись контролирует, что пользователь может делать в приложении, в то время как объект «user» описывает самого пользователя.
Если вы разделите его таким образом, гораздо проще создать повторно используемую библиотеку, поскольку все, что связано с аутентификацией / авторизацией, находится в ее отдельной части. Это потому, что дизайн аутентификации редко меняется. Приложения обычно отличаются информацией, описывающей пользователя, и типом настройки, которую хочет иметь каждый пользователь.
Короткий ответ:
- Разделите все, что связано с аутентификацией и авторизацией, на объект «Учетная запись».
- Соберите все, описывающее пользователя, в объект «User».
- Повторно используйте часть учетной записи, но создавайте «пользовательскую» часть в каждом приложении.
Ответ №2:
Никогда, никогда не делитесь базой данных между службами. Это создаст кошмар обслуживания. Каждая БД должна быть спроектирована вокруг (и после) ограниченного контекста, обрабатываемого относительным микросервисом.
В вашем случае это означает, что одна БД для хранения данных аутентификации, затем другая БД для каждой службы с относительными данными.
Совершенно нормально иметь Users
таблицу в отдельных базах данных, содержащих некоторые повторяющиеся данные. До тех пор, пока вы достаточно усердны и имеете хорошую стратегию для синхронизации этих данных.