leo*_*ora 3 asp.net-mvc viewmodel
我有一个asp.net-mvc网站,几乎是一个CRUD应用程序,但我也在webview之外做一些添加和更新(从电子表格上传等). 基于这篇文章,我试图将MVC项目之外的逻辑变成一个单独的共享项目,这样我就可以在所有场景中重用相同的代码,并且我试图隔离和分离我的"读取"viewModels,它们是绑定的从"编辑"viewModels显示的UI,表示在表单帖子上发布到服务器的内容.
我在解决方案(domainobjects,importexport等)中有许多与其他解决方案共享的项目,MVC项目在MVC项目中有以下目录
我的ViewModels文件夹表示我绑定到我的视图的对象(一个容器对象,通常包括:
这样的事情:
 public class OrderViewModel
 {
       public Order MyOrder {get;set;}
       public IEnumerable<SelectListItem> OrderTypes {get;set;}
       public IEnumerable<SelectListItem> Sizes {get;set;}
 }
我的EditViewModels文件夹表示我从表单发布到服务器的对象,因此它们通常是更简单的平面对象,只有在我添加或更新数据库之前填充域对象的主要内容,如下所示:
public class OrderEditViewModel
{
      public int Id {get;set;}
      public int OrderTypeId {get;set;}
      public int SizeId {get;set;}
}
我的主要问题是当我在我的Controller类中有一个方法时,通常看起来像这样(简化):
  public ActionResult Update(OrderEditViewModel order)
  {
         var existingOrder = _repository.GetOrder(order.Id);
         existingOrder.Name = order.Name;
         existingOrder.Size = _repository.GetSize(order.SizeId);
         existingOrder.Price = order.Price;
         _repository.Save(existingOrder);
         return Json( Result = "Success");
  }
我试图弄清楚如何在MVC项目之外获得尽可能多的代码,但这迫使我将所有类移到MVC项目之外的EditViewModel中,以便可以重用这些对象.
有没有人认为将这些"Post"数据结构归类于MVC项目之外是有问题的.鉴于它的"viewmodel"类,将它从视图移开是错误的,但我没有看到任何其他方式在MVC项目之外共享此代码.也许这里的"viewModel"这个名字可能错了?
您的视图模型特定于您的视图,不应与其他任何内容相关.它们包含其他任何不应该关注的内容,例如您的选择列表.因此,它们应该保留在您的UI中.
在我看来,这篇文章是创建一种业务逻辑依赖于UI(或至少是UI模型,即视图模型)的情况,我认为这是错误的方法.UI应该能够使用业务逻辑,而业务逻辑不知道UI是什么.它可以是一个网站,一个胖客户端,一个移动客户端,一个Web服务等......通过使这个逻辑依赖于您的视图模型,您现在正在制作任何非基于Web的未来服务依赖于这些.
然而,这是一个简单的CRUD应用程序,在简单的CRUD应用程序中,您通常可以采用许多快捷方式,因为它不值得额外的工程工作.我通常不会直接在View Model中将域对象传递给视图.但在这种情况下,它可能是最好的选择.
但是,如果您想"正确"地执行此操作,则需要创建更多关注点分离.您的域和UI层需要更多分离.您可以创建单独的视图和域模型,然后在它们之间进行映射.这可以防止业务层了解有关UI的任何信息.
我可能会创建一个处理您的逻辑的服务层.例如:
_orderService.UpdateOrder(order.Id, order.Name, order.Price);
| 归档时间: | 
 | 
| 查看次数: | 508 次 | 
| 最近记录: |