我想对我的业务代码进行验证。我正在考虑两种方法来做到这一点。
一,按以下方式对我的类属性设置器进行验证
class Student{
public string Name{
get { return _name; }
set {
if (value.IsNullOrEmpty) throw exception ...
}
}
}
现在,这种方法的问题在于,每次分配 Name 时都会运行验证代码,而我们可能不需要,例如用数据库中的数据填充它时。
两个,我更喜欢,将静态方法放在这些实体类上,比如
class Student {
public **static** void ValidateName(**string name**) {
if (string.IsNullorEmpty(name))
{
throw ...
}
...
}
请注意,我使用的是静态方法而不是实例方法,例如
class Student{
public void Validate() {
// validation logic on instance properties
if (string.IsNullorEmpty(Name))
{
throw ...
}
...
}
是因为我并不总是传入一个 Student obj,我确实经常将原始类型(如字符串名称)传递给一个方法,比如
public static FindStudentByName(string name)
{
// here I want to first do validation
Student.ValidateName(name);
// query DB
...
}
如果我确实通过了学生 obj,那么我当然可以
public static AddStudent(Student s)
{
// call the instance method
s.Validate();
}
现在,我想让事情变得非常简单,所以我不想采用以下任何一种方法
在属性上使用属性,例如 [StringLength(25)]。
一,因为这需要反射并影响性能,所以有一些技巧可以降低性能,但我还是想让它越简单越好。
第二,我希望我的网站能够在 Medium Trust 中运行。据我了解,反思需要完全信任。
使用那里的任何验证块,例如 MS。在 CodePlex 上找到企业库等。
现在,我想听听你对此的看法,
我要采用的方法有哪些潜在问题?
这种方法会比其他方法性能更好、更易读、更容易维护吗?
您如何在中间层进行验证?
谢谢一堆!
射线。