c#-视图模型放置在N层ASP .NET MVC应用程序中

我已经读过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类面向业务逻辑,也可能面向数据库.

上一篇:c#-从View中的ViewModel迭代ICollection


下一篇:ViewModel源码分析