私はビジネスレイヤーにコマンドを送信するレイヤードアプリケーションを持っています(実際には、アプリケーションはncqrsフレームワークに基づいていますが、ここでは重要ではないと思います)。
コマンドは次のようになります:
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クラスを作成し、このクラスでビューを作成し、ビュー入力に基づいてコマンドオブジェクトを作成しますか?
私は次のコードを書きました(ソリューションn°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; }
}
}
このコードは機能しています...しかし、正しい方法を選択したかどうか疑問に思います...
アドバイスありがとう
[編集]日時が誤解を招くようであるため、(コマンドレイヤーからではなく)Webレイヤーから、サーバー側にも設定する必要がある別のプロパティ「ApiKey」を追加しました。
[編集2] Erikの提案を試して、私が想像した最初のソリューションを実装します。
[HttpPost]
public ActionResult Index(RegisterUserCommand registrationCommand)
{
var service = NcqrsEnvironment.Get<ICommandService>();
registrationCommand.RegistrationDate = DateTime.UtcNow;
registrationCommand.ApiKey = "KeyFromConfigSpecificToCaller";
service.Execute(
registrationCommand
);
return View();
}
...それは受け入れられますか?