2011-05-10 2 views
7

I 네 클래스를 가지고
2 데이터를 소유 하나 다른 데이터를 갱신
3 : 데이터
의 어떤 변화에 대해 처음으로 통지 셋째 4 : 첫 번째 클래스의 특정 속성을 읽는 마지막
C# 디자인 문제

다른 클래스는 필요 없지만 두 번째 클래스는 데이터를 업데이트 할 수 없습니다.
그럼 여기에서 사용할 수있는 가장 좋은 그림은 무엇입니까? 문제에

더는 :
1 클래스는 스키마라고하며 스키마가 있음을 이용하여 얼마나 많은 인스턴스의 카운터를 보유하고있다.
두 번째 클래스는 Factory라고하며이 인스턴스를 생성/삭제하므로 스키마 인스턴스 카운터를 업데이트하고 필요할 때 새 스키마 개체를 만들어야합니다.
세 번째 클래스는 Config라고하며 새로운 각 스키마 개체에 대한 정보를 비롯한 다양한 공유 구성을 보유합니다.
4 번째 클래스는 뷰라 불리고 단순히 스키마 정보를 봅니다.
스키마 개체는 정적 목록에 포함되어 있기 때문에 ID로 액세스 할 수 있습니다.

+1

econd 클래스와 그 클래스 만이 first 클래스의 속성을 변경할 수 있습니다. 첫 번째 클래스의 코드가 왜 캡슐화되지 않습니까? – Glenner003

답변

0

이것은 매우 추상적 인 시나리오 설명이므로 문제와 원하는 것을보기가 매우 어렵습니다.

'oop'에 대해 이야기 할 때 일반적으로 개체를 설명하는 단일 클래스가 있습니다. 귀하의 경우 귀하의 개체는 '데이터'입니다. 따라서 첫 번째 클래스는 데이터이어야하며 해당 데이터에 대한 연산을 캡슐화해야합니다.

클래스는 개체를 설명하며 함수 모음이 아닙니다. 두 번째 클래스는 단순히 함수 모음 인 것처럼 들립니다.

현재 상황에 대해 자세히 설명하지 않기 때문에 상황을 자세히 설명해야합니다.

3

절차 코드에서 개체 지향 코드로 전환하고 두 개의 첫 번째 클래스를 데이터와 동작을 모두 가진 단일 클래스로 병합합니다.

0

패턴 (? 어쩌면 this) 이름을 확인하지만 기본적으로 당신은 할 수 없음 :

1 : 데이터 (데이터 변경에 화재 이벤트)

2를 소유 한 : 다른 데이터를 업데이트

제 3 클래스 기본적으로 당신의 "클라이언트 코드"- (이 경우 클래스 1) 다른 코드를 소비 코드 첫 번째 클래스의 이벤트를 구독하는 모든 클래스가 될 수

EDI T : 당신이 묘사 한 내용이 Visitor 패턴에 가까울 것이라고 생각합니다.

0

여기에는 디자인 패턴이 필요 없습니다. 그냥 몇 가지 원칙.

아이디어는 간단하다 : 2 층과 3 급 사이의 관계가 아닌 경우

객체가
객체가 자신의 상태를 수정의 행동에 의해 정의된다
객체는 상태

public class SecondClass{ 
    public FirstClass First{get;private set;} 
    public ThirdClass Third{get; private set;} 
    public void DoSomething(){ 
    First.Something++; 
    Second.NotifySomethingHasBeenDone(); 
    } 
} 

경비원 직접 알림을 위해 이벤트를 사용할 수 있습니다.

public class SecondClass{ 
    public FirstClass First{get;private set;} 
    public void DoSomething(){ 
    First.Something++; 
    RaiseEvent<SomethingHasBeenDone>(this); 
    } 
} 

public class ThirdClass:IHandles<SomethingHasBeenDone>{ 
    public void Handle(SomethingHasBeenDone @event){ 
    MessageBox("First has {0} something".With(@event.First.Something)); 
    } 
}