시스템의 구성 요소 또는 서로 통신하는 서로 다른 시스템간에 100 % 디커플링을 달성 할 수 있습니까? 나는 그것이 가능하다고 생각하지 않는다. 두 시스템이 서로 통신하는 경우 이들 사이에 어느 정도의 결합이 있어야합니다. 내가 맞습니까?100 % 디커플링을 달성 할 수 있습니까?
답변
당신은 그것을 달성 할 수 있습니다. 네트워크를 통해 서로 통신하는 두 가지 구성 요소를 생각해보십시오. 하나의 구성 요소는 Windows에서 실행될 수 있지만 다른 구성 요소는 Unix에서 실행될 수 있습니다. 100 % 디커플링이 아닌가요?
구성 요소가 100 % 분리되면 서로 통신하지 못한다는 의미입니다.
실제로는 different types of coupling이 있습니다. 그러나 일반적인 생각은 객체가 서로 의존하지 않으면 객체가 결합되지 않는다는 것입니다.
적어도 특정 인터페이스의 방화벽 보호는 각 시스템의 트래픽이 다른 시스템으로 이동하는 것을 허용해야합니다. 이것만으로도 '커플 링'의 형태로 간주 될 수 있으므로 커플 링은 적어도 특정 수준까지 통신하는 기계에 내재되어 있습니다.
이는 두 구성 요소가 이해하고 통신 구성 요소간에 직접 데이터를 전달하지 않는 통신 인터페이스 또는 프로토콜을 도입함으로써 달성 할 수 있습니다.
예.하지만 나중에 프로토콜을 변경 한 경우 두 구성 요소를 모두 변경해야합니다. 커플 링하지 않겠습니까? –
글쎄, 아니, 내가 "커플 링"이라는 용어를 이해하는 한. 디커플링은 두 구성 요소가 서로를 알지 못하는 경우입니다. 그들은 둘 다 제 3 구성 요소의 무엇인가를 알 수있었습니다. 프로토콜. –
서로를 참조하지 않는 두 가지 웹 서비스가 100 % 디커플링의 좋은 예일 수 있습니다. 커플 링은 그 둘을 사용하여 함께 커플 링하는 앱 유틸리티의 형태로 도착합니다.
커플 링은 본질적으로 나쁘지는 않지만, 구현을 할 때 또는 프레임 워크 자체에서 일 뿐이라는 단호한 판단을 요구하고 커플 링이 합리적인 지 여부를 확인해야합니다.
오른쪽. 인터페이스 나 프로토콜에 글을 쓸지라도 무언가를 저지르고 있습니다. 당신은 평화적으로 100 % 디커플링을 잊어 버리고 나머지는 안심할 수 있습니다. HTTP와 같은 매우 기본적인 프로토콜을 사용하지 않는 한, 당신이 무엇을 하든지, 단지 하나의 구성 요소를 짤 수 있고, 어쨌든 최소한의 변경없이 다른 구성 요소를 때 리도록 할 수는 없습니다 그 다음.)
우리 인간 (결국 LOOVE 표준). 그래서 우리는 ... 음, 신경 쓰지 않아.
구성 요소가 100 % 직교하도록 설계된 경우 가능해야합니다. 우려를 분명하게 분리하면이를 달성 할 수 있습니다. 모든 구성 요소가 알아야 할 것은 입력의 인터페이스입니다.
커플 링은 단방향이어야합니다. 구성 요소는 매개 변수의 의미를 알고 있지만 서로를 불가지론해야합니다.
은 즉시 구성 요소 사이의 1 % 커플 링을 가지고, 1 %는
그러나, 종종 지식은 더 높은 성능을 달성하기 위해 피어 구성 요소에 주입된다 (좀 더 지속되는 시스템에서) 성장을 시작합니다.
두 구성 요소가 직접적으로 comunicate하지 않더라도 다른 두 구성 요소를 사용하는 세 번째 구성 요소는 시스템의 일부이며 결합되어 있습니다.
@Vadmyst : 구성 요소가 네트워크를 통해 통신하는 경우 두 로컬 구성 요소의 인터페이스와 동일한 종류의 프로토콜을 사용해야합니다.
대답하기가 상당히 힘듭니다.상기 시스템이 단일 애플리케이션의 구성 요소 인 경우 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가 서로 할 수있는 시스템에 의해서만 달성됩니다. 문맥에 맞게 질문을 구체화하십시오.
직접 및 간접 구성 요소를 구별하는 것이 중요합니다. 직접 연결 (다른 클래스를 참조하는 하나의 클래스)을 제거하고 대신 간접 연결을 사용하려고 노력하십시오. 자신의 상호 작용을 관리하는 세 번째 클래스와 '무식한'클래스 두 개를 바인딩합니다.
이것은 폼에 앉아있는 사용자 정의 컨트롤 집합이나 데이터베이스 연결 풀 및 연결 풀링 클래스와 비슷합니다. 보다 기본적인 구성 요소 (컨트롤 및 연결)는 상위 구성 요소 (양식 및 연결 풀)로 관리되지만 기본 구성 요소는 다른 구성 요소에 대해 알지 못합니다. 기본 구성 요소는 이벤트와 메서드를 노출하고 다른 부분은 문자열을 가져옵니다.
아니요, 아닙니다. 조엘의 훌륭한 기사 The Laws of Leaky Abstraction을 읽으십시오. 많은 사람들의 눈을 뜨게합니다. 그러나 이것은 반드시 불량이 아닙니다. 일입니다. Leaky 추상화는 기본 플랫폼을 악용 가능하게 만들기 때문에 좋은 기회를 제공합니다.
아주 열심히 아주 긴 시간 동안 API 생각 다음 Lego Software Process는이 제안 ...
그것을 가능하게 할 수는 거의 사라졌다 장소에서의 때까지, 작은 확신합니다. .. :) - 실제로는 꽤 잘이 ...
"밀접하게 결합 된"생물체의 두 세포는 ... ...?)
, 여전히, 대신 수신에 대한 지식을 필요로 어떤 방법으로 그 일을 (또는 전송) 부분으로 통신 할 수있는 유기체의세포, 그들은 몸 ...에 화학 물질을 방출에 의해 그것을 할
- 1. 루비에서 다중 상속을 달성 할 수 있습니까?
- 2. 일종의 비트 마술을 사용하여이를 달성 할 수 있습니까?
- 3. ActionLink를 사용하여 RegisterClientScriptBlock의 동등성을 어떻게 달성 할 수 있습니까?
- 4. 스프링을 사용하여 다음 목표를 달성 할 수 있습니까?
- 5. C에서 가능하기 때문에 C에서 temeplatization을 달성 할 수 있습니까?
- 6. 어떻게 AtomicBoolean을 사용하여 이것을 달성 할 수 있습니까?
- 7. 멀티 코어 CPU 단일 스레드 동작, 달성 100 %
- 8. 디커플링을 위해 Linq-to-SQL과 인터페이스 사용
- 9. 어떻게 파이썬에서 소수점 이하 100 자리까지 표시 할 수 있습니까?
- 10. Java 100 % CPU로드없이 끊임없이 모니터 할 수 있습니까?
- 11. 주제별로 달성 할 수없는 모든 기능은 대기열에 있습니까?
- 12. pcntl_signal은 내가 이것을 달성 할 자식 프로세스
- 13. 동적으로 나는 다음과 같은 동작을 달성 할
- 14. DataTemplate을 나는 이런 식으로 뭔가를 달성 할 수있는 방법
- 15. IO와 CPU를 동시에 100 % 사용할 수 있습니까?
- 16. 어떻게이 헤더를 100 % 넓게 만들 수 있습니까?
- 17. Ext.Resizable을 'width : 100 %'요소에 사용할 수 있습니까?
- 18. CSS에서 다음 디자인 달성
- 19. CSS - 100 % 높이가 100 % 이상입니까?
- 20. Facebook 업적 달성 URL
- 21. 이 CSS 효과 (콘텐츠 및 패딩 배치)를 어떻게 달성 할 수 있습니까?
- 22. 모바일 웹 앱 내에서 Facebook의 "싱글 사인온"을 달성 할 수 있습니까?
- 23. C#에서 XML 형식 달성
- 24. 더 나은 DB 성능 달성
- 25. 패스 HTML 테이블 문자열 내가 이것을 달성 할
- 26. 내가 이것을 달성 할 수있는 효율적인 방법을 찾고 있어요 번호
- 27. 어떻게 nHibernate가 100 % 컴파일 시간을 테스트 할 수 없습니까?
- 28. h1 텍스트를 정당화하여 문자 간격을 100 % 너비로 늘릴 수 있습니까?
- 29. 룰 엔진은 무엇을 할 수 있습니까?
- 30. 브라우저 외부에서도 Flash 100 % GPU를 실행할 수 있습니까?
아닙니다. 그들은 서로 이야기하기 위해 사용하는 프로토콜에 의해 함께 연결됩니다. 이것이 "일종의"100 % 디커플링이라는 것에 동의하지만, 나는 100 % 디커플링이 불가능하거나 실현 가능하지 않다고 생각합니다. – Statement