• MVC中Model BLL层Model模型互转


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

  • 相关阅读:
    通用分页后台显示
    自定义的JSP标签
    Java反射机制
    Java虚拟机栈---本地方法栈
    XML建模实列
    XML解析与xml和Map集合的互转
    [离散数学]第二次作业
    [线性代数]2016.10.13作业
    [数字逻辑]第二次作业
    [线性代数]2016.9.26作业
  • 原文地址:https://www.cnblogs.com/weiweithe/p/4305781.html
Copyright © 2020-2023  润新知