루스 커플 링과 그 이점은 정말 좋은 것이지만 느슨하게 결합 된 솔루션을 생성하는 데 어떤 도구가 좋은지 궁금합니다. 먼저 내 생각에는 Type and Interfaces와 Abstract 클래스가 있었지만 느슨한 결합을 제공하는 방법은 매우 다양합니다. 어쩌면 다형성은 느슨하게 결합 된 객체와 시스템을 만드는 데 도움이됩니다.C#의 루스 커플 링에 가장 적합한 도구는 무엇입니까
감사합니다.
루스 커플 링과 그 이점은 정말 좋은 것이지만 느슨하게 결합 된 솔루션을 생성하는 데 어떤 도구가 좋은지 궁금합니다. 먼저 내 생각에는 Type and Interfaces와 Abstract 클래스가 있었지만 느슨한 결합을 제공하는 방법은 매우 다양합니다. 어쩌면 다형성은 느슨하게 결합 된 객체와 시스템을 만드는 데 도움이됩니다.C#의 루스 커플 링에 가장 적합한 도구는 무엇입니까
감사합니다.
이것은 매우 광범위한 질문입니다. 대답하기에 너무 광범위 할 수 있습니다.
그러나, "루스 커플 링"인 솔루션을 제공 할 수있는 두 방법은 :
의존성 주입
의존성 주입 (특히 제어 컨테이너의 반전을 이용하여) 는 어플리케이션 내 느슨한 결합을 제공한다 또는 솔루션 - 의존성 삽입을 사용하면 종속 객체에 대한 참조를 하드 코딩하지 않고 인터페이스를 코딩하고 해당 인터페이스의 구현을 삽입 할 수 있습니다. 여기
응용 프로그램의 로깅 구성 요소의 빠른 코드 예제, 즉는 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 원칙의 광범위한 적용으로 볼 수 있습니다.
이 두
커플 링을 느슨하게하는 가장 좋은 방법은 Dependency Injection입니다. 인터페이스의
당신의 두뇌 아마 (용어 그 자체가 느슨하게 정의되어 그 질문에 대한 문제 중 하나입니다) 느슨한 결합의 두 가지 종류가 제공?
인터페이스를 염두에 둔 프로그램. 최소한의 명시적인 인터페이스를 사용하여 자체 포함 된 코드의 작은 섬으로 라이브러리를 구축하십시오. 모든 기호의 범위를 제한하십시오. 특히 변경 가능한 기호 (예 : 변수). 관련이없는 한 구현 세부 정보를 제공하지 마십시오.
다른 사람들은 이미 훌륭한 해답을 제공해 왔지만 상속을 사용하여 구현 된 다형성은 느슨한 결합을 촉진하지 않습니다. 상속은 기본 클래스와 파생 클래스 간의 매우 강력한 결합입니다.
지금까지 가장 좋은 도구는, 이벤트 처리를 느슨하게 결합 및 많은 (앞서 언급 한 유니티 워크를 포함)
그것은 종속성 주입 도구를 포함 Microsoft CAB이다.
제공된 링크를 클릭하면 MS CAB이 "retired"섹션에 표시됩니다. 아마 좋은 충고가 아닌가? –
종속 연결은 여기 (http://msdn.microsoft.com/en-us/library/dd203101.aspx)에서 느슨하게 결합 된 이벤트 처리가 여기에 있습니다 (http://msdn.microsoft.com/en-us). /library/dd458809.aspx). 똑같은 문제입니다. 익숙하지 않은 CAB의 다른 부분이 있었지만 '패턴과 관행'아래에 모든 것이 있다고 확신합니다. –
MEF는 느슨한 커플 링을위한 최상의 도구입니다! 처음부터 매우 MEF/플러그인 친화적 인 앱을 디자인하면 앱이 매우 느슨하게 결합된다는 것을 알게 될 것입니다.
이것은 또한 내가 생각한 것입니다. 그러나 이것이 Dependency Injection이라고 불리는 것을 알지 못했습니다. 사물을 명확히 해줘서 고마워. 아주 유용한 답변입니다. 예를 들면 더 이해하기 쉬워졌습니다. – Tarik
다행히 나는 당신을 어딘가에 줬다. 나는 약간의 의존성 주입 마약 중독자이다. 나는 그것을 사용하기 시작할 때 내 디자인에 많은 가능성을 열었다. IOC 컨테이너도 조사합니다. 이것들은 의존성 주입을하는 무거운 짐을 처리합니다. –