MVC中Model BLL层Model模型互转

一. 模型通常可以做2种:充血模型和失血模型,一般做法是模型就是模型,不具备方法来操作,只具有属性,这种叫做失血模型(可能不准确);具备对模型一定的简单操作方法,不只是有属性的模型叫做充血模型,如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace MvcApplication1.Models
{
/// <summary>
/// 表现层实体集合
/// </summary>
public class UserCompanyViewModels
{
public UserViewModel User { set; get; }
public List<CompanyViewModel> Companys { set; get; }
public UserCompanyViewModels()
{
User = new UserViewModel();
Companys = new List<CompanyViewModel>();
}
/// <summary>
/// Bo To Vo
/// </summary>
/// <param name="user">业务层实体对象</param>
/// <param name="companys">业务层实体对象集合</param>
/// <returns>表现层实体</returns>
public UserCompanyViewModels ToVo(UserModel user, List<CompanyModel> companys)
{
UserCompanyViewModels models = new UserCompanyViewModels();
if (user != null)
{
models.User.UserID = user.UserID;
models.User.UserName = user.UserName;
}
if (companys != null && companys.Count > 0)
{
foreach (var item in companys)
{
CompanyViewModel company = new CompanyViewModel();
company.CompanyID = item.CompanyID;
company.CompanyName = item.CompanyName;
models.Companys.Add(company);
}
} return models;
}
}
/// <summary>
/// 表现层实体
/// </summary>
public class UserViewModel
{
public int UserID { set; get; }
public string UserName { set; get; }
}
/// <summary>
/// 表现层实体
/// </summary>
public class CompanyViewModel
{
public int CompanyID { set; get; }
public string CompanyName { set; get; }
}
/// <summary>
/// 业务层实体
/// </summary>
public class UserModel
{
public int UserID { set; get; }
public string UserName { set; get; }
public string UserGander { set; get; }
public string UserAddress { set; get; }
/// <summary>
/// Vo To Bo
/// </summary>
/// <param name="models">表现层实体对象</param>
/// <returns>业务层实体</returns>
public UserModel ToBo(UserCompanyViewModels models)
{
UserModel user = new UserModel();
if (models != null&&models.User!=null)
{
user.UserID = models.User.UserID;
user.UserName = models.User.UserName;
}
return user;
}
}
/// <summary>
/// 业务层实体
/// </summary>
public class CompanyModel
{
public int CompanyID { set; get; }
public string CompanyName { set; get; }
public string CompanyAddress { set; get; }
/// <summary>
/// Vo To Bo
/// </summary>
/// <param name="models">表现层实体对象</param>
/// <returns>业务层实体</returns>
public List<CompanyModel> ToBo(UserCompanyViewModels models)
{
List<CompanyModel> companys = new List<CompanyModel>();
if (models != null&&models.Companys!=null && models.Companys.Count > 0)
{
foreach (var item in models.Companys)
{
CompanyModel company = new CompanyModel();
company.CompanyID = item.CompanyID;
company.CompanyName = item.CompanyName;
companys.Add(company);
}
}
return companys;
}
}
}

在这个模型中具备了MVC中Model和BLL层model的转换方法,可能有有人要问为什么,我想说的是如果加入了这种模型转换方法,在同一controller不同action要使用的时候,就可以轻松转换页面视图模型和逻辑层模型的转换,不用重复写代码,简单的封装思想。

二. 在Controller中使用,如下:

        [HttpPost]
public ActionResult Create(FormCollection collection,UserCompanyViewModels models)
{
//如果控件有ID的话,可以通过控件Names属性来取值,如
var a = collection["User.UserID"];
try
{
// TODO: Add insert logic here
UserModel user = new UserModel();
user = user.ToBo(models);
//然后调用BLL层执行数据库User表操作Save,Update等方法 CompanyModel company = new CompanyModel();
List<CompanyModel> companys = company.ToBo(models);
//然后调用BLL层数据库Company表操作Save,Update等方法
return View("Create", models);
}
catch
{
return View("Create");
}
}

这里可以看到,因为View视图可能使用到的是一个复杂的model,这个model是业务层几个model的组合,甚至是集合List类型,所以在这里可以轻松转换。

