转-- 《实体级标准验证》

在MVC架构中,底层数据源一般为linq to sql或者entity frameworks,可能还有少数团队使用自己的ORM工具,但对于实体级的数据验证来说都是必须要干的事,你可能在viewmodel中重复的写一些验证规则,你可能在用ctrl+C和ctrl+V的同时,也知道自己违背了DRY原则,但你可能会说:“这样干容易,简单!“,”我的逻辑复杂,我要分情况去考虑幼!”,呵呵,这些对于我来说,都是借口,违背就是违背,可能有些时候需要去违背原则,就像SQL非范式一样,但今天要说的是,如何为一个实体对象,设计一个完整统一的验证规则,我之前写过一些实体验证的东西,而今天说的,主要还是使用“attribute"来实现这个验证!

对于linq to sql,ef的开发者来说,实体对象会为我们自己生成,而我们对实体的验证不可能写在生成的实体中,因为只要实体要去从数据库更新,你所作的修改就徒劳了,呵呵 ,还要小微早就为我们考虑到了,所以,所有的实体类都是partial class,我们喜欢叫它“分部类”。

一些的效果为:

而一般我们的作法是把验证信息写在ViewModel里,即一个View写一个Model,再添加一些验证信息,而这认为这需要具体问题具体分析了,我们不应该将所以业务都去重新抽象,这样无疑加大了代码量,也破坏了实体完整性,一个东西为何拆成多个?

事实上,数据验证这种事,我们往往应该把它放在数据模型层去干这事,即Entity(Model)层,它体现了数据库的抽象,包括DATA层在内的所有层都可以去引用它,它只是数据库的映射与数据有效性的验证,不存在数据的操作,而操作这种事我们留给了DATA层,而根据业务去组合操作这种事我们交给了BLL(Service)层!

OK,我们来看一下,我在Entity层对实体的设计:

 1 namespace Role.Entity
 2 {
 3     /// <summary>
 4     /// WorkFlow_Info数据有效性验证
 5     /// </summary>
 6     public class WorkFlow_Info_Meta
 7     {
 8         public int ID { get; set; }
 9         public Nullable<int> PrevNode { get; set; }
10         public Nullable<int> NextNode { get; set; }
11         [Required(ErrorMessage = "请填写工作流名称")]
12         [Display(Name = "工作流名称")]
13         public string Name { get; set; }
14         public string Info { get; set; }
15     }
16     /// <summary>
17     /// 工作流实体
18     /// </summary>
19     [MetadataType(typeof(WorkFlow_Info_Meta))]
20     public partial class WorkFlow_Info
21     {
22         #region 导航属性
23         /// <summary>
24         /// 是否为首结点
25         /// </summary>
26         public bool IsFirstNode
27         {
28             get
29             {
30                 return this.PrevNode == null;
31             }
32         }
33         /// <summary>
34         /// 是否为尾结点
35         /// </summary>
36         public bool IsEndNode
37         {
38             get
39             {
40                 return this.NextNode == null;
41             }
42         }
43
44         #endregion
45     }
46     /// <summary>
47     /// 工作量实体扩展
48     /// </summary>
49     public class WorkFlow_Info_Ext : WorkFlow_Info
50     {
51     }
52 }

好了,而对于前台提交表单时,只要调用ModelState对象的IsValid属性即可验证前台模型了,呵呵!

 1        [HttpPost]
 2         public ActionResult Edit(WorkFlow_Info entity)
 3         {
 4             if (ModelState.IsValid)
 5             {
 6                 repository.Update(entity);
 7                 return RedirectToAction("Index");
 8             }
 9             return View();
10         }

时间: 2024-08-20 22:34:47

转-- 《实体级标准验证》的相关文章

[转]《鸟人》

以下来自豆瓣影评 0. 饰演主角Riggan的,正是多年前饰演过<蝙蝠侠>和<蝙蝠侠归来>的Keaton 1. 电影的一大主题,就是演员们极度稀薄的安全感,以及对于接受和肯定的“瘾”.这些演员都有着不同形式的自我痴迷. Keaton不停地跟自己的阴暗面斗嘴,一方面要关心自己话剧的质量,担忧别人对自己作为艺术家的看法,一方面又愤怒地“唏嘘”当年老子多辉煌,你们这帮人算个毛!老子可以拍“Birdman 4”发大财!当明明已经开始做话剧了,好好表演完成任务却不够,他又特别容易被外界干扰到

【谜院群】2017年3月24日鸟人素素主擂谜会题

[谜院群]2017年3月24日鸟人素素主擂谜会题 1.三月踏青携友旅(2字著名鱼具品牌)千又2.花开映日,淡化听莺语(8笔字)英3.垄上幽篁皆破土(同义字二)龙.皇4.前庭柳垂杏花度(14笔字)嘛5.莫道桃源晚归处(7笔字)沐6.风光几回,半遮绿岗路(2字词汇)网络7.紫陌孤行鸟语稠(央视主持人)路一鸣8.斜阳西下月初露(2字词汇)斗胆9.前坡银桃早烂漫(5字常言)金木水火土10.伊人花容,回顾门中见(2字古文常用疑问词)问君11.余留心迹成绝恋(10笔字)途12.空怀旧日同思念(5笔字)司13

2014鸟人Birdman中文字幕文件下载

