我正在尝试在我的 .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 实体是否有意义?