商业与数据验证DAL

时间:2015-06-08 11:30:38

标签: c# entity-framework validation data-access-layer

我正在努力学习如何在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等上做。

感谢您的建议!

0 个答案:

没有答案