2013-07-05 3 views
0

저는 타일 편집기에서 작업하고 있습니다. 편집기에서 타일 맵을로드 할 수 있습니다. 각 타일 맵은 여러 개의 레이어를 가질 수 있습니다. 타일 ​​맵에는 레이어 목록이 있습니다. 레이어 클래스에 타일 맵 속성이 필요합니다 (예 : 타일 너비/높이 등). 나는 지금이 일을하는 가장 좋은 방법이 무엇인지 스스로에게 묻고있다.하위 클래스에서 상위 속성에 액세스하는 가장 좋은 방법

  1. 레이어 클래스에 tilemap 속성을 도입하여 양방향 관계를 만들 수 있으므로 필요한 모든 항목에 액세스 할 수 있습니다. 그렇다면 관계의 양면을 돌봐야합니다.

  2. 나는 필요한 모든 속성을 생성자와 함께 레이어 클래스에 제공 할 수 있지만 기본적으로 레이어 속성이됩니다 (일명 모든 레이어에 대해 다른 개체 임).

  3. 2와 같지만 "ref"매개 변수를 사용하여 레이어에 속성을 제공합니다.

  4. TileMapLayerProperties와 같은 클래스를 만들 수 있습니다. 여기서 모든 속성을 넣은 다음 개체를 레이어 클래스에 전달합니다. 장점은 모든 속성이 동일하고 인스턴스마다 tileMapLayerProperties- 참조 만있을 것이라는 점입니다. 또 다른 장점은 레이어 생성자의 "정의"가 훨씬 짧아지는 것입니다.

그래서 어떤 제안이나 조언을 부탁드립니다.

답변

1

타일 맵에 포함 된 속성 및 메서드와 계층에서 알 수 있고 액세스 할 수 있어야하는 것에 따라 양방향 연관 (1)이 좋거나 다를 수 있습니다. 타일 ​​맵에 DeleteAllLayers 메소드가 있고 레이어가 레이어 맵을 호출 할 수 없어야하는 경우 레이어는 부모에게 직접 액세스 할 수 없습니다.

전용 속성 개체 (4)를 만드는 것이 나에게 더 깨끗해 보입니다. 그렇게하면 전달할 수있는 모든 필요한 정보를 가진 하나의 객체가 있지만 그 이상은 포함하지 않습니다. 특히 파괴적인 메서드 등을 호출 할 수 없습니다.

생성자 (2)에 속성을 전달하는 것은 비슷합니다 ~ (4),하지만 더 자세한 개체 지향 덜 장황한. 1 개 또는 2 개의 속성이 있지만 괜찮 으면 좋지만 몇 개 이상이면보기 흉하고 유지 관리가 어려워집니다.

하지만 또 다른 문제가 있습니다. 속성이 변경 불가능한 유형 (예 : int, string) 인 경우 레이어에 변경된 사항이지도에 표시되지 않습니다. 그들은 단지 그들의 개인 사본을 본다!

(3) 이해가 안됩니다. ref 키워드는 어떻게 변경됩니까? (2)?피 호출자는 호출자가 전달한 변수의 값만 변경할 수 있습니다. 또는 참조 유형이있는 객체를 의미합니까?

또 다른 해결책

인터페이스는이 문제를 해결하는 또 다른 방법이 될 것입니다.인터페이스를 만들어 모든 속성을 제공하고 레이어의 생성자에 전달할 수 있습니다. 지도는 인터페이스 자체를 구현하거나 인터페이스를 구현하는 TileMapLayerProperties 개체를 포함 할 수 있습니다. 그러나 레이어는 이것을 알 필요가 없습니다.

+0

당신은 속성이 변경되지 않는다는 것이 옳습니다. 즉,이 부분을 쓴 이유는 더 정확해야합니다. "하지만 기본적으로 레이어 속성이됩니다 (일명 모든 레이어에 대해 다른 개체 임). ref를 통해 int에 대한 참조를 레이어에 제공하려고 했으므로 맵에서 변경하면 레이어에서 변경됩니다. 귀하의 인터페이스 제안은 흥미로 우며 아마도 가장 좋은 해결책 일 것입니다. –

+0

옵션 4를 사용하여 종료했습니다. – TruthOf42

0

옵션 2는 수행하려는 작업에 적합하며 'ref'키워드를 포함하지 않아도됩니다. 궁금한 점이 있는데, 어떤 종류의 데이터 멤버가 하위 클래스에서 액세스하려고합니까? 컬렉션 인 경우 'ref'키워드가 필요하지 않을 수 있습니다. 또 다른 옵션은 부모 클래스를 정적으로 만드는 것이지만, 이것이 당신이 찾고있는 결과인지 확실하지 않습니다. 한 번에 두 개 이상의 타일 맵을로드 할 수 있습니까? 그렇지 않은 경우 정적 클래스 옵션을 고려하십시오.

+0

여기서 '정적'은 전혀 필요하지 않습니다. 한 번에 하나의지도 만있는 경우에도 나중에 변경 될 수 있으며 많은 변경이 필요할 수 있습니다. 싱글 톤은 꼭 필요한 경우를 제외하고는 피해야합니다. –

+0

확장 해 주셔서 감사합니다. 나는 이것이 최선의 선택은 아니라는 것을 이해하지만 Biene이 나중에 코드를 수정하는 것에 대해 걱정하지 않는다면 옵션이 될 것입니다. – Th3BFG

0

옵션이 3이라고 생각합니다. ParentClass에 대한 참조를 ChildClass에 전달할 수 있으며 모든 공개 속성에 직접 액세스 할 수 있습니다. 나는 당신이 ChildClass 또는 ParentClass에서 변화 할 것이기 때문에 변화가 생길 것이기 때문에 더 좋은 방법을 제안했습니다. 다른 모든 것은 layers이 그 변화를 상속받습니다.

+0

그 소리는 저에게 1처럼 들립니다. 그리고 나는 이것이 가져올 수있는 가능한 문제의 원인을 피하고 싶습니다. –

관련 문제