클래스가 다른 클래스에서만 인스턴스화되므로 해당 클래스에 중첩 된 클래스를 사용하는 것이 적절하다고 생각합니다.이 방법은 좋은 디자인을 얻는 데 도움이 될 것이라고 생각합니다. 프로젝트를 볼 때 이러한 중첩을 거의 보지 못했습니다. 그러나 이번에는 중첩 된 클래스를 시도해 볼 때 다른 질문이 내 마음에 나타납니다. 예를 들어,중첩 클래스는 어디서 어떻게 사용합니까?
나는 Board 클래스를 가지고 있으며, Pawn, Queen, Rook 같은 ShortCastle, LongCastle, EnPassant, Knight 등등. 그래서 그것은 명백합니다. Board 클래스는 Piece 클래스를 인스턴스화하고 Piece 클래스는 Move 클래스를 인스턴스화합니다. 좋은 디자인을 위해서, 전당포가 자신을 승진시킬 수 있기 때문에 승진 클래스를 Pawn에 중첩시켜야합니다. 짧고 긴 성은 왕만이 중첩되어야하며, 오직 왕만이 그러한 유형의 이동을 할 수 있기 때문에.
모든 조각 클래스를 보드 클래스에 넣으려고하면 좋은 디자인이 보이지 않습니다. 8-9 클래스가 보드 클래스 안에 있고 보드 클래스 파일이 너무 커서 보드가 너무 크고 읽을 수 없기 때문입니다. 다른 파일에서 조각 클래스. 우리가 부분적으로 Board 클래스를 만들 수 있지만 여전히 성가신 것은 아닙니다. 8-9 Partial Board 클래스 파일은 각 클래스를 보유 할 것입니까? 그들을 중첩시키지 않는 것이 낫습니까? 동일한 피스 (Piece)에 대해서 다른 Move 피스 (Move) 유형 클래스 용으로 다른 부분 피스 파일을 만듭니 까? 중첩 클래스가 작은 공간을 차지하면 아무런 문제가 없지만 많은 메소드가 필요한 경우?
이 디자인으로 실수 가능성을 제한합니다. 다른 조각들 중 아무도 그런 움직임을 만들지 못합니다. 잘못 설계된 것입니다.이 디자인으로는 해결할 수 없습니다. 내가 잘못 했습니까? – Freshblood
깊이 중첩 클래스는 범위를 제한합니다 (특정 시나리오에서 유용한 아키텍처 제약이 될 수 있음). 그러나 프로젝트 초기에 많은 복잡성을 겪고 있습니다. "작동 할 수있는 가장 단순한 작업"을 수행하고 필요할 때보다 복잡한 디자인으로 리팩터링하는 것이 좋습니다. 나중에 특정 클래스를 인스턴스화 할 수있는 곳을 제약하려면 "클래스 라이브러리"프로젝트를 만들어 솔루션을 여러 어셈블리로 분리 할 수 있습니다. 행운을 빈다. =) –