我正在努力学习如何在3层应用程序中处理良好验证的良好实践。
我有两种物品,我的商业物品和物品;我的数据对象(由EntityFramework生成),我想知道业务和数据验证是否应该同时完成(在同一层中),或者它们应该单独完成。
我们举一个例子,我有我的业务对象MyBusinessObject
和我的数据对象由实体MyDataObject
生成
public class MyBusinessObject(){
public string fieldA {get;set;}
public string fieldB {get;set;}
}
我在数据访问层中的Add
函数:
public bool Add(MyBusinessObject obj){
try{
DB_CONTEXT_OBJ dataObj = new DB_CONTEXT_OBJ(){
DB_FIELD_A = obj.fieldA,
DB_FIELD_B = obj.fieldB,
};
// Where ctx is my DB Context
ctx.Entries(Obj).State = System.Data.EntityState.Added;
ctx.SaveChanges();
return true;
}
catch(Exception e){
return false;
}
}
假设我必须将字段fieldA
的长度限制为最多10个。最好在Validate()
类上添加MyBusinessObject
方法,检查字段是否少于10个字符,还是在我{{1}的类上定义Validate(MyBusinessObject obj)
更好功能是,谁会这样做?
或者更进一步,我的Add(...)
类有一个Validate()
方法验证所有业务逻辑,数据访问层中的MyBusinessObject
只验证数据完整性?
我知道可以在业务方面检查数据完整性,但对我来说,这是一种不好的做法,因为这种完整性可能会改变您正在使用的数据库(Oracle将允许/拒绝您可以/可以做的事情)在SQLServer,Postgres等上做。
感谢您的建议!