艾伟:也谈实体验证(Entity Validation)

简介: 环境:Windows 2008, VS 2008 SP1, Asp.Net Mvc 1.0------------------------------------------------------------------------------今晚喝茶看片之时,脑子里忽然闪过一个念头,于是打开VS简单的做了一个实现,于是有了本文...是关于实体验证的,嗯,从头开始说吧。

环境:

Windows 2008, VS 2008 SP1, Asp.Net Mvc 1.0

------------------------------------------------------------------------------

今晚喝茶看片之时,脑子里忽然闪过一个念头,于是打开VS简单的做了一个实现,于是有了本文...是关于实体验证的,嗯,从头开始说吧。

一. 可能是最原始的验证代码

为了让问题尽量简单,我们就拿一个简单得不能再简单的User类开刀吧。

现在我们要在User类里面加一个方法用于验证User实例的合法性,相信很多人写过如下类似的代码:

Check()方法很单纯的为User类的属性应用各种规则,然后返回非法的提示信息集。

验证的时候只是简单的调用一下实体的Check()方法即可:

好吧,我承认,一般情况下这个方法似乎够用了,只不过,很多人看到一连串的if可能会开始抓狂了,是呀,我也不喜欢,那就想个最即便的办法消除它们吧。

二. 基于C#3.0新特性的尝试

为了消除if,考虑把那些验证规则用一条线链起来,于是:

编写实体类的验证扩展方法如下:

那么实体的Check()方法相应改为:

这样,我们通过扩展方法,消除了if,但是我们把验证规则链了起来,并已异常的方式来抛出实体非法信息,那么每次验证只能得到一条验证信息,这显然往往不符合实际情况。想想..

三. 继续演进

接上,为了得到验证错误信息集合,改进:

为了让代码看起来更像那么回事,给实体加个基类吧,就叫EntityBase了。

然后编写一个验证类:

然后看下修改后的Check()方法,这个验证类的作用就一目了然了:

不用解释吧?其实也是链起来,同时返回验证错误信息集合,看看结果:

看到这里,你可能会说:搞什么啊,不就消除了个if嘛,有什么大不了的。

呃。。是的。。确实如此。。。雕虫小技,如有雷同,纯属巧合。

 

目录
相关文章
|
3月前
|
存储 JSON 自然语言处理
数据标注工具 doccano | 命名实体识别(Named Entity Recognition,简称NER)
数据标注工具 doccano | 命名实体识别(Named Entity Recognition,简称NER)
58 1
|
5月前
|
存储 SQL BI
【Entity Framework】你知道如何处理无键实体吗
【Entity Framework】你知道如何处理无键实体吗
38 0
|
5月前
|
存储 API 数据库
【Entity Framework】创建并配置模型
【Entity Framework】创建并配置模型
28 0
|
6月前
|
JSON 自然语言处理 数据挖掘
【ACL 2023-NER注入到PLM】数据集+实验解读:基于上下文学习的命名实体识别 Learning In-context Learning for Named Entity Recognitio
【ACL 2023-NER注入到PLM】数据集+实验解读:基于上下文学习的命名实体识别 Learning In-context Learning for Named Entity Recognitio
80 0
|
数据库
一对多关系domain Model中设置使用AutoMapper时出错
一对多关系domain Model中设置使用AutoMapper时出错
171 0
一对多关系domain Model中设置使用AutoMapper时出错
|
数据库
Entity Framework 实体状态
Entity Framework 实体状态
155 0
Entity Framework 实体状态
|
数据库
艾伟_转载:Entity Framework的默认值BUG解决方法
  在使用.Net 3.5里的Entity Framework开发网站的时候,遇到了一个问题:添加记录时,对于DateTime型的数据,无法使用数据库的默认值。   具体的情况是这样的,我的数据库有个Users表,三个字段,id,username,createtime。
847 0