特に編集内容を Thing に保存するために、.NET MVC 3 アプリケーションにこのコマンド パターンを実装しようとしています。どのように進めていくか決めかねています。実際の質問に入る前に、簡略化したコードを次に示します。
public class ThingController
{
private readonly ICommandHandler<EditThingCommand> handler;
public ThingController(ICommandHandler<EditThingCommand> handler)
{
this.handler = handler;
}
public ActionMethod EditThing(int id)
{
...build EditThingViewModel and return with View...
}
[HttpPost]
public ActionMethod EditThing(int id, EditThingViewModel vm)
{
var command = new EditThingCommand
{
...not sure yet...
};
this.handler.Handle(command);
...redirect somewhere...
}
}
私の EditThingViewModel は、POCO クラスで構成されるドメインから完全に切り離されています。私の EditThingCommand は次のようになります。
public class EditThingCommand
{
Thing ModifiedThing;
}
ただし、ModifiedThing のビルドは引き続きコントローラーで行われます。それがこの場合の作業の大部分です。ModifiedThing がビルドされるまで (およびオプティミスティック コンカレンシー チェックのために "古い" タイムスタンプが適用されるまで) は、データ コンテキストで Update を呼び出すコマンドだけが残っています。
明らかに、他のコマンドで簡単に装飾できることには価値がありますが、 ModifiedThing の構築をコントローラーの外に移動できるようにしたいと考えています。(おそらく、この質問はまさにそれに関するものです。) EditThingCommand は私のドメインにあり、EditThingViewModel への参照がないため、そこに移動できません。ビューモデルを poco エンティティにマッピングするために、プレゼンテーション層に別のコマンドを用意することは理にかなっていますか?