我已经读过this,对此很纳闷.
我的应用程序包含4层
> Web项目/ UI
> BLL
> DAL(包含EF)
>实体层
到目前为止,我已经将VM放置在UI层中,并且它是不同类的组合.像这样的东西
public class CompanyVMIndex
{
public CompanyVM Company { get; set; }
public BillingAddressVM BillingAddress { get; set; }
public List<ShippingAddressVM> ShippingAddress { get; set; }
public List<CompanyContactVM> CompanyContact { get; set; }
}
现在让我感到困惑的是,如何将这些数据从UI发送到BLL,然后再发送DAL.我已经阅读过自动映射器,但是它可以处理这种情况,如果可以,那么如何处理?
到目前为止,我已经决定将VM移到实体层,该实体层将连接到所有三个层,以便我可以在同一层中发送和接收数据,
还有其他好主意吗?
这就是我将数据从UI传递到BLL的方式
public ActionResult Create(CompanyVMIndex companyVM)
{
if (ModelState.IsValid)
{
//Calling BLL here
BLLFunction(companyVM)
}
return View("Index");
}
然后在BLL中使用Automapper在DAL中进行类似操作
public int BLLfunction(CompanyVMIndex CompanyVM)
{
}
现在,我如何通过BLL传递数据没有在Web UI中定义VM的CompanyVMIndex的定义
解决方法:
如果您想成为“纯”的人,那么BLL或其他任何层都不会看到ViewModel(或者,通常是发送到视图的任何模型).它将仅用于在控制器和视图之间进行通信.
当需要从BLL检索数据或将数据发送回BLL时,将使用其他类.数据将在ViewModel类之间来回复制.
这样,ViewModel精确地包含了控制器与视图进行通信所需要的内容,以及视图向回传递给控制器所需要的视图. BLL可以与业务逻辑有关,并且可以使用与任何ViewModel不完全对应的类.
例如,ViewModel可能包含有关客户及其公司的信息,以及有关客户在过去3个月内订购的产品的信息.它还可能包含用于在视图中创建用户界面元素的其他数据:例如,运输方法列表.这些数据几乎可以肯定来自几种不同的BLL类和方法.该数据的形状面向视图和控制器之间的通信. BLL类面向业务逻辑,也可能面向数据库.