MVC中Model BLL层Model模型互转的更多相关文章

  1. mvc中动态给一个Model类的属性设置验证

    原文:mvc中动态给一个Model类的属性设置验证 在mvc中有自带的验证机制,比如如果某个字段的类型是数字或者日期,那么用户在输入汉字或者英文字符时,那么编译器会自动验证并提示用户格式不正确,不过这 ...

  2. MVC中的七层架构

    工厂模式的七层架构 1.创建Model,实现业务实体. 2.创建IDAL,实现接口. 3.创建DAL,实现接口里的方法. 4.创建DBUtility,数据库操作类5.创建DALFactory,抽象工程 ...

  3. Spring.NET在MVC中实现业务层和UI层解耦

    最近在项目中用到了Spring.NET,使用它来实现业务层和UI层解耦.使用过程中难免遇到问题,现把遇到的一些问题整理出来,留作笔记. 使用的开发工具是vs2017,.netframework 4.6 ...

  4. 将MVC中的Controllers、Model和View分别放到单独的项目中

    Model: 新建-项目-Windows-类库 MVCTest.Model Controller:新建-项目-Windows-控制台应用程序 MVCTest.Bussiness Views:新建-项目 ...

  5. MVC中javascript直接调用Model

    最近做一个统计页面, Model从后台已经获取了数据集合,想直接在前台展示,而这个展示是需要用js生成图表的. 控制器部分代码: public ActionResult Index() { var m ...

  6. 浅谈MVC中的service层(转)

    概述 mvc框架由model,view,controller组成,执行流程一般是:在controller访问model获取数据,通过view渲染页面. mvc模式是web开发中的基础模式,采用的是分层 ...

  7. 【原创】有关Silverlight中自动生成的类中 没有WCF层edmx模型新加入的对象 原因分析。

      前端页面层:    编译老是不通过,报如下如所示错误:     -- 然后下意识的查了下 生成的cs文件,没有搜到根据edmx 生成的 对应的类.       结果整理: 1.尽管在 edmx 模 ...

  8. 关于Asp.Net MVC 中 UpdateModel 的未能更新***模型的 解决方案!

    解决方案参考: http://blog.csdn.net/hudaijun/article/details/7293129 想法: 其实,不用UpdateModel,虽然笨些,但不会出什么古怪问题.当 ...

  9. MVC中如何跳过对模型中某个属性的验证

    [HttpPost] public ActionResult Create(Users user) { ModelState.Remove(“Password”); //加上这句就行了 if (Mod ...

随机推荐

  1. Java之创建文件并写入数据

    应用场景:以OJ项目为例,创建对应的.in或.out文件,并将相关的数据写入. 核心代码如下: /** * 创建文件 * @param data * @param basedir * @param n ...

  2. 数据结构(一)二叉树 & avl树 & 红黑树 & B-树 & B+树 & B*树 & R树

    参考文档: avl树:http://lib.csdn.net/article/datastructure/9204 avl树:http://blog.csdn.net/javazejian/artic ...

  3. GuavaCache简介(一)是轻量级的框架 少量数据,并且 过期时间相同 可以用 GuavaCache

    还有一篇文章是讲解redis 如何删除过期数据的,参考:Redis的内存回收策略和内存上限(阿里) 划重点:在GuavaCache中,并不存在任何线程!它实现机制是在写操作时顺带做少量的维护工作(如清 ...

  4. js获取数组中的最大值/最小值

    目录 前言 1. 使用Math的静态方法max/min 1.1 结合ES6的扩展运算符...使用 1.2 结合apply/call方法来使用 1.3 结合reduce来使用 2. 排序获取 2.1 只 ...

  5. Spring中为什么继承了ApplicationContextAware接口就可以使用ApplicationContext对象?

    1.Spring中使用applicationContext对象 public class SpringContextUtil implements ApplicationContextAware { ...

  6. Xshell 服务器配置

    1.新建链接  2.配置公网IP  3.输入用户名和密码

  7. 支付宝小程序开发——获取位置API没有城市区号的最佳处理方案

    前言: 需要对城市区号进行判断,但是支付宝小程序提供的my.getLocation() API返回的数据中只有6位的城市行政代码,诸如:深圳(440300),并没有区号(0755),那么怎么办呢? 需 ...

  8. Spark SQL里concat_ws和collect_set的作用

    concat_ws: 用指定的字符连接字符串 例如: 连接字符串: concat_ws("_", field1, field2),输出结果将会是:“field1_field2”. ...

  9. [K8s]无yaml文件重启Pod

    在没有pod 的yaml文件时,强制重启某个pod kubectl get pod PODNAME -n NAMESPACE -o yaml | kubectl replace --force -f ...

  10. python初级(302) 6 对象(三)

    一.复习 1.什么是魔法方法? 2.什么是类的初始化函数? 二.什么是self 使用一个类可以创建多个对象实例,例如: ball1 = Ball("red", "smal ...