在课堂上实现验证的最佳方法?

时间:2015-02-17 17:57:04

标签: c# oop design-patterns

我的应用程序中存在设计问题。 我有一个类,其中的字段具有某种业务逻辑验证。 这个类被实例化并以两种方式填充数据。 1st:由类的消费者:从前端发送并填充到对象中并保存在数据库中的数据。 第二:获取存储的数据。 在第二个要求我有一个问题。 我不想验证数据,因为由于现有数据的删除或修改,存储的数据可能不符合业务逻辑。 所以我需要用保存的数据填充对象而不进行验证。

如此善意地建议我在类中添加验证逻辑的最佳方法,这样当它用于数据保存时,它应该被验证,并且当获取数据时,如果关键字段存在,则它不应验证任何字段数据库表。 例如:

class customer
{
    private string customerCode;
    private string customerName;
    private List<Project> projectList;
    //These property contains validation logic for data assigned to them.
    public string CustomerCode{get; set;}
    public string CustomerName{get; set;}
    public List<Project> projectList{get;set;};

    public bool SetData(ref string message)
    {
        //Fetch From Database and set it to fields.
        //Here to avoid validation I can use fields directly to skip validation.
        this.CustomerCode = DataTable[CustomerCode];
        this.CustomerName = DataTable[CustomerName];

        //But here its not possbible to skip validation in Project class
        foreach(projectID in DataTable[Projects])
        {
            //**Problem Area**.... every project I add is validated according to business logic, but it may be possible that even after completion of a project users of the system want to list all the projects of that customer.
            this.ProjectList.Add(new Project(projectID));
        }
    }
}

2 个答案:

答案 0 :(得分:2)

稍微更一般的方法来查看问题是对象有两个验证策略。在这种情况下,您说第二个策略是忽略任何验证。但是,将来您可能会发现添加一些次要或侧面验证很有用,因此可以采用更通用的方法。正如Davis Osborne所说,验证对象的最佳方法是创建特定的验证类。总之,我会创建两个验证对象,并使用适当的对象验证我的对象,具体取决于上下文。通过这种方式,您的方法将准备好使用您将来包含的任何验证,并且您需要的唯一更新将是您设计的验证方。

答案 1 :(得分:0)

创建一个位于公共接口后面的特定验证器。然后,如果需要这种策略,它可以进行单元测试并可能被替换以提供自定义验证方案。

支持验证整个班级和每个房产。