Fac*_*tio 5 single-responsibility-principle command-pattern asp.net-mvc-3
我正在尝试在我的.NET MVC 3应用程序上实现此命令模式,专门用于保存对Thing的编辑.我还没有决定如何继续.在我得到实际问题之前,这里是简化的代码:
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...
}
}
Run Code Online (Sandbox Code Playgroud)
我的EditThingViewModel完全与我的域断开连接,该域由POCO类组成.看起来我的EditThingCommand应该如下所示:
public class EditThingCommand
{
Thing ModifiedThing;
}
Run Code Online (Sandbox Code Playgroud)
但是,构建ModifiedThing仍然会在我的控制器中发生.这是本案中的大部分工作.在构建ModifiedThing时(以及应用于它的"旧"时间戳进行乐观并发检查),剩下的就是命令在我的数据上下文上调用Update.
显然,能够使用其他命令轻松装饰它是有价值的,但我也希望能够在我的控制器之外移动ModifiedThing的构造.(也许这个问题就是这个问题.)EditThingCommand在我的域中,没有对EditThingViewModel的引用,所以它不能去那里.在我的表示层中有另一个命令将我的viewmodel映射到我的poco实体是否有意义?
在其他项目上使用这种模式几个月后,我很明显这个特定项目上的命令太笼统,因此太复杂,需要太多设置。例如,最好创建一个 EditThingTitleCommand 和 MoveThingPiecesCommand 等,并从它们自己的 ActionMethods 中调用它们。
换句话说,在使用命令模式时,不要仅仅使用命令来替代典型的 CRUD 操作。越具体,好处越多。
| 归档时间: |
|
| 查看次数: |
836 次 |
| 最近记录: |