Должен ли я отделить ViewModel для входа и регистрации в asp.net ?

#c# #asp.net #asp.net-mvc-5

#c# #asp.net #asp.net-mvc-5

Вопрос:

В моем приложении есть 3 типа пользователей (в asp.net mvc-5): администратор, Врач и Пользователь. В папке Models я создал 3 другие папки, по одной для каждого типа пользователя. Должен ли я создать единую ViewModel, предположим, DoctorViewModel, которая будет содержать всю информацию о doctor? Или я должен создать DoctorLoginViewModel и DoctorRegistractionViewModel и так далее?

Примечание: У меня есть отдельные таблицы в базе данных для учетных данных (email и pass) и для личной информации (возраст, dob, пол и т. Д.).

Ответ №1:

Вы можете просто использовать одного пользователя модели, который будет выполнять все общие свойства с этими 3 типами.

 public class User
{
    public string Name { get; set; }
    public string LastName { get; set; }
    public UseType Type { get; set; }
}

public enum UserType
{
   User = 1,
   Doctor = 2,
   Admin = 3
}
 

И затем, если вы хотите иметь отдельные представления для каждого из пользователей, вы можете создать DoctorViewModel или UserViewModel по мере необходимости.

Я бы посоветовал вам прочитать об ауторизации на основе ролей в asp.net mvc.

Комментарии:

1. Итак, я помещу конкретную логику для каждого пользователя в их выделенные папки и помещу общие свойства в одно место?

2. Да, вы должны сохранить его таким простым, какой он есть. Используйте DotctorViewModel, если вам нужно только отобразить что-то конкретное для этой страницы, которая отличается от User или Admin. Но если 3 логики одинаковы, например (имя, фамилия и т. Д.), Вы можете использовать только одну UserViewModel и передать ее в view с дополнительным перечислением UserType для определения типа пользователя.

3. Вы не должны хранить один класс Doctor со свойством Name и один класс Username со свойством Name, это не имеет смысла. Используйте Doctor class только для добавления определенных свойств, тогда вы просто можете наследовать от пользовательского класса и расширять Doctor class, если это ваш случай.