我正在努力寻找解决问题的最佳方法。 我有一些接口 ITokenResolver 和一个具体的实现者 ObjectGraph 以及一段ObjectGraph类的代码:
bool ITokenResolver.HasCollision(ITokenResolver other, out string msg)
{
if (!(other is ObjectGraph og))
{
msg = null;
return false;
}
var samePaths = GetAllPaths().Intersect(og.GetAllPaths());
if (samePaths.Count() > 0)
{
msg = $"Both graphs contain same object paths: [{string.Join(StringExtensions.Comma, samePaths)}]";
return true;
}
msg = null;
return false;
}
让我担心的是,我的库用户可以创建几乎相同的实现者行为( ITokenResolver 的实现者,但不是 Graph 类的实现者)。
我的代码仅适用于我的预定义类型,但是我不知道如何使其更好地适用于所有GRAPH-LIKE解析器。我应该创建一个像 IGraphResolver 这样的新接口,以便将我的实现者更改为public class ObjectGraph: ITokenResolver, IGraphResolver
吗?使用新的界面,我可以在不知道具体实现的情况下,而是依靠界面,来覆盖所有特定的解析器。这是对的吗?
我在GitHub上的原始代码:ObjectGraph.cs