2008-09-16 2 views
3

시스템의 구성 요소 또는 서로 통신하는 서로 다른 시스템간에 100 % 디커플링을 달성 할 수 있습니까? 나는 그것이 가능하다고 생각하지 않는다. 두 시스템이 서로 통신하는 경우 이들 사이에 어느 정도의 결합이 있어야합니다. 내가 맞습니까?100 % 디커플링을 달성 할 수 있습니까?

답변

0

당신은 그것을 달성 할 수 있습니다. 네트워크를 통해 서로 통신하는 두 가지 구성 요소를 생각해보십시오. 하나의 구성 요소는 Windows에서 실행될 수 있지만 다른 구성 요소는 Unix에서 실행될 수 있습니다. 100 % 디커플링이 아닌가요?

+0

아닙니다. 그들은 서로 이야기하기 위해 사용하는 프로토콜에 의해 함께 연결됩니다. 이것이 "일종의"100 % 디커플링이라는 것에 동의하지만, 나는 100 % 디커플링이 불가능하거나 실현 가능하지 않다고 생각합니다. – Statement

2

구성 요소가 100 % 분리되면 서로 통신하지 못한다는 의미입니다.

실제로는 different types of coupling이 있습니다. 그러나 일반적인 생각은 객체가 서로 의존하지 않으면 객체가 결합되지 않는다는 것입니다.

0

적어도 특정 인터페이스의 방화벽 보호는 각 시스템의 트래픽이 다른 시스템으로 이동하는 것을 허용해야합니다. 이것만으로도 '커플 링'의 형태로 간주 될 수 있으므로 커플 링은 적어도 특정 수준까지 통신하는 기계에 내재되어 있습니다.

0

이는 두 구성 요소가 이해하고 통신 구성 요소간에 직접 데이터를 전달하지 않는 통신 인터페이스 또는 프로토콜을 도입함으로써 달성 할 수 있습니다.

+0

예.하지만 나중에 프로토콜을 변경 한 경우 두 구성 요소를 모두 변경해야합니다. 커플 링하지 않겠습니까? –

+0

글쎄, 아니, 내가 "커플 링"이라는 용어를 이해하는 한. 디커플링은 두 구성 요소가 서로를 알지 못하는 경우입니다. 그들은 둘 다 제 3 구성 요소의 무엇인가를 알 수있었습니다. 프로토콜. –

0

서로를 참조하지 않는 두 가지 웹 서비스가 100 % 디커플링의 좋은 예일 수 있습니다. 커플 링은 그 둘을 사용하여 함께 커플 링하는 앱 유틸리티의 형태로 도착합니다.

커플 링은 본질적으로 나쁘지는 않지만, 구현을 할 때 또는 프레임 워크 자체에서 일 뿐이라는 단호한 판단을 요구하고 커플 링이 합리적인 지 여부를 확인해야합니다.

2

오른쪽. 인터페이스 나 프로토콜에 글을 쓸지라도 무언가를 저지르고 있습니다. 당신은 평화적으로 100 % 디커플링을 잊어 버리고 나머지는 안심할 수 있습니다. HTTP와 같은 매우 기본적인 프로토콜을 사용하지 않는 한, 당신이 무엇을 하든지, 단지 하나의 구성 요소를 짤 수 있고, 어쨌든 최소한의 변경없이 다른 구성 요소를 때 리도록 할 수는 없습니다 그 다음.)

우리 인간 (결국 LOOVE 표준). 그래서 우리는 ... 음, 신경 쓰지 않아.

0

구성 요소가 100 % 직교하도록 설계된 경우 가능해야합니다. 우려를 분명하게 분리하면이를 달성 할 수 있습니다. 모든 구성 요소가 알아야 할 것은 입력의 인터페이스입니다.

커플 링은 단방향이어야합니다. 구성 요소는 매개 변수의 의미를 알고 있지만 서로를 불가지론해야합니다.

은 즉시 구성 요소 사이의 1 % 커플 링을 가지고, 1 %는

그러나, 종종 지식은 더 높은 성능을 달성하기 위해 피어 구성 요소에 주입된다 (좀 더 지속되는 시스템에서) 성장을 시작합니다.

