博客
关于我
强烈建议你试试无所不能的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

你可能感兴趣的文章
gre
查看>>
灵巧还是笨重?利用Textarea从浏览器复制字符到剪贴板
查看>>
CentOS 7.4利用Iptables开启远程访问
查看>>
linux下日志监控分析工具webalizer的安装及使用
查看>>
HTTPS 原理详解
查看>>
[转载] 七龙珠第一部——第073话 必杀恶魔光线
查看>>
Get和Post请求区别
查看>>
开源史上最成功的8个开源产品
查看>>
PHP操作MySQL
查看>>
单臂路由与三层交换机动态配置
查看>>
MyBatis学习总结(六)——调用存储过程
查看>>
Docker命令详解
查看>>
servlet jsp 各种路径获取。。
查看>>
应用系统架构设计
查看>>
【POJ】第二章 简单计算题之课后题
查看>>
MFC建立应用程序启示录(创世纪新篇)
查看>>
自定义实现session持久化
查看>>
如何处理xencenter中无法显示vm的performance信息
查看>>
oracle远程导出导入
查看>>
Citrix XenApp/XenDesktop产品发布策略调整
查看>>