爱上MVC3系列~将公用的模块提到PartialView

简介:

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

 1     /// <summary>
 2     /// 评论对象
 3     /// </summary>
 4     public class Review
 5     {
 6         public long ID { get; set; }
 7         /// <summary>
 8         /// 被评论对象的类型
 9         /// </summary>
10         public int ObjType { get; set; }
11         /// <summary>
12         /// 被评论对象的ID
13         /// </summary>
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     /// <summary>
2     /// 系统主要对象的类型
3     /// </summary>
4     public enum ObjectType
5     {
6         User,
7         Product,
8         Order
9     }

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

 1         /// <summary>
 2         /// 评论公用视图
 3         /// </summary>
 4         /// <returns></returns>
 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             else
21                 ModelState.AddModelError("", "请认真填写...");
22             return View();
23         }

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

本文转自博客园张占岭(仓储大叔)的博客,原文链接:爱上MVC3系列~将公用的模块提到PartialView,如需转载请自行联系原博主。

目录
相关文章
|
前端开发 JavaScript
【MVC】AJAX+PartialView实现商城首页的楼层加载
使用AJAX实现楼层加载的例子已经非常多,但是html代码大都是手动拼接的,编写不便,而且难以维护。 下面就使用AJAX+PartialView来实现 1.html代码 2.
991 0
|
前端开发 UED 数据格式
MVC5 + EF6 + Bootstrap3 (14) 分部视图PartialView
原文:MVC5 + EF6 + Bootstrap3 (14) 分部视图PartialView Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-partialview.
1574 0
|
前端开发 JavaScript
在MVC应用程序中动态加载PartialView
原文:在MVC应用程序中动态加载PartialView 有时候,我们不太想把PartialView直接Render在Html上,而是使用jQuery来动态加载,或是某一个事件来加载。为了演示与做好这个练习,我们先在Views目录下的Home下创建_Partial1.
794 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
46 0
|
6月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
189 0
|
6月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
78 0
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
163 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
97 0