0

두 구성 요소가 직접적으로 comunicate하지 않더라도 다른 두 구성 요소를 사용하는 세 번째 구성 요소는 시스템의 일부이며 결합되어 있습니다.

@Vadmyst : 구성 요소가 네트워크를 통해 통신하는 경우 두 로컬 구성 요소의 인터페이스와 동일한 종류의 프로토콜을 사용해야합니다.

0

대답하기가 상당히 힘듭니다.상기 시스템이 단일 애플리케이션의 구성 요소 인 경우 MVC (Model View Controller) 및 IoC/Dependency Injection을위한 인터페이스와 같은 다양한 기술이있어 구성 요소의 분리를 용이하게합니다.

CORBA와 COM은 물리적으로 분리 된 소프트웨어 아키텍처의 관점에서 로컬 또는 네트워크 interop을 지원하고 ATL과 같은 "공통 언어"를 사용합니다. SOAP는 커플 링 수행에 WSDL을 사용하는 XML 서비스에 의해 사용되지 않습니다. 드물게 볼 수는 있겠지만 SOAP 클라이언트가 런타임 후기 연결에 WSDL을 사용하는 것을 막을 수있는 방법은 없습니다. 그렇다면 XML과 유사하지만 최적화 된 JSON과 interop을 최적화하는 Google 프로토콜 버퍼가 있지만 일반적으로 사전 컴파일되고 늦게 결합되지는 않습니다.

IPC (프로세스 간 통신)의 경우 두 시스템은 공통 "프로토콜"을 말하면됩니다. 이것은 XML 일 수도 있고 공유 클래스 라이브러리 일 수도 있고 독점적 인 것일 수도 있습니다. 독점적 인 수준이라 할지라도 여전히 메모리 스트림, TCP/IP 네트워킹, 공유 파일 (메모리 또는 하드 디스크) 또는 기타 메커니즘을 통해 "결합"되어 있으며 바이트와 궁극적으로 1과 0을 사용하고 있습니다.

궁극적으로 질문은 실제로 공정하게 대답 할 수 없습니다. 엄밀히 말하면, 100 %는 zilch가 서로 할 수있는 시스템에 의해서만 달성됩니다. 문맥에 맞게 질문을 구체화하십시오.

0

직접 및 간접 구성 요소를 구별하는 것이 중요합니다. 직접 연결 (다른 클래스를 참조하는 하나의 클래스)을 제거하고 대신 간접 연결을 사용하려고 노력하십시오. 자신의 상호 작용을 관리하는 세 번째 클래스와 '무식한'클래스 두 개를 바인딩합니다.

이것은 폼에 앉아있는 사용자 정의 컨트롤 집합이나 데이터베이스 연결 풀 및 연결 풀링 클래스와 비슷합니다. 보다 기본적인 구성 요소 (컨트롤 및 연결)는 상위 구성 요소 (양식 및 연결 풀)로 관리되지만 기본 구성 요소는 다른 구성 요소에 대해 알지 못합니다. 기본 구성 요소는 이벤트와 메서드를 노출하고 다른 부분은 문자열을 가져옵니다.

0

아니요, 아닙니다. 조엘의 훌륭한 기사 The Laws of Leaky Abstraction을 읽으십시오. 많은 사람들의 눈을 뜨게합니다. 그러나 이것은 반드시 불량이 아닙니다. 일입니다. Leaky 추상화는 기본 플랫폼을 악용 가능하게 만들기 때문에 좋은 기회를 제공합니다.

0

아주 열심히 아주 긴 시간 동안 API 생각 다음 Lego Software Process는이 제안 ...

그것을 가능하게 할 수는 거의 사라졌다 장소에서의 때까지, 작은 확신합니다. .. :) - 실제로는 꽤 잘이 ...

"밀접하게 결합 된"생물체의 두 세포는 ... ...?)

, 여전히, 대신 수신에 대한 지식을 필요로 어떤 방법으로 그 일을 (또는 전송) 부분으로 통신 할 수있는 유기체의

세포, 그들은 몸 ...에 화학 물질을 방출에 의해 그것을 할

관련 문제