首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MVC中Model跟BLL层Model模型转换思想

2013-03-16 
MVC中Model和BLL层Model模型转换思想一. 模型通常可以做2种:充血模型和失血模型,一般做法是模型就是模型,

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类型,所以在这里可以轻松转换。

热点排行