博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
爱上MVC3系列~将公用的模块提到PartialView
阅读量:6342 次
发布时间:2019-06-22

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

事实是这样的,这个项目它有产品,用户,用户要买产品,这时产生了订单,而这三个对象都有被评论的功能,这时评论对象Review就产生了,我们要设计一个视图,它来实现对三个对象的评论功能,没有人会希望同样的功能被重复的开发,相同的代码出现的不同的地方,这当然也违背了DRY原则,所以,我们需要抽象,我们需要封装,我们需要对问题进行面向对象的分析. 第一部:将对象抽象出来,找来不变的与变化的属性 product,user,order共同作用于reviews,我们来看一下review的实体结构

 

1     ///  2     /// 评论对象 3     ///  4     public class Review 5     { 6         public long ID { get; set; } 7         ///  8         /// 被评论对象的类型 9         /// 10         public int ObjType { get; set; }11         /// 12         /// 被评论对象的ID13         /// 14         public long ObjID { get; set; }15         [Required]16         public string Title { get; set; }17         [Required]18         public string Content { get; set; }19         [Required]20         public DateTime CreateDate { get; set; }21     }

 

1     /// 2     /// 系统主要对象的类型3     /// 4     public enum ObjectType5     {6         User,7         Product,8         Order9     }

 

  而事实上,除了ObjType与ObjID之外,其它属性对于三大对象来说都是相同的,这时,我们可给在设计视图时,将objtype与objid以参数的形式告诉review,代码如下: 

1         ///  2         /// 评论公用视图 3         ///  4         /// 
5 public ActionResult Review(int? objID, int? objType) 6 { 7 return View(new Review 8 { 9 ObjID = objID ?? 0,10 ObjType = objType ?? 1,11 Content = "",12 Title = "",13 });14 }

 

最后通过提交表单将objid和objtype的值post到实体中,然后根据objtype来确实操作完成后页面所重定向的地址. 代码如下: 

1         [HttpPost] 2         public ActionResult Review(Review entity) 3         { 4             if (ModelState.IsValid) 5             { 6                 //数据操作逻辑 7                 //code... 8                 switch (entity.ObjType) 9                 {10                     case (int)ObjectType.User:11                         return RedirectToAction("Index", "User", new { id = entity.ObjID });12                     case (int)ObjectType.Product:13                         return RedirectToAction("Index", "Product", new { id = entity.ObjID });14                     case (int)ObjectType.Order:15                         return RedirectToAction("Index", "Order", new { id = entity.ObjID });16                     default:17                         break;18                 }19             }20             else21                 ModelState.AddModelError("", "请认真填写...");22             return View();23         }

 

View的代码就不在这里展示了,事实上,我的目的不是代码,不是业务,而是面向对象的思想,通过这个业务,而我自己对面向对象有了新的认识,有时解决问题的方法可能有很多,但我们是否找到的最佳的方法呢? 有时,我们在重复的做一件事,但是否自己意识到了呢?又是否意识到了而去主动寻找更好的方法呢?这些,我希望大家的回答都是"是,我做到了",呵呵.祝您晚安.

转载于:https://www.cnblogs.com/lori/archive/2012/12/03/2800526.html

你可能感兴趣的文章
java B2B2C Springcloud多租户电子商城系统 (五)springboot整合 beatlsql
查看>>
Throwable是一个怎样的类?
查看>>
Python基础(一)
查看>>
三条代码 搞定 python 生成验证码
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
无线和有线路由哪种性能更好
查看>>
Dwr3.0纯注解(纯Java Code配置)配置与应用浅析三之后端反向调用前端
查看>>
Ubuntu下安装遨游浏览器
查看>>
自定义Linux service脚本
查看>>
微信开发之发红包
查看>>
一键lnmp脚本&&php扩展模块安装(适用于CENTOS6.X系列)
查看>>
二维观察---文字的裁剪
查看>>
矩形覆盖
查看>>
ICMP
查看>>
界面设计模式(第2版)(全彩)
查看>>
linux 的IP配置和网络问题的排查(补充)
查看>>
解决VMware Workstation错误:未能锁定文件
查看>>
CentOS6 手动编译升级 gcc
查看>>
memcached的安装与开启脚本
查看>>