2013-08-05 1 views
1

양식이 독립형이어야하지만 내 딜레마가 있습니다.두 가지 형식을 함께 사용하는 것이 좋지 않습니까?

나는 GameMap이라는 개체가 있습니다. MapForm에 존재하며 모두 괜찮은 편입니다. 그러나 나는 또한 TilesetFormLayerForm을 가지고 있습니다. GameMap을이 객체에 전달했습니다.하지만 레이어 폼과 맵 에디터간에 CurrentLayer를 전달해야 편집하고 편집 할 수 있어야했습니다. 다른 형식으로 선택하십시오. 내가 아는 다음 물건 - 두 사람 사이의 의존성은 거의 묶여 있습니다. 타일셋은 MapForm을 제공한다는 유일한 목적을 가지고 있기 때문에 함께 묶는 것이 적절합니다.

어떻게해야합니까? 양식이 활성화되어 있지 않아서 생성자를 사용할 수 없습니다. 지금 새지도 양식에 포커스가있을 때 SwitchContext을 방금 호출했습니다.

+0

Photoshop에서이 작업을 수행한다고 상상할 수 있습니다.이 방법의 단점을 분명히 볼 수 있으므로 가능한 한 많이 피하려고 노력하십시오. 아마도 정보가 접근 할 수있는 근거가 충분하지 않을 수도 있습니다. – Sayse

+0

올바른 패턴을 구현하지 못하도록 제한하고 모든 곳에서 전염병에 걸리는 winforms를 적절히 감추지 못하게하는 제한 사항. WPF가이를 대체하기 위해 발명 된 이유가 여기에 있습니다. –

+0

@HighCore 궁금합니다. WPF 같은 것이 어떻게이 문제를 해결합니까? –

답변

2

이벤트를 사용하여 처리합니다.

맵 인스턴스를 타일 세트에 전달하고 무언가가 발생했을 때 타일을 직접 조작하여 맵을 설정하는 대신, 중요한 일이 발생할 때마다 타일 세트에서 이벤트를 정의하십시오. 그런 다음지도에서 해당 이벤트를 구독하고 몇 가지 작업을 수행 할 수 있습니다. 타일셋은지도에 대해 전혀 알 필요가 없습니다.

맵이 논리적으로 타일셋을 "소유"하지 않는다면 이벤트에 직접 가입하지 않아도됩니다. 타일 ​​세트와지도를 "아는"제 3 자 (일부 상위 개념)를 갖는 것이 합리적 일 수 있습니다. 그런 다음 이벤트 핸들러를 타일 세트에 가입시키고 이벤트 핸들러의 맵에서 적절한 메소드를 호출합니다. 이 방법은지도의 특정 UI 구현에 대해 알지 못하도록하기위한 것입니다.

+0

+1입니다. 이것은 사물을 다루기위한 적당한 방법처럼 보입니다. 가장 최악의 경우, 적어도 마스터 오브젝트와 결합하는 한 가지 방법은 괜찮습니다. –

관련 문제