下载后,解压缩,会得到 Birdman.2014.1080p.WEB-DL.DD5.1.H264-RARBG.srt 文件,把这个文件放到视频文件(mkv文件)相同的文件夹里. 用暴风影音播放,如果没有显示中文字幕,需要用播放器的“选择字幕”的菜单选择这个srt文件(播放器里点击右键,选择字幕,找到srt文件即可). 点击下载:Birdman.2014.1080p.WEB-DL.DD5.1.H264-RARBG.zip

编程模拟自然(九):元胞自动机

序 旧书有云:发鸠之山,其上多柘木.有鸟焉,其状如乌,文首.白喙.赤足,名曰精卫,其鸣自詨. 一日,精卫游于码海,溺而不返,后常衔西山之木石,以堙于海.有诗为证: 万事有不平,尔何空自苦: 长将一寸身,衔木到终古? 我愿平码海,身沉心不改: 码海无平期,我心无绝时. 呜呼!君不见,西山衔木众鸟多,鹊来燕去自成窠! (前情提要:主角元乘坐返回舱降落到了码海上,随后遇到了个鸟人...) “咳咳,远道的客人,我名精卫XIV,乃是先祖精卫鸟的第十四代后裔...”鸟人作自我介绍 “...你是谁,从哪里来又

商代王后妇好、玉器及特展相关资料整理

1.展览的相关说明 展览: 玉鸣锵锵--商代王后妇好玉器特展 时间: 2016.12.27-2017.3.26 地点: 三楼书画厅 本展览为收费展览,全票30元,半票15元. 半票优惠人群: 教师.学生.军人(购票时出示相关证件:60岁以上老人(购票时出示身份证或老人证):1.2-1.4米儿童:20人以上团体. 免票范围: 1.2米以下小童(需在成人陪同下参观):博物馆同行.博物馆协会成员(检票时出示相关证件):残障人士(检票时出示相关证件). 2.展览分为五个部分 第一部分:"发现妇好&quo

新年最新的100句超牛的语言(转)

1.二农戏猪 2.干掉鸟人我就是天使! 3.帅有个屁用!到头来还不是被卒吃掉! 4.好好活着,因为我们会死很久!!! 5.有没有听过“大猪说有,小猪说没有”的故事? 6.女友问我她死了我会怎样我坚定的说:我不会独活(再找一个活)她大悦~! 7.人工智能和天然愚蠢无法相提并论——因为我们主张纯天然. 8.在教堂听讲经的时候我们应该保持肃静,打扰别人睡觉是很不礼貌的. 9.陪聊,提供夜间上门服务.(一个墓志铭) 10.人又不聪明,还学人家秃顶!! 11.你是电,李四光,你是唯一的神话… 12.笨人的

高中时候经常说的口头禅

1.靠!不服!2.不搞了不搞了!3.……我跟你说!4.我打死你!5.鸟人!6.无聊!7.干嘛!8.不可能!9.我拍死你!10.你滚啊!11.谁稀罕啊!12.……你头!13.打把鬼!14.谁说的!15.过来单挑!16.什!17.很多人都这么说!18.开玩笑!19.要定!20.是不是找打啊!21.叉!22.不是吧!23.考就考,有什么大不了!24.干!25.是啊是啊!26.怎么可能?27.羡慕吧!28.你再吵,吵什么吵!29.什么奇葩都有!30.操!31.一般般啦!32.随便!33.叫你……你又不听

绕过HR破门而入的求职智慧

以往我们在网上看到的很多求职文章或指导性纲领,譬如啥自信.做功课.良好形象.华丽的简历.工作经验.口才啥的,其实到了21世纪尤其是互联网高速发展的今天,前面这些技巧就显得无比空洞: 1.因为自信谁都可以做到哪怕装都能装出来 2.简历,谁都可以用各种模板来打造,至于说HR们是否看到华丽的简历就立刻对你打100分这也是有扯淡嫌疑的 3.良好形象.一般来说主要是衣着得体.气质不俗,长得好看不好看已经不怎么重要了,长得好看只能说明你大学时期课外生活也许很丰富,长得不好看也不代表你一定是个很努力的人 4.

【原创】win10下搭建vue开发环境+IIS部署

[原创]win10下搭建vue开发环境 如果要转发,请注明原作者和原产地,谢谢! 特别说明:下面任何命令都是在windows的命令行工具下进行输入,打开命令行工具的快捷方式如下图: 详细的安装步骤如下: 一.安装node.js 说明:安装node.js的windows版本后,会自动安装好node以及包管理工具npm,我们后续的安装将依赖npm工具. node.js的官方地址为:https://nodejs.org/en/download/,如下图所示: 根据自己电脑的具体配置,选择你要下载的安装

《设计你的人生》的部分经典语录

每个优秀的人,都有一段沉默的时光.在那一段时光,你付出了很多努力,忍受孤独和寂寞,不抱怨不诉苦,最后渡过了这段感动自己的日子. ——苏引华<设计你的人生>很多人在开始梦想时发现别人己经实现了自己要实现的梦想,于是就开始怀疑自己追不上了于是就放弃了梦想,最终成为了普通人!——苏引华<设计你的人生>很多人没有成功并不是他不能成功,而是他根本没有想过要成功或如何成功,生命当中有很多事情最初拥有的只是梦想,以及豪无根据的自信而己,但是,所有的一切,都从这里出发!——苏引华<设计你的人