我已阅读 this 并对此感到疑惑。

我的应用程序包含 4 层

  • 网络项目/用户界面
  • 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。我已经阅读了 automapper,但它是否处理这种情况,如果是,那么如何处理?
    到目前为止,我决定将虚拟机移动到实体层,实体层将连接到所有三层,以便我可以在同一层发送和接收数据,
    还有其他好主意吗?

    这就是我将数据从 UI 传递到 BLL 的方式
                 public ActionResult Create(CompanyVMIndex companyVM)
                 {
                   if (ModelState.IsValid)
                      {
                         //Calling BLL here
                         BLLFunction(companyVM)
    
                       }
    
                        return View("Index");
                }
    

    然后在 BLL 和 DAL 中类似的东西与 Automapper
        public int BLLfunction(CompanyVMIndex CompanyVM)
        {
    
        }
    

    现在,我如何传递数据,因为 BLL 没有 CompanyVMIndex 的定义,它是一个 VM 并且在 Web UI 中

    最佳答案

    如果您想要“纯”,那么您的 BLL 或任何其他层将永远不会看到 ViewModel(或者,通常,您发送到 View 的任何模型)。它只会用于 Controller 和 View 之间的通信。

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

    通过这种方式,ViewModel 准确地包含了 Controller 与 View 通信所需的内容,以及 View 与 Controller 通信所需的内容。 BLL 可以是关于业务逻辑的,并且可能使用不完全对应于任何 ViewModel 的类。

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

    关于c# - 在 N 层 ASP .NET MVC 应用程序中查看模型位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30796783/

    10-13 06:06