这是糟糕的代码吗?如果是,那么如何解决它

本文关键字:何解决 解决 代码 如果 | 更新日期: 2023-09-27 18:34:08

这算不算循环依赖?我不喜欢必须将对象本身传递给 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);
        }
    }
  }

这是糟糕的代码吗?如果是,那么如何解决它

可能是我错了,但术语"循环依赖"通常适用于引用。你在这里所拥有的被称为"紧密耦合"。正如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 个或更多实现是紧密耦合的。