У меня есть многоуровневое приложение, которое отправляет команды на бизнес-уровень (на самом деле, приложение основано на ncqrs framework , но я не думаю, что это важно здесь).
Команда выглядит так:
public class RegisterUserCommand : CommandBase
{
public string UserName { get; set; }
public string Email{ get; set; }
public DateTime RegistrationDate { get; set; }
public string ApiKey {get; set;} // edit
}
В этом классе нет логики, только данные.
Я хочу, чтобы пользователи вводили свое имя пользователя, адрес электронной почты, и я хочу, чтобы система использовала текущую дату для создания команды.
Что лучше между:
создать строго типизированное представление на основе RegisterUserCommand, затем ввести дату и ключ APi непосредственно перед отправкой на бизнес-уровень?
создать класс RegisterUserViewModel, создать представление с этим классом и создать объект команды на основе ввода представления?
Я написал следующий код (для решения № 2):
public class RegisterController : Controller
{
//
// GET: /Register/
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(RegisterUserViewModel registrationData)
{
var service = NcqrsEnvironment.Get<ICommandService>();
service.Execute(
new RegisterUserCommand
{
RegistrationDate = DateTime.UtcNow,
Email= registrationData.Email,
UserName= registrationData.Name,
ApiKey = "KeyFromConfigSpecificToCaller" // edit
}
);
return View();
}
public class RegisterUserViewModel
{
[Required]
[StringLength(16)]
public string Name { get; set; }
[Required]
[StringLength(64)]
public string Email{ get; set; }
}
}
Этот код работает ... но мне интересно, если я выберу правильный путь ...
спасибо за советы
[Редактировать] Поскольку Datetime, похоже, вызывает недопонимание, я добавил еще одно свойство "ApiKey", которое также должно быть установлено на стороне сервера, из веб-слоя (не из командный слой)
[Редактировать 2] Попробуйте предложение Эрика и реализуйте первое решение, которое я себе представил:
[HttpPost]
public ActionResult Index(RegisterUserCommand registrationCommand)
{
var service = NcqrsEnvironment.Get<ICommandService>();
registrationCommand.RegistrationDate = DateTime.UtcNow;
registrationCommand.ApiKey = "KeyFromConfigSpecificToCaller";
service.Execute(
registrationCommand
);
return View();
}
... Это приемлемо?