博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
业务类与实体类的应用
阅读量:7237 次
发布时间:2019-06-29

本文共 6344 字,大约阅读时间需要 21 分钟。

  最近一直在学习MVC的基础知识,本来想将学习的心得或历程记录下来,以作为今后学些成长中的一点启发,诸多原因,还是时间不够,自己功底不够,就想着断章取义吧,慢慢积累一些想法罢了。

  从之前的一段学习视频和网友的一些源代码中找到了一些个人见解:关于业务类和实体类的关系,怎样将业务类和实体类结合实现比较复杂的业务关系。

     首先,我现在是从MVC的学习中抛出来的一些因子,如果有更多的见解,欢迎拍砖,吐槽,本人一向是对技术大神致敬的。呵呵

    实体类:UserModel

public class User{public int UserID { get; set; }[Required(ErrorMessage = "请输入用户名")][Display(Name = "用户名")][StringLength(20, ErrorMessage = "{0}在{2}位至{1}位之间", MinimumLength = 1)]public string UserName { get; set; }[Required(ErrorMessage = "请输入密码")][Display(Name = "密码")][DataType(DataType.Password)][StringLength(20, ErrorMessage = "{0}在{2}位至{1}位之间", MinimumLength = 6)]public string Password { get; set; }[Display(Name = "手机号码")][Required(ErrorMessage = "请输入手机号码")][DataType(DataType.PhoneNumber)]public string Phone { get; set; }[Display(Name = "小区")]public string Residential { get; set; }[Display(Name = "楼号")]public string FloorNo { get; set; }[Display(Name = "单元号")]public string UnitNo { get; set; }[Display(Name = "门牌号")]public string DoorplateNo { get; set; }public DateTime? SubmitTime { get; set; }}

  业务类:UserReg

public class UserReg:User{[Display(Name = "重复密码")][DataType(DataType.Password)][Compare("Password", ErrorMessage = "密码与重复密码必须相同")]public string RePassword { get; set; }[Display(Name = "记住我")]public bool Remember { get; set; }}

其中业务类UserReg继承了实体类User,当然为了代码的简洁性,我利用了继承方式,当然也可以采用非继承的方式。

主要实现什么功能呢?相比大家也能看出两个类的区别了:实体类User用于存储用户的基本信息,而UserReg是为了实现用户的注册功能,注册当然有诸多业务上的功能啦,比如类中多处来的字段RePassword 和Remember.

RePassword为了实现界面中密码两次相同的确认,Remember为了记住用户的信息。

界面代码如下:注册页面

@model Demo.Models.UserReg@{    Layout = null;}    
用户注册 @using (Html.BeginForm()) { @Html.LabelFor(user => user.UserName) @Html.TextBoxFor(user => user.UserName) @Html.ValidationMessageFor(user => user.UserName)
@Html.LabelFor(user => user.Password) @Html.PasswordFor(user => user.Password) @Html.ValidationMessageFor(user => user.Password)
@Html.LabelFor(user => user.RePassword) @Html.PasswordFor(user => user.RePassword) @Html.ValidationMessageFor(user => user.RePassword)
@Html.LabelFor(user => user.Phone) @Html.TextBoxFor(user => user.Phone) @Html.ValidationMessageFor(user => user.Phone)
@Html.LabelFor(user => user.Residential) @Html.DropDownListFor(user => user.Residential, (SelectList)ViewBag.Residential) @Html.LabelFor(user => user.UnitNo) @Html.DropDownListFor(user => user.UnitNo, (SelectList)ViewBag.UnitNo) @Html.LabelFor(user => user.FloorNo) @Html.DropDownListFor(user => user.FloorNo, (SelectList)ViewBag.FloorNo) @Html.LabelFor(user => user.DoorplateNo) @Html.DropDownListFor(user => user.DoorplateNo, (SelectList)ViewBag.DoorplateNo)
验证码换一换
登陆 }

 

显示情况如下:

问题来了,比如:用户名,密码,重复密码等都是从类中获取的信息,若是只用实体类,则”重复密码” 不能有相同的方式实现了,只能是固定文字:即

<span>重复密码:</span>,那么界面的变动显得不那

 

么灵活,都需要到界面来调整,从[Display(Name = "重复密码")]实现就变得困难了。当然

我这种比喻(例子)显得不那么好,相同的道理,为了折中折中实现业务的需求,而实体类又缺少对应的字段,怎么办?业务类可以考虑。

将业务类作为实体传输的媒介:见代码截图

总之:实体类实现对数据的操作,而业务类实现对业务上的操作。两者在运用上会有出现相同字段的情况,那么可以考虑通过转换来实现。

下面我列举了类似的情况,可以参考下:

