我有一个 asp.net-mvc 站点,它几乎是一个 CRUD 应用程序,但我也在 web 视图之外进行了一些添加和更新(从电子表格等上传)。 基于这篇文章,我试图将 MVC 项目之外的尽可能多的逻辑放入一个单独的共享项目中,这样我就可以在所有场景中重用相同的代码,并且我试图隔离和分离绑定的“读取”视图模型到 UI 以从“编辑”视图模型中显示,这些视图模型表示在表单发布上发布到服务器的内容。
我在解决方案中有许多项目(域对象、importexport 等)与其他解决方案共享,而且 MVC 项目在 MVC 项目中有以下目录
- 控制器
- 意见
- 视图模型
- 脚本
- 编辑视图模型
我的 ViewModels 文件夹代表我绑定到我的视图的对象(一个容器对象,通常包括:
- 域对象和
- 一堆 IEnumerable 的 SelectListItem 来填充 UI 下拉列表等
像这样的东西:
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 项目之外获取尽可能多的代码,但这迫使我将 EditViewModel 中的所有类移到 MVC 项目之外,以便可以重用这些对象。
有没有人认为将这些“发布”数据结构归类在 MVC 项目之外有什么问题。鉴于它是一个“视图模型”类,将其从视图中移开感觉不对,但我看不到任何其他方式可以在 MVC 项目之外共享此代码。也许这里的“viewModel”名称可能是错误的?