문제

하나의 네임 스페이스 "브랜치"에 따라 어떤 수업이 이상적이라고 생각하십니까? 어느 시점에서 하나의 네임 스페이스를 여러 가지 네임 스페이스로 나누기로 결정했을까요? 클래스의 논리적 그룹 그룹화에 대해 논의하지 말고 (논리적으로 올바르게 그룹화되었다고 가정),이 시점에서 유지 보수 및 유지 보수 수의 클래스에 중점을두고 있습니다.

도움이 되었습니까?

해결책

"42? 아니요, 작동하지 않습니다 ..."

좋아, 우리의 프로그래밍 능력을 작동시키고 Microsoft의 의견이 무엇인지 보자.

# IronPython
import System
exported_types = [
  (t.Namespace, t.Name)
  for t in System.Int32().GetType().Assembly.GetExportedTypes()]

import itertools
get_ns = lambda (ns, typename): ns
sorted_exported_types = sorted(exported_types, key=get_ns)
counts_per_ns = dict(
  (ns, len(list(typenames)))
  for ns, typenames
  in itertools.groupby(sorted_exported_types, get_ns))
counts = sorted(counts_per_ns.values())

print 'Min:', counts[0]
print 'Max:', counts[-1]
print 'Avg:', sum(counts) / len(counts)
print 'Med:',
if len(counts) % 2:
  print counts[len(counts) / 2]
else: # ignoring len == 1 case
  print (counts[len(counts) / 2 - 1] + counts[len(counts) / 2]) / 2

그리고 이것은 네임 스페이스 당 유형 수에 대한 다음 통계를 제공합니다.

C:\tools\nspop>ipy nspop.py
Min: 1
Max: 173
Avg: 27
Med: 15

다른 팁

최신 IDE 및 기타 개발 도구를 사용하면 모든 클래스가 네임 스페이스에 속한 경우 유지 관리 가능성만으로 네임 스페이스를 분해 해야하는 임의의 번호가 없다고 말합니다.

네임 스페이스는 필요한만큼 커야한다고 생각합니다. 형제 네임 스페이스 또는 자식 네임 스페이스를 만들어야 할 논리적 인 이유가 있다면 그렇게하십시오. 네임 스페이스로 분할되는 주된 이유는 개발을 용이하게하여 개발자가 네임 스페이스 계층 구조를 쉽게 탐색하여 필요한 것을 찾을 수 있기 때문입니다.

많은 유형의 네임 스페이스가 있고 특정 네임 스페이스를 찾기가 어렵다고 생각한다면 다른 네임 스페이스로 이동하는 것이 좋습니다. 유형이 부모 네임 스페이스 유형을 전문으로하는 경우 자식 네임 스페이스를 사용하고 원래 네임 스페이스 유형없이 유형을 사용할 수 있거나 다른 목적을 가진 경우 형제 네임 스페이스를 사용합니다. 물론, 그것은 모두 당신이 창조하는 것과 대상 고객에 달려 있습니다.

네임 스페이스에 20 유형 미만의 유형이 있으면 분할 할 가치가 없습니다. 그러나 디자인 중에 네임 스페이스 할당을 고려하여 개발할 때 어떤 유형이 어떤 유형의 네임 스페이스에 있는지 알 수 있도록해야합니다. 개발 중에 네임 스페이스 할당을 수행하는 경우 어디로 가야하는지 결정할 때 많은 리팩토링을 기대하십시오.

여기서 다루지 않은 한 가지는 Chris의 요점과 관련이 있지만 네임 스페이스의 Learnabilty는 항목 수와 관련이 없다는 것입니다.

(우연히, 이것은 가장 넓은 의미에서 "네임 스페이스"에 적용됩니다. 클래스 자체는 일반적인 의미의 네임 스페이스입니다. 다른 이름은 다른 이름에서 다른 이름을 포함하는 특정 이름을 포함한다는 점에서 열거는 네임 스페이스입니다. 이 의미도).

XML 관련 네임 스페이스를 요소 수업. 나는 이것에 대해 조금 배우고 내가 볼 때 기인하다 수업, 나는 약간의 유사성을 본다. 내가 볼 때 a ProcessingIntruction 클래스, 나는 그것이 어떻게 작동하는지에 대해 합리적으로 추측 할 수 있습니다 (그리고 완전히 잘못 생각하면 설계 결함 일 것입니다. 최상의 차이점은 문서화되어야하는 것이 아니라 설명해야합니다). 나는 거기에 있다고 추측 할 수있다 논평 내가보기 전에 수업. 나는 당신을 찾고 갈 것입니다 텍스트 노드 수업과 이들 모두가 상속되는지 궁금해합니다 마디 문서에서 그들에 대해 배우지 않고. 당신이 당신과 함께 몇 가지 합리적인 접근법을 궁금해 할 것입니다. 수업이 거기에 있는지 궁금해하기보다는 수업입니다.

모든 것이 내가 이미 알고있는 도메인과 관련이 있기 때문에,이 7 개의 클래스의 개념적 "비용"은 7 개의 클래스가 호출되는 경우보다 훨씬 적습니다. , 텔레비전, Fallofsaigon, enuii, Amandapalmerssolowork, forartssakequotient 그리고 적법 절차.

그는 Chirs의 요점과 관련이 있습니다. 왜냐하면 그는 우리가 선택의 수를 줄일 수있는 유용성을 위해 조언을 받았기 때문입니다. 그러나 알파벳 순서로 국가를 선택할 수있는 국가가 있다면 즉시 전체 목록을 움켜 쥐고 즉시 필요한 것을 선택하므로 선택을 유지하기위한 조언은 적용되지 않습니다 (실제로 한 번에 몇 가지 옵션은 둘 다일 수 있습니다. 덜 유용하고 잠재적으로 모욕적입니다).

네임 스페이스에 200 개의 이름이 있지만 진짜 로트를 이해하기 위해 수십 가지를 배우면 서로 관련이 거의없는 12 개의 이름을 갖는 것보다 맥주하는 것이 훨씬 쉽습니다.

나는 당신이 논리적 그룹화에 대해 논의하고 싶지 않다는 것을 알고 있지만 분할을하려면 두 개의 다른 네임 스페이스를 그룹화 할 수 있어야합니다. 약 30 개의 수업에서 새 네임 스페이스를 고려하기 시작했습니다. 그러나 나는 그것을 큰 관심사라고 생각하지 않을 것입니다.

나는 위의 모든 놀라운 독서를 찾았다 고 말해야합니다.

유용성 전문가들은 메뉴의 선택 수를 제한된 숫자로 유지하여 모든 선택을 즉시 볼 수 있다고 말합니다. 작업을 조직하는 방법에도 동일하게 적용됩니다.

나는 일반적으로 네임 스페이스에서 4-10 유형을 기대합니다. 물건을 위해 많은 사냥을하고 위아래로 스크롤합니다. Resharper를 사용하여 물건을 이동하는 것은 너무 빠르고 쉽게 움직이지 않아서 아무런 이유가 없습니다.

언급해야 할 또 다른 것은 종종 자체 네임 스페이스에 확장 메소드를 포함하는 클래스를 배치하여 이러한 확장 메소드를 using 지령. 따라서 네임 스페이스의 물건이 확장 메소드를 포함하는 정적 클래스 인 경우 답은 1입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top