2008-10-13 3 views
0

디자인 질문 : 어떻게 투명하게 IPC 메커니즘에 액세스 할 수 있습니까?

print(foo.objects.bookdb.books[12].title); 

또는

book = foo.objects.bookdb.book.new(); 
book.title = 'RPC for Dummies'; 
book.save(); 

여기서 foo는 실제로 일부 IPC를 통해 내 프로그램에 연결되고 해당 메소드와 객체에 액세스하는 서비스입니다. , 일부 레이어는 실제로 네트워크를 통해 메시지를 보내고받습니다.

자, 선택할 수있는 것이 많기 때문에 지금은 IPC 메커니즘을 찾고 있지 않습니다. XML 기반이 아닌, 오히려 XML 기반 일 것입니다. th. Google의 프로토콜 버퍼, dbus 또는 CORBA와 유사합니다. 내가 확신 할 수없는 것은 응용 프로그램을 구조화하는 방법입니다. 그래서 어떤 객체처럼 IPC에 액세스 할 수 있습니다.

즉, 프로세스 경계를 ​​통해 투명하게 매핑되는 OOP를 어떻게 가질 수 있습니까?

이것은 설계상의 질문이 아니며 전체 아키텍처의 꽤 높은 수준에서 여전히 작업하고 있습니다. 그래서 나는이 언어가 어느 언어에 사용될 것인가에 대해 매우 불가지론 자입니다. C#, Java 및 Python 모두 사용하기 쉽습니다.

답변

-1

하지 마세요. 프로그래머가 코드에서 IPC/RPC와 로컬 메소드 호출의 차이점을보고 느끼는 것은 매우 중요합니다. 그렇게 생각하면 생각할 필요가 없으며, 생각하지도 않을 것이며, 이는 매우 저조한 코드로 이어질 것입니다. 의

생각해은 :

foreach o, o.isGreen in someList { 
    o.makeBlue; 
} 

프로그래머는 루프 someList 원격으로 발생하는 경우 대신이 가까운 초 소요, 완료하는 데 몇 나노초 걸리는 것으로 가정합니다.

+1

그래, 좋은 지적이야. 나는 이미 그것을 생각하고 있었다. 그러나이 이름 지정 규칙을 사용하면 쉽게 수정할 수 있습니다. 항상 someIpcList 또는 ipcFoo.bar()와 같은 경우, 어떤 일이 발생했는지 알 수 있습니다. 저는 임의의 언어/프레임 워크가 아니라 특정 애플리케이션과 특정 팀을 위해 설계하고 있습니다. –

+0

Imho, 프로그래머는 인터페이스에 대해 프로그래밍해야하며, 뒤에 숨겨져있는 것을 인식하지 않아야합니다. 프로그램 구성 요소를 함께 붙인 것은 이것에 대해 생각해야합니다. – xtofl

2

요청하는 작업을 수행하는 방법은 모든 개체 통신을 메시지 전달이라고 간주하는 것입니다. 이것은 루비와 스몰 토크 등에서 객체 메소드를 처리하는 방법입니다.

메시지를 객체 통신 메커니즘으로 전달하면 코드를 작성할 때 존재하지 않는 메서드를 호출하는 등의 작업이 개체가 메시지와 함께 의미있는 작업을 수행 할 수 있으므로 유용합니다 (원격 프로 시저를 확인하거나 데이터베이스에서 같은 이름의 필드 값을 반환하거나 '메서드를 찾을 수 없음'예외를 던지거나 생각할 수있는 다른 것을 던지십시오.

이 기능을 기본 메커니즘으로 사용하지 않는 언어의 경우 모든 메시지에 'handleMessage'메서드가 있지만 아무리 메시지 전달이라도 할 수 있지만 구문을 잘 알지 못한다는 점에 유의해야합니다. IDE가 handleMessage 메소드를 구문 분석하여 유효한 입력을 검사하도록하기 위해 사용자가 별도의 노력을 기울이지 않으면 IDE 도움말을 얻을 수 없습니다.

0

자바의 RMI을 읽어보십시오 - 입문 자료는 원격 객체의 로컬 정의 방법을 보여줍니다.

트릭은 동일한 메소드 서명이있는 두 개의 클래스를 갖는 것입니다. 클래스의 로컬 버전은 일부 네트워크 프로토콜을 통한 외관입니다. 원격 버전은 네트워크를 통해 요청을 수신하고 객체의 실제 작업을 수행합니다.클라이언트가

foo= NonLocalFoo("http://host:port") 
foo.this= "that" 
foo.save() 

을 가질 수 그리고 서버가 set_this를 수신()와 클라이언트 연결에서() 메소드 요청을 저장할 수 있도록

당신은 한 쌍의 클래스를 정의 할 수 있습니다. 탐색 및 인스턴스 관리 문제가 많기 때문에 서버 측은 (일반적으로) 중요하지 않습니다.

관련 문제