我的应用程序中存在设计问题。 我有一个类,其中的字段具有某种业务逻辑验证。 这个类被实例化并以两种方式填充数据。 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));
}
}
}
答案 0 :(得分:2)
稍微更一般的方法来查看问题是对象有两个验证策略。在这种情况下,您说第二个策略是忽略任何验证。但是,将来您可能会发现添加一些次要或侧面验证很有用,因此可以采用更通用的方法。正如Davis Osborne所说,验证对象的最佳方法是创建特定的验证类。总之,我会创建两个验证对象,并使用适当的对象验证我的对象,具体取决于上下文。通过这种方式,您的方法将准备好使用您将来包含的任何验证,并且您需要的唯一更新将是您设计的验证方。
答案 1 :(得分:0)
创建一个位于公共接口后面的特定验证器。然后,如果需要这种策略,它可以进行单元测试并可能被替换以提供自定义验证方案。
支持验证整个班级和每个房产。