2010-01-02 5 views
2

루스 커플 링과 그 이점은 정말 좋은 것이지만 느슨하게 결합 된 솔루션을 생성하는 데 어떤 도구가 좋은지 궁금합니다. 먼저 내 생각에는 Type and Interfaces와 Abstract 클래스가 있었지만 느슨한 결합을 제공하는 방법은 매우 다양합니다. 어쩌면 다형성은 느슨하게 결합 된 객체와 시스템을 만드는 데 도움이됩니다.C#의 루스 커플 링에 가장 적합한 도구는 무엇입니까

감사합니다.

답변

11

이것은 매우 광범위한 질문입니다. 대답하기에 너무 광범위 할 수 있습니다.

그러나, "루스 커플 링"인 솔루션을 제공 할 수있는 두 방법은 :

의존성 주입

의존성 주입 (특히 제어 컨테이너의 반전을 이용하여) 는 어플리케이션 내 느슨한 결합을 제공한다 또는 솔루션 - 의존성 삽입을 사용하면 종속 객체에 대한 참조를 하드 코딩하지 않고 인터페이스를 코딩하고 해당 인터페이스의 구현을 삽입 할 수 있습니다. 여기

응용 프로그램의 로깅 구성 요소의 빠른 코드 예제, 즉는 ILogger입니다 인터페이스에게 수업의

public class ConcreteLogger : ILogger 
{ 

    public LogMessage(string message) 
    { 
     Log.Write(message); 
    } 
} 

한 후 로거 인터페이스의 구체적인 구현을 수신을 구현합니다.

public class MyClass 
{ 
    private ILogger logger; 

    public myClass(ILogger logger) 
    { 
     this.logger = logger; 
    } 

    public void DoSomething() 
    { 
     // Now if DoSomething needs to call logging it can call what ever ILogger was passed in 
     this.logger.Log("We did something"); 
    } 
} 

서비스 동향

서비스 동향 솔루션의 다른 서브 시스템 간의 느슨한 결합을 제공합니다 - 솔루션의 각 부분이 게시하고 인터페이스 (종종 메시징 기반 그 자체 독립형 서비스됩니다 서비스의 방향으로 인터페이스).

예를 들어 솔루션의 배송 하위 시스템과 통신해야하는 경우 응용 프로그램은 시스템 인터페이스와 해당 주소에 대해 알아야하며 내부 구현에 대해 알 필요가 없습니다. 이것은 거의 기본 OO 원칙의 광범위한 적용으로 볼 수 있습니다.


이 두

+0

이것은 또한 내가 생각한 것입니다. 그러나 이것이 Dependency Injection이라고 불리는 것을 알지 못했습니다. 사물을 명확히 해줘서 고마워. 아주 유용한 답변입니다. 예를 들면 더 이해하기 쉬워졌습니다. – Tarik

+1

다행히 나는 당신을 어딘가에 줬다. 나는 약간의 의존성 주입 마약 중독자이다. 나는 그것을 사용하기 시작할 때 내 디자인에 많은 가능성을 열었다. IOC 컨테이너도 조사합니다. 이것들은 의존성 주입을하는 무거운 짐을 처리합니다. –

0

커플 링을 느슨하게하는 가장 좋은 방법은 Dependency Injection입니다. 인터페이스의

1
  • 좋은 OOD
  • 사용
  • IOC의 (DI 등 Microsoft.Practices.Unity 또는 윈저 등)을
  • 적절한 디자인 패턴 (MVC, n 계층 등)
2

당신의 두뇌 아마 (용어 그 자체가 느슨하게 정의되어 그 질문에 대한 문제 중 하나입니다) 느슨한 결합의 두 가지 종류가 제공?

인터페이스를 염두에 둔 프로그램. 최소한의 명시적인 인터페이스를 사용하여 자체 포함 된 코드의 작은 섬으로 라이브러리를 구축하십시오. 모든 기호의 범위를 제한하십시오. 특히 변경 가능한 기호 (예 : 변수). 관련이없는 한 구현 세부 정보를 제공하지 마십시오.

1

다른 사람들은 이미 훌륭한 해답을 제공해 왔지만 상속을 사용하여 구현 된 다형성은 느슨한 결합을 촉진하지 않습니다. 상속은 기본 클래스와 파생 클래스 간의 매우 강력한 결합입니다.

0

지금까지 가장 좋은 도구는, 이벤트 처리를 느슨하게 결합 및 많은 (앞서 언급 한 유니티 워크를 포함)
그것은 종속성 주입 도구를 포함 Microsoft CAB이다.

+0

제공된 링크를 클릭하면 MS CAB이 "retired"섹션에 표시됩니다. 아마 좋은 충고가 아닌가? –

+0

종속 연결은 여기 (http://msdn.microsoft.com/en-us/library/dd203101.aspx)에서 느슨하게 결합 된 이벤트 처리가 여기에 있습니다 (http://msdn.microsoft.com/en-us). /library/dd458809.aspx). 똑같은 문제입니다. 익숙하지 않은 CAB의 다른 부분이 있었지만 '패턴과 관행'아래에 모든 것이 있다고 확신합니다. –

1

MEF는 느슨한 커플 링을위한 최상의 도구입니다! 처음부터 매우 MEF/플러그인 친화적 인 앱을 디자인하면 앱이 매우 느슨하게 결합된다는 것을 알게 될 것입니다.

관련 문제