배경 : 내부에 여러 레벨의 중첩 된 모양이있는 모양의 그림을 그립니다. 예를 들어 속성의 변경. 영역 내의 모든 모양과 모양은 모든 관련 속성과 모양을 변경하게됩니다.내부 설정 자와의 C# 인터페이스
내가 이렇게되면 디자인 패턴이 있습니다
을 내가 가지고, 서로 관련되는 속성의 톤을 가지고, 예를 들어 "NestedShapes"(토론을 위해)라는 개체 그래프, "지역" 및 "길이". 그러나 그래프는 벙어리가되도록 설계되었으므로 다른 값을 계산하는 방법을 알지 못하므로 그렇게하지 않을 것입니다.
그 대신 그래프는 그래프의 최상위 루트 노드 인 IRootShape를 그 생성자로 취하는 GraphManager에 첨부 될 수 있습니다.
NestedShapes는 INotifyPropertyChanged도 구현하는 IRootShape를 구현합니다. GraphManager는 이러한 속성 변경을 구독하고 관련 필드를 계산하고 IRootShape를 통해 그래프를 올바른 상태로 설정하는 논리를 실행합니다.
문제 : IRootShape와 함께 IShape, ISquare, ICircle 등이 실제 C# 인터페이스입니다. 하지만 문제는 이러한 속성 중 일부는 GraphManager에 전용 인 setter를 사용하기를 원합니다. 구현 셰이프는 여전히 공용 설정자를 노출 할 수 있습니다. 그러나 이 필요합니다.은 GraphManager에서 속성을 설정할 수 있도록 UI 측에서이 메서드를 노출하고 싶지 않습니다. 어떻게해야합니까? 내부 클래스가있는 기본 클래스가 갈 길을 설정 했습니까?
정의에 의한 인터페이스는 외부에서 표시되어야하는 것을 선언합니다.나는 기본 클래스가 최선의 방법이 될 것이라고 말하려고 노력할 것입니다. –
모든 셰이프에 공통된 동작을 원한다면 공통 기본 클래스에서 상속해야합니다. 또한, 왜 당신은'ICircle','ISquare' 등을위한 별도의 인터페이스가 필요합니까? 왜 'IShape'만이 아닌가? – ja72
@ ja72 나는 내가 IShape, ISquare, ICircle에만 상태라고 말할 것이라고 생각한다. 동작은 GraphManager에 있습니다. – Jake