C# 如何实现删除子表的访问者设计模式
我有主桌C# 如何实现删除子表的访问者设计模式,c#,design-patterns,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_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=新的CalcWiz 访问者模式是GOF的模式,应用于C类,所以在定义模式之前必须定义业务层
在这里,您可以找到类图和代码示例如果您严格遵循访问者模式,我将这样实现它。但是,我不太喜欢它,因为我喜欢我的模型/实体干净,这意味着实现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);
}
}
您需要在业务逻辑中实现这一点,还是可以在数据库中实现这一点?您需要在业务逻辑中实现,而不是在数据库中实现这一点。我已经用对象定义了所有表。只需要知道如何根据查询人返回的CALC_id删除子表记录,只需要使用implement的结构即可删除