如何实现删除子表的访问者设计模式

时间:2013-11-29 09:41:45

标签: c# design-patterns

我有主表

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();

2 个答案:

答案 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);
    }
}    
相关问题