探讨C#中的实体验证(Entity Validation)

开发 后端
本文关于C#中的实体验证(Entity Validation),环境为Visual Studio,同时作者也探讨了一下C# 3.0中的一些新特性。

环境:

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

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

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

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

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

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

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

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

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

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

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

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

三. 继续演进

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

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

然后编写一个验证类:

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

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

【编辑推荐】

  1. C#中实现多继承的方式:混合+接口
  2. 浅谈C#中的集合对象(Collections)
  3. C#3.0中自动属性和对象初始化器
责任编辑:彭凡 来源: 博客园
相关推荐

2024-07-09 07:54:26

2010-07-12 09:07:30

C#

2009-09-04 15:53:42

C#内存流

2024-05-06 08:00:00

C#IP地址

2009-09-11 12:50:34

Scope属性

2024-05-06 06:00:00

C#文件存储

2009-09-01 17:15:42

C#多线程应用

2009-09-03 17:01:04

C#回车切换焦点

2009-08-10 17:41:42

C# Singleto

2009-10-09 09:07:40

C#委托和事件

2010-01-08 16:52:57

C++和C#

2009-08-31 17:35:12

C#接口实例

2009-08-20 13:47:57

C#验证输入方法

2009-09-01 15:24:59

C++、C#和JAVA

2024-04-02 09:26:07

C#中文数字编程语言

2009-08-17 08:07:00

c#画图模式

2019-11-21 09:00:00

数据验证EF Core

2009-08-12 11:05:00

2010-12-02 09:55:25

Ubuntu OneWindows

2024-04-15 16:11:33

C#HTTP请求.NET
点赞
收藏

51CTO技术栈公众号