这是坏代码吗?如果是,那么如何解决它?

时间:2014-12-12 19:41:19

标签: c# interface dependencies circular-dependency

这被视为循环依赖吗?我不喜欢那个我必须将对象本身传递给IRule的部分......有没有办法解决这个问题?

  public interface IRule
  {
    void Apply(World world);
  }

  public class World
  {
    public List<IRule> Rules { get; set; }

    public void ApplyAllRules()
    {
        foreach (var rule in Rules)
        {
            //This is the part that I don't feel good about.
            rule.Apply(this);
        }
    }
  }

1 个答案:

答案 0 :(得分:1)

可能是我错了但是术语&#34;循环依赖&#34;通常适用于参考文献。你在这里所谓的&#34;紧耦合&#34;。正如 Gjeltema 所提到的那样,除此之外没有太大的错误,最好是你将具体的物体分离出来。

public interface IRule
{
    void Apply(ILocation loc);
}

public class World : ILocation
{
    public List<IRule> Rules { get; set; }

    public void ApplyAllRules()
    {
        foreach (var rule in Rules)
        {

           rule.Apply(this);
        }
     }
 }

现在你有IRule与具体对象进行通信而不是抽象接口。因此,没有2个或更多实现紧密耦合。