2015-12-15 2 views
0

У меня есть сайт, на котором у меня есть клиенты и операторы. Оба должны быть зарегистрированы. Клиент основан на IdentityUser и распространяется со всеми типами информационных полей клиента, такими как адрес и дата рождения. Для оператора мне нужна совершенно другая информация, например, отдел.Имеют несколько объектов IdentityUser

Сначала у меня был объект ApplicationUser (полученный от IdentityUser), объект Customer со ссылкой на объект ApplicationUser (отношение 1: 1, не принудительное) и объект Operator также со ссылкой на объект ApplicationUser.

Мне интересно, правильно ли это. Я задавался вопросом, невозможно ли иметь объект CustomerUser, полученный из IdentityUser, и объект OperatorUser, также полученный из IdentityUser.

В основном вопрос заключается в том, как обращаться с несколькими типами пользователей в приложении MVC6 ASPNet5 с использованием AspNet Identity. Я специально не смотрю, как использовать роли, поскольку это все равно не будет отвечать на вопрос о том, как обрабатывать различные настройки свойств.

ответ

1

Вы задаете классический вопрос о композиции по сравнению с наследованием. Обычно лучшим советом здесь является предпочтение композиции над наследованием. Иногда состав может казаться неинтуитивным ... наши мозги склонны к ментальной модели «оператора» является пользователем «и» заказчиком является пользователя ». Но вы можете так же легко моделировать отношения как «клиент/оператор (или другая системная роль), который имеет учетных данных пользователя».

Трудно сказать, что один из них более правильный, чем другой, но использование композиции будет лучше соответствовать несоответствию импеданса ОРВ EF, чем иерархии классов для вашей модели сущности. Вам просто нужно быть более осторожным в моделировании отношений (направленность, мощность и т. Д.) И о нулевых ссылках при запросе.