2016-11-07 8 views
0

클라이언트와 서버간에 메시지가 전달되는 네트워킹 애플리케이션을 만들고 있습니다. 메시지 유형 선언은 클라이언트와 서버 모두에 대해 동일합니다. 예를 들어, 메시지는 다음과 같이 보일 수 있습니다.자유 파스칼에서 선언과 구현을 분리합니다.

TExampleMessage = class(TObject) 
public 
    ProcessId: Word; 
    procedure Execute(Sender: TObject); 
end; 

그러나 메시지가 어떻게 작동하는지 (Execute 절차의 내용)는 프로세스마다 크게 다릅니다.

지금까지 내가 한 것은 단순히 클라이언트 용 메시지 단위와 서버용 메시지 단위를 갖는 것입니다. 어떤 방식 으로든 두 가지를 결합하여 한 공유 단위에 선언 된 모든 유형을 가질 수 있고 프로세스에 연결된 단위로 구현 된 메시지 비헤이비어의 실제 구현을 수행 할 수 있기를 원합니다.

이것이 가능합니까? 그리고 가능하다면할만한 가치가 있습니까?

+0

아마도 인터페이스를 사용하고 계십니까? 인터페이스가있는 하나의 유닛과 해당 인터페이스의 구현을위한 두 개의 유닛 (서버/클라이언트). –

+0

나는 그것에 대해 생각해 보았다. 현재 모든 메시지는 동일한 방법을 많이 공유하므로 인터페이스가 합리적입니다. 어느 시점에서 공유 메시지 팩토리를 갖고 싶습니다. 인터페이스에서 허용 할 수 있습니까? – on3pk

+0

글쎄, 특히 프리 패스 스케이프에 익숙하지는 않지만 가능해야한다고 생각합니다. 개인적인 선호는 JSON 객체에 물건을 보관하는 것입니다. –

답변

1

나는 뭔가를 이해하지 못하는 것처럼 보이지만 왜 표준 OOP 방식을 사용하지 않습니까? 가상/추상 Execute 메서드로 TSampleMsg 개체를 선언하고이 메서드를 재정 의하여 다른 클래스를 파생시킵니다.

+1

흠. 글쎄, 사실 나는 그렇게 했지. 나는 내 졸음에 기초하여 그렇게 바보 같이 행동했다. 두 개의 기본 클래스가 있습니다 :'TServerMessage'와'TClientMessage'. 'TExampleMessage'는 구현에 따라'TServerMessage' 또는'TClientMessage'에서 파생됩니다. 내가해야 할 일은 공유 유닛에'TExampleMessage'를 설정하고'TServerExampleMessage'와'TClientExampleMessage'를 파생 클래스로 만드는 것입니다. – on3pk

+0

정확합니다. 예를 들어, TServerMsg 또는 TClientMsg를 매개 변수로 전달하여 메서드를 호출해야 할 때마다 – Igor

+0

과 같이 선언합니다. procedure MyProc (Msg : TExampleMsg); begin Msg.Execute(); 끝; 그리고 모든 인스턴스는 Execute 메서드 자체 구현을 실행합니다. 당신이 찾고있는 것이 아닙니까? – Igor