2014-12-12 2 views
0

이것은 순환 종속성으로 간주됩니까? 나는 개체 자체를 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); 
     } 
    } 
    } 
+0

어떤 언어입니까? C# 내 생각 엔? [C#] 태그를 추가하십시오. – ciuak

+0

@ciuak, 예, C# – omsharp

+0

왜 이것이 문제라고 생각하십니까? –

답변

1

틀린가요? "순환 의존성"은 일반적으로 참조에 적용됩니다. 여기에있는 것은 "단단한 결합"이라고합니다. 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 개 이상의 구현이 단단히 결합되어 있지 않습니다.