Я пытаюсь понять и определить хорошие практики для разработки моделей вашего приложения / домена (POCOs / DTOs).
Допустим, у меня есть следующая таблица базы данных, Account:
UserID int
Email varchar(50)
PasswordHash varchar(250)
PasswordSalt varchar(250)
Конечно, EF4 будет строить сущность следующим образом:
public class Account
{
public int UserID { get; set; }
public string Email { get; set; }
public string PasswordHash { get; set; }
public string PasswordSalt { get; set; }
}
Теперь, скажем,У меня есть модель представления для регистрации нового пользователя, которая может выглядеть примерно так:
public class RegistrationViewModel
{
public string Email { get; set; }
public string Password { get; set; }
}
Наконец, у меня есть служба, которая должна зарегистрировать пользователя:
public class RegistrationService
{
public void RegisterUser(??? registration)
{
// Do stuff to register user
}
}
Iпытаюсь выяснить, что передать в метод RegisterUser.Модель представления, конечно же, находится под моим веб-приложением (уровень представления), поэтому я не хочу, чтобы это передавалось моему сервису.
Итак, я думаю о одной из четырех возможностей:
1) Установите модель службы, которая похожа, если не идентична, на RegistrationViewModel, и используйтеthis:
public class RegistrationServiceModel
{
public string Email { get; set; }
public string Password { get; set; }
}
public class RegistrationService
{
public void RegisterUser(RegistrationServiceModel registration)
{
// Do stuff to register user
}
}
2) Настройте интерфейс модели и унаследуйте это в моей модели представления и настройте мой метод для принятия интерфейса:
public interface IRegistrationModel
{
string Email;
string Password;
}
public class RegistrationServiceModel : IRegistrationModel
{
public string Email { get; set; }
public string Password { get; set; }
}
public class RegistrationService
{
public void RegisterUser(IRegistrationModel registration)
{
// Do stuff to register user
}
}
3)Передайте сущность Account, выполнив сопоставление RegistrationViewModel-to-Account в моем контроллере:
public class RegistrationService
{
public void RegisterUser(Account account)
{
// Do stuff to register user
}
}
4) Переместите мою модель представления из презентации на уровень домена / службы и передайте ее в службуМетод:
public class RegistrationService
{
public void RegisterUser(RegistrationViewModel account)
{
// Do stuff to register user
}
}
Ни один из этих трех сценариев не кажется идеальным, так как я вижу проблемы в каждом из них.Так что мне интересно, есть ли другой метод, о котором я не могу думать.
Каковы хорошие методы для этого?
Заранее спасибо.