我有主表
CALC_Master
此处CALC_Id是主表的公共列
所以我有很多子表将参考上面的主表。像CALC_name,CALC_Plan这样的表等...
现在我只需要根据以下条件过滤主表记录
select * from CALC_Master
where STATUS_VALUE='COMP'
and CREATED_DATE < DateAdd(yy, -1, GetDate())
and IS_CREATED_FROM_MSS_FLAG='Y'
因此,基于上表中的CALC_id返回,我需要删除子表中的所有记录。
那么我们如何使用访客模式
来实现这一点我已经创建了所有表格的对象,如下所示
CalcWiz delewiz = new CalcWiz();
答案 0 :(得分:0)
访客模式是GOF的模式,应用于C#类,因此您必须在定义模式之前定义业务层。
在这里,您可以找到类图和代码示例http://www.dofactory.com/Patterns/PatternVisitor.aspx
答案 1 :(得分:0)
如果你严格遵循访客模式,我就是这样做的。但是,不要太喜欢它,因为我喜欢我的模型/实体干净,这意味着实现ICalcEntity并使用Delete方法标记每个域模型/实体,严格来说,这是业务逻辑类的职责。
public interface ICalcEntity
{
void Delete(ICalcRepo repo);
}
public interface ICalcRepo
{
void Delete(CALC_Master cMaster);
void Delete(CALC_plan cPlan);
}
public class CalcRepo : ICalcRepo
{
public void Delete(CALC_Master cMaster)
{
//delete CALC_Master where CALC_Id == cMaster.CALC_Id
}
public void Delete(CALC_plan cPlan)
{
//delete
}
}
public class CALC_plan : ICalcEntity
{
public void Delete(ICalcRepo repo)
{
repo.Delete(this);
}
}
public class CALC_Master : ICalcEntity
{
public int CALC_Id { get; set; }
public List<ICalcEntity> Children { get; set; }
public void Delete(ICalcRepo repo)
{
Children.ForEach(c => c.Delete(repo));
repo.Delete(this);
}
}