例如,我有两个类如何避免嵌套开关结构?
public class A
{
public Guid Id { get; set;}
public string Type { get; set; }
public string State { get; set; }
public string SomeProperty { get; set; }
}
public class B
{
public Guid Id { get; set; }
public string Type { get; set; }
public string State { get; set; }
public string AnotherProperty { get; set; }
}
每个班级都有自己的仓库
public class RepA
{
public void Add(A entity)
{
// some specific logic here
}
public void Delete(A entity)
{
// some specific logic here
}
}
public class RepB
{
public void Add(B entity)
{
// some specific logic here
}
public void Delete(B entity)
{
// some specific logic here
}
}
我需要实现节能与动态类型的实体列表的方法。我想避免使用嵌套的“开关”结构(如下所列),因为我有两种以上的状态和两种以上的状态,代码会变得杂乱无章。
private readonly RepA _repA = new RepA();
private readonly RepB _repB = new RepB();
public void SaveChanges(List<dynamic> entities)
{
foreach (var entity in entities)
{
switch (entity.Type)
{
case "A":
var a = entity as A;
switch (entity.State)
{
case "Added":
_repA.Add(a);
break;
case "Deleted":
_repA.Delete(a);
break;
}
break;
case "B":
var b = entity as B;
switch (entity.State)
{
case "Added":
_repB.Add(b);
break;
case "Deleted":
_repB.Delete(b);
break;
}
break;
}
}
}
您能否提出其他解决方案? 我想过基类和基础知识库的接口。但在这种情况下,何时以及如何初始化依赖于实体类型的_repo?
private IBaseRep _repo;
public void SaveChanges(List<dynamic> entities)
{
foreach (var entity in entities)
{
switch (entity.State)
{
case "Added":
_repo.Add(entity)
break;
case "Deleted":
_repo.Delete(entity)
break;
}
}
}
'case'Deleted“:_repB.Add(b);'一个错误?你的意思是'_repB.Delete(b);'? –
首先为什么需要成为'List'?还有其他更好的选项,比如界面和抽象类。 –
这取决于A和B在域上下文中的含义?他们是相关的还是可以参与继承?我想是的,看着他们的成员。请确认。 – niksofteng