2009-11-12 3 views
0

현재 임베디드 시스템에 GUI을 개발 중입니다. 읽기 전용 객체를 시뮬레이트하는 우아한 디자인

문맥 나는 임베디드 시스템을 시뮬레이션하는 클래스를 생성 한

(나는 progamatic 의미와 혼동을 피하기 위해 인터페이스 반대로 내 응용 프로그램을 descripe하는 GUI를 사용하고 있습니다). TCP/Serial 또는 두 개의 Connection 객체 사이의 가상 연결을 통해 통신 할 수 있도록 설계된 Connection 클래스를 통해 모든 통신을 수행합니다.

이 모든 것이 잘 작동하고 예상대로 시뮬레이션 된 객체와 GUI이 가상 연결을 통해 통신합니다.

Diagnostic 패킷은 device (실제 또는 시뮬레이션)에서 전송되며 GUI으로 읽습니다. 이것은 내가 ControllerDiagnostic라고 불렀던 클래스에 잘 맞습니다.

질문

내 질문은 ControllerDiagnostic 클래스에 관한 것이다. GUI 쪽에서 모든 속성은 읽기 전용 이어야합니다 (비공개 필드에 대한 반사를 통해 직접 계단식 제거가 수행됩니다). 시뮬레이션 측면에서 그들은 분명히 변경 가능해야합니다. 그럼 어떻게하면 우아하게 처리 할 수 ​​있을까요? 나는 다음을 고려했다 :

  • ControllerDiagnostic을 모방했지만 필드의 설정을 드러내는 완전히 새로운 클래스를 만든다.
  • ControllerDiagnostic의 모든 필드를 생성 한 다음 시뮬레이션 클래스 내에서 이러한 필드에 접근자를 제공하는 개인 중첩 클래스로 상속합니다.
  • 단지 두 클래스로 어셈블리를 만들고 Internal 설정기를 사용하십시오.
  • 속성을 읽기/쓰기로 그대로두고 GUI에서 수정하지 말 것을 문서화하십시오.
  • C#을 다시 작성하면 C++에서와 동일한 방법으로 friend을 사용할 수 있습니다.

아무 것도 나에게 이상적이지 않습니다.

감사

답변

0

당신은 getter 및 setter 만 모든 속성에 대한 게터를 공개하는 두 번째 인터페이스와 클래스의 모든 속성을 노출하는 인터페이스를 작성할 수 있습니다. 그런 다음 단일 클래스에서 두 인터페이스를 모두 구현하고 GUI에서 getter 전용 인터페이스를 사용하십시오.

public interface IReadWrite 
{ 
    string SomeString { get; set; } 
} 

public interface IReadOnly 
{ 
    string SomeString { get; } 
} 

public class TestClass : IReadWrite, IReadOnly 
{ 
    public string SomeString { get; set; } 
} 
: 다음과 같이 다소 볼 수있는 코드에서