热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

我已经读过this,对此很纳闷.我的应用程序包含4层Web项目UIBLLDAL(包含EF)实体层到目前为止,我已经将VM放置在UI层中,并且它是不同类的组合.像这样的东西p

我已经读过this,对此很纳闷.

我的应用程序包含4层

> Web项目/ UI
> BLL
> DAL(包含EF)
>实体层

到目前为止,我已经将VM放置在UI层中,并且它是不同类的组合.像这样的东西

public class CompanyVMIndex
{
public CompanyVM Company { get; set; }
public BillingAddressVM BillingAddress { get; set; }
public List ShippingAddress { get; set; }
public List 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类面向业务逻辑,也可能面向数据库.


推荐阅读
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 本文深入解析了Django框架中的MVT(Model-View-Template)设计模式,详细阐述了其工作原理和应用流程。通过分析URL模式、视图、模型和模板等关键组件,读者将全面理解Django应用程序的架构体系,掌握如何高效地构建和管理Web应用。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 本文详细介绍了如何在 Django 项目中使用 Admin 管理后台,包括创建超级用户、启动项目、管理数据模型和修改用户密码等步骤。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
author-avatar
邹昕明
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有