查看 N 层 ASP .NET MVC 应用程序中的模型位置



我读过这篇文章,想知道这个。

我的应用程序包含 4 层

  1. 网页项目/用户界面
  2. DAL (包含 EF)
  3. 实体层

到目前为止,我已经将 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。我已经通过自动映射器阅读过,但它是否可以处理这种情况,如果是,那么如何?截至目前,我已决定将虚拟机移动到实体层,该实体层将连接到所有三个层,以便我可以在同一层中发送和接收数据,还有其他好主意吗?

这就是我将数据从 UI 传递到 BLL 的方式

             public ActionResult Create(CompanyVMIndex companyVM)
             {
               if (ModelState.IsValid)
                  {
                     //Calling BLL here
                     BLLFunction(companyVM)
                   }
                    return View("Index");
            }

然后在 BLL 中以及在带有自动映射器的 DAL 中的类似内容

    public int BLLfunction(CompanyVMIndex CompanyVM)
    {
    }

现在,我如何将数据作为 BLL 传递没有 CompanyVMIndex 的定义,它是一个虚拟机和 Web UI

如果你想是"纯的",那么 ViewModel(或者,一般来说,你发送到视图的任何模型)永远不会被你的 BLL 或任何其他层看到。它只会用于控制器和视图之间的通信。

当需要从 BLL 检索数据或将数据发送回 BLL 时,将使用其他类。数据将被复制到 ViewModel 类和从 ViewModel 类复制。

这样,ViewModel 就准确地包含控制器与视图通信所需的内容,以及视图与控制器通信所需的确切内容。BLL 可以与业务逻辑有关,并且可能使用不完全对应于任何 ViewModel 的类。

例如,ViewModel 可能包含有关客户及其公司的信息,以及有关客户在过去 3 个月内订购的产品的信息。它还可能包含用于在视图中创建用户界面元素的其他数据:例如,运输方式列表。这些数据几乎可以肯定来自几个不同的 BLL 类和方法。此数据的形状面向视图和控制器之间的通信。BLL 类面向业务逻辑,可能还有数据库。

最新更新