2009-03-23 2 views
5

나는 "헬퍼 (helper)"클래스를 확장하도록 설계된 public static inner class를 사용하여 여러 가지 장소에서 사용할 수 있다는 것을 알게되었다. 예를 들어, "SearchCriteria"클래스가 있다고 상상해보십시오. 검색하는 다른 것들 (검색 용어와 검색 용어 유형, 날짜 범위 등)에 대한 공통점이 많이 있습니다. 정적 인 내부 클래스에서이를 확장하면 확장 기능과 검색 가능한 기능을 긴밀하게 결합 할 수 있습니다 특정 차이점이있는 수업. 이 은 이론상 나쁜 생각 인처럼 보이지만 확장 기능은 검색 가능한 클래스 (One Class, One Purpose)에만 적용됩니다.정적 내부 클래스는 좋은 생각입니까 또는 불량한 디자인입니까?

귀하의 경험에 비추어 볼 때 귀하의 경험에 비추어 볼 때 정적 내부 클래스 (또는 귀하의 언어와 동등한 언어)를 사용하면 귀하의 코드가 읽기 쉽고 유지 보수가 용이합니까? 아니면 이것이 EOF에서 당신을 물게합니까?

또한 커뮤니티 위키 소재인지 여부는 확실하지 않습니다.

+0

사실인가요?정답이있을 수 있습니까? 그렇지 않다면 토론 주제입니다. 커뮤니티 위키로 더 잘 할 수 있습니다. –

+0

당신은 어떤 언어로 이야기하고 있습니까? MostOO 언어에는 정적 내부 클래스와 같은 개념이 없습니다. –

+0

S.Lott : 충분히 공정합니다. 커뮤니티 Wiki-ized. Neil Butterworth : 정적 인 내부와는 달리 중첩 된 클래스가 더 나은 선택일까요? 그리고 이것은 원래 Java입니다. – Drew

답변

2

저에게 매우 합리적인 소리입니다. 이 클래스를 내부 클래스로 지정하면 검색 가능한 클래스가 변경 될 때 쉽게 찾을 수 있고 검토 대상이됩니다.

꽉 끼는 커플 링은 실제로 서로 속하지 않는 것들을 결합 할 때만 사용됩니다. 그 중 하나가 다른 것을 호출하기 때문입니다. 밀접하게 협력하는 수업의 경우 당신의 경우와 마찬가지로, 그 중 하나가 다른 하나를 지원하기 위해 존재할 때, 그것은 "응집력"이라고 불리우며, 좋은 것입니다.

-2

"느슨한 결합"의 요점은 두 클래스를 분리하여 "SearchCriteria"클래스에 코드 변경 사항이 있으면 다른 클래스에서 변경하지 않아도되도록하는 것입니다. 나는 당신이 말하고있는 정적 내부 클래스가 잠재적으로 코드를 악몽으로 만들 수 있다고 생각한다. SearchCriteria를 한 번 변경하면 모든 정적 클래스를 검색하여 업데이트로 인해 현재 손상된 클래스를 파악할 수 있습니다. 개인적으로, 나는 어떤 이유로 든 정말로 필요하지 않다면 그러한 내부 수업에서 벗어날 것입니다.

+0

변경으로 인해 손상 될 수있는 최상위 수준의 하위 클래스를 검색하는 것보다 더 나쁜 점은 무엇입니까? 전혀. –

1

클래스는 재사용 단위가 아닙니다. 따라서 클래스 간의 커플 링은 정상이며 예상됩니다. 재사용 단위는 일반적으로 관련 클래스 모음입니다.

파이썬에는 다양한 구조가 있습니다.

  1. 패키지. 그들은 모듈을 포함하고 있습니다. 이것들은 근본적으로 약간의 파이썬 기계가 들어있는 디렉토리입니다.

  2. 모듈. 클래스 (및 함수)를 포함합니다. 이들은 파일입니다. 여러 밀접하게 관련된 클래스를 포함 할 수 있습니다. 종종 "내부 클래스"비즈니스는이 수준에서 처리됩니다.

  3. 클래스. 이것들은 내부 클래스 정의와 메소드 함수를 포함 할 수 있습니다. 때때로 (아주 자주는 아니지만) 내부 클래스가 실제로 사용될 수 있습니다. 클래스 간의 모듈 수준의 연결이 일반적으로 완벽하기 때문에 이는 드문 경우입니다.

1

내부 클래스를 사용하는 유일한주의 사항은 내부 클래스를 정의 할 때 언제 어디서나 해당 기능을 사용할 필요가 없다는 것입니다. 그 기능은 반드시 외부 클래스와 결합되어야합니다. 모든 정확히 같은 setOrderyByNameDesc() 메서드를 구현하는 내부 클래스의 전체 무리를 끝내고 싶지 않아요.

관련 문제