//实体类public class UserMode{     public string UserName {
get;set;} public string Password{
get;set;} public string Gender{
get;set;} public string Age{
get;set;} public DateTime SubTime{
get;set;} }//登录类public class UserLogin{ public string UserName{
get;set;} public string Password{
get;set;} public int Remember{
get;set;}}//注册类public class UserReg{ public string UserName{
get;set;} public string Password{
get;set;} public string Gender{
get;set;} public string Age{
get;set;} public int Remember{
get;set;} public DateTime SubTime{
get;set;} }

 

有人可能胡说这么复杂,我一般都只用一个类就解决问题了。我只想说这是一个思路,有时候一个类是无法解决我们想要的业务逻辑的,那么多个类:从实体到业务,可以解决很多看似很复杂的逻辑,后期维护也很简单清晰。

好了,就说这么多了,各位有其他想法的欢迎拍砖,头破了不用负责,我抗的起。呵呵呵。

 --补充

今天看了一下自己的代码,突然有了一个新的想法,如下:

 

//实体类public class UserMode{     public string UserName {
get;set;} public string Password{
get;set;} public string Gender{
get;set;} public string Age{
get;set;} public DateTime SubTime{
get;set;} }//登录类public class UserLogin:UserModel{ //public string UserName{get;set;} //public string Password{get;set;} public int Remember{
get;set;}}//注册类public class UserReg:UserModel{ //public string UserName{get;set;} //public string Password{get;set;} //public string Gender{get;set;} //public string Age{get;set;} public int Remember{
get;set;} //public DateTime SubTime{get;set;} }

那么业务类与实体类的转化就简单多了

public ActionResult Regedit(Models.UserReg userReg, FormCollection form)        {            Demo.BLL.AddressBLL addressBll = new Demo.BLL.AddressBLL();            Demo.BLL.UserBLL userBll = new Demo.BLL.UserBLL();            AddressHelper addressHelper = AddressHelper.GetInstance();            addressHelper.GetResidentialItem(addressBll.GetList());            ViewBag.Residential = addressHelper.ResidentialList;            ViewBag.FloorNo = addressHelper.FloorNoList;            ViewBag.UnitNo = addressHelper.UnitNoList;            ViewBag.DoorplateNo = addressHelper.DoorplateNoList;            if (form["CheckCode"] != null && form["CheckCode"].ToString() == Session["CheckCode"].ToString())            {                if (ModelState.IsValid)                {                    //Models.User user = new Models.User()                    //{                    //    UserID = userReg.UserID,                    //    UserName = userReg.UserName,                    //    Password = userReg.Password,                    //    FloorNo = userReg.FloorNo,                    //    Phone = userReg.Phone,                    //    DoorplateNo = userReg.DoorplateNo,                    //    Residential = userReg.RePassword                    //};                    Models.User user = userReg;                    userBll.Add(user);                    MessageBox.ShowAndRedirect(this, "注册成功,请登录!", "/User/Login");                }            }            else            {                MessageBox.Show(this, "验证码错误!");            }            return View();        }

 

上面代码可以采用继承方式 直接:Models.User user=userReg;或者登录页有:Models.User user=userLogin;

是不是一下解决了赋值转化的难题了呢!

转载于:https://www.cnblogs.com/zhaosw/p/6030202.html

你可能感兴趣的文章
[vs2008]Visual Studio 2008 SP1添加或删除功能提示查找SQLSysClrTypes.msi文件
查看>>
JS 设计模式二(封装)
查看>>
JavaScript “跑马灯”抽奖活动代码解析与优化(一)
查看>>
为什么我们选择 segmentfault 写作?
查看>>
多模型融合推荐算法在达观数据的运用
查看>>
JDK 11 马上就要来了!JDK 12 还会远吗?
查看>>
Kali Linux 2019.1 发布,Metasploit 更新到 5.0 版本
查看>>
【mysql的设计与优化专题(1)】ER图,数据建模与数据字典
查看>>
Jibo’s Name: How did we pick it?
查看>>
device's media capture mechanism,利用input:file调用设备的照相机/相册、摄像机、录音机...
查看>>
BroadLink:三款新品力求无障碍人机交互,三大平台分三期对外开放 ...
查看>>
掌门1对1获3.5亿美元E-1轮融资,华人文化产业基金、中金甲子基金等投资 ...
查看>>
Unity中的通用对象池
查看>>
ORA-00600: internal error code, arguments: [16703], [1403], [28], [...
查看>>
忆芯科技发布新一代国产主控芯片STAR1000P!4月完成量产版本 ...
查看>>
如何用条码标签打印软件实现商品价签制定会员价 ...
查看>>
如何轻松实现个性化推荐系统
查看>>
Mysql高级查询 内连接和外连接详解
查看>>
基于AWS的电子商务网站架构——Web前端
查看>>
基于险企传统资源优势的“一核三环”规划——互联网平台建设
查看>>