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. 东芝300D粉盒清零

    东芝300D粉盒清零 1:打开前盖 2:按"OK"键3秒,等 显示 "更换硒鼓"(注:不用选 是/否,直接进入第3步) 3:按"启用"键 4 ...

  2. zookeeper (二) paxos & fast paxos & FastLeaderElection

    参考文章: http://blog.csdn.net/xhh198781/article/details/10949697 paxos->fast paxos->FastLeaderEle ...

  3. Django纪要

    Django流程 mvt 创建工程 路由的引导 web 应用程序b发送请求 -->uwsgi-->Django框架-->接收请求处理业务逻辑返回响应-->b本质 接收请求 业务 ...

  4. UDP丢包原因总结

    丢包检查方法 给每个UDP包编号,对比收发端的接收到的包.对于UDP协议层上的包,例如RTP包,可以从RTP包中读出包的序列号进行判断. 抓包.发送端和接收端分别抓包.linux下可以使用tcpdum ...

  5. tig

    /******************************************************************************* * tig * 说明: * tig便于 ...

  6. js判断字符串是否以指定字符串开头或是否包含指定字符串

    1.  用js判断一个字符串是否是以某个子字符串开头如:ssss001是否以ssss开头, 可以这样做: 1 2 3 4 5 6 var fdStart = strCode.indexOf(" ...

  7. bitcoinjs-lib 哈希交易之多笔交易合并。

    转账的时候需要手动寻找每一笔未花费记录实在太费时. 比特币转账需要提取或合并所有未花费的交易中的比特币,才能实现交易. import * as bitcoin from 'bitcoinjs-lib' ...

  8. Oracle JDBC prefetch: how to avoid running out of RAM

    Using Oracle java JDBC (ojdbc6 11.2.0.4), loading a query with many rows takes forever (high latency ...

  9. SNF快速开发平台2019-权限管理模型实践-权限都在这里

    其它权限实践系列文章: 1.角色.权限.账户的概念理解-非常全的理论讲解权限控制 https://www.cnblogs.com/spring_wang/p/10954370.html 2.权限管理模 ...

  10. LR 算法总结--斯坦福大学机器学习公开课学习笔记

    在有监督学习里面有几个逻辑上的重要组成部件[3],初略地分可以分为:模型,参数 和 目标函数.(此部分转自 XGBoost 与 Boosted Tree) 一.模型和参数   模型指给定输入xi如何去 ...