2011-11-10 8 views
3

분산 응용 프로그램 (서버 및 클라이언트)을 개발 중입니다. 서버가 보낸 지침 (예 : InitCommand, StartCommand, StopCommand)이 있습니다. 모든 명령에는 고유 한 인수가 있습니다. 이제 직렬화와 네트워킹에 관해서라면 모든 명령 유형 (하위에서 상속되는 하위 클래스)을 Command에서 생성해야하는지 또는 가능한 모든 인수를 Command 클래스에 넣어야할지 묻습니다.하위 클래스 또는 포괄적 인 클래스

명령을 처리 할 때 if (command is InitCommand)if (command.Type == CommandType.Init)입니다.

첫 번째 구현에서는 첫 번째 옵션을 사용합니다. 나는 손으로 연재 중이고 처음에 타입 정보를 넣는다. 이제 네트워크에서 데이터 (byte[])를 수신하면 먼저 실제 유형 (첫 번째 k 바이트 만 deserialize)을 확인하고 두 번째로 일부 비 직렬화 방법 (예 : Serializer.Deserialize<InitCommand>)을 사용합니다.

두 번째 옵션은 자동화 된 serialization을 사용할 수 있고 deserialization 전에 형식을 확인할 필요가 없어 사용하기가 훨씬 쉬워 보입니다. 그러나 그것은 모든 논쟁을 하나의 클래스에 넣어야한다는 것을 저를 귀찮게합니다.

다른 접근 방법에 대해 더 잘 알고 있습니까?

답변

1

여러 가지 방법으로 하나의 클래스가 있어야하는 것처럼 들립니다. Start, Init, Stop. 이것은 한 클래스의 모든 것을 지원합니다. SqlCommand는 CommandType이 TextStoredProcedure이고 TableDirect이며 다른 유형의 명령으로 다시 작성하려고하는 것처럼 들립니다. # 2를 선택하고 Microsoft가 구현 한 SqlCommand의 코드를 CommandType과 비교합니다.

관련 문제