1.4 公共类设计

公共类是每个项目中都会用到的一种程序设计形式,它将一些可公用的功能代码封装到一个类中实现代码的重用。无论是程序开发阶段还是后期维护阶段,公共类都会是更加清晰和便捷的一种设计结构。

1.4.1 系统资源文件目录转换类

在程序源论坛项目中,将各种资源文件都放在了“Content”文件夹内,然而,视图文件都存放在不同的目录结构中,所以,这些视图文件的父目录都是不同的。例如,前台功能和后台功能的分离。要想实现统一返回资源目录路径,就需要构建一个能够返回路径的公共类,然后无论是哪个视图文件,只要访问这个类就可以得到想要的文件路径。公共类GettingUrl的定义如下:

例程01 代码位置:资源包\TM\01\BBSSiteItem\BBSSite\BBSSite\MyPublic\GettingUrl.cs

1.4.2 实体数据验证DataUnique特性类

用户在前台网页上进行数据录入后,数据往往会通过实体类的方式传入后台方法中。然而,这些数据的合法性如果不通过程序验证就直接插入数据库中则会引发各种不可预测的错误,或带来程序上的bug。验证这些数据的办法有很多,其中,通过定义验证特性来实现数据验证是一个很值得推荐的一种解决方案。

ValidationAttribute特性是验证实体数据的基类,通过继承ValidationAttribute类即可实现自定义验证逻辑,关于数据验证的公共类设计如下:

首先定义自定义特性类,该类必须继承ValidationAttribute基类。

例程02 代码位置:资源包\TM\01\BBSSiteItem\BBSSite\BBSSite\MyPublic\DataUnique.cs

接下来定义PublicInitiali工厂类,该类用于返回实现IcheckUnique接口的数据验证实现类。此类包含了其他方法,这里只列出验证数据的方法,代码如下:

例程03 代码位置:资源包\TM\01\BBSSiteItem\BBSSite\BBSSite\MyPublic\PublicInitiali.cs

最后定义验证各表的IcheckUnique实现类。由于实现类较多,这里只列出一个实现类,其他类的实现逻辑大体相同,读者可在资源包文件中找到各实现类的定义。

例程04 代码位置:资源包\TM\01\BBSSiteItem\BBSSite\BBSSite\MyPublic\CheckUnique.cs

说明

枚举EnumDataUnique定义了各表的名称,通过增加EnumDataUnique枚举值和对应的实现类即可完成表的数据验证功能。

1.4.3 Forms身份验证公共类设计

Forms身份验证是ASP.NET中身份验证的一种,此方式使用Cookie来保存用户凭证,并将未能通过身份验证的用户重定向到自定义的登录页。

首先,定义身份验证票证信息数据的Cookie存储和解析的类,在用户登录成功后,调用该类的SetAuthCookie方法存储Cookie。用户在执行请求时,调用TryParsePrincipal方法解析Cookie票证信息。

例程05 代码位置:资源包\TM\01\BBSSiteItem\BBSSite\BBSSite\MyPublic\MyFormsAuthentication.cs

在用户请求控制器中的某个操作方法时,通过AuthorizeAttribute特性可实现用户对该控制器或操作方法的访问权限的验证。自定义验证特性类必须继承自AuthorizeAttribute类,代码如下:

例程06 代码位置:资源包\TM\01\BBSSiteItem\BBSSite\BBSSite\MyPublic\MyAuthorizeAttribute.cs

此Forms身份验证模块还包含两个类,分别为MyFormsPrincipal<TUserData>和MyUserDataPrincipal,前者是存储用户票证信息数据的类,后者定义了用户数据,并且实现了用户验证的过程。

1.4.4 Cache缓存数据类

缓存是经常用到的一种数据暂存功能,目的是将少量比较固定的数据放置在内存中,以便提高应用程序性能。在程序源论坛项目中,使用缓存来记录后台系统导航栏目的选择状态。

例程07 代码位置:资源包\TM\01\BBSSiteItem\BBSSite\BBSSite\MyPublic\MyCache.cs