質問

「ブランチ」という名前空間ごとに理想的なクラスの数は何だと思いますか?どの時点で、1つの名前空間を複数の名前空間に分割することになりますか?クラスの論理的なグループ化については説明しません(クラスが論理的に適切にグループ化されていると仮定)

役に立ちましたか?

解決

" 42?いいえ、動作しません..."

OK、プログラミングの腕前を発揮して、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や他の開発ツールでは、すべてのクラスが名前空間に属している場合、メンテナンスのためだけに名前空間を分割する必要のある任意の数はありません。

名前空間は必要なだけ大きくする必要があると思います。兄弟ネームスペースまたは子ネームスペースを作成する論理的な理由がある場合は、作成します。私が名前空間に分割する主な理由は、開発を容易にし、開発者が名前空間階層をナビゲートして必要なものを見つけやすくすることです。

多数のタイプを持つ1つのネームスペースがあり、特定のタイプを見つけるのが難しいと感じる場合は、それらを別のネームスペースに移動することを検討してください。型が親の名前空間型を特化している場合は子の名前空間を使用し、元の名前空間型なしで型を使用できるか、別の目的がある場合は兄弟の名前空間を使用します。もちろん、それはすべてあなたが作成しているものとターゲットオーディエンスに依存します。

名前空間のタイプが20未満の場合、分割する価値はほとんどありません。ただし、設計時にネームスペースの割り当てを検討して、開発時に事前に、どのタイプがどのネームスペースに含まれているかを把握する必要があります。開発中に名前空間の割り当てを行う場合、どこに行くべきかを決定する際に多くのリファクタリングを期待してください。

ここで取り上げていないことの1つは、ある意味でChrisのポイントに関連していますが、名前空間の学習可能性はアイテムの数だけに関連しているわけではないということです。

(ちなみに、これは最も広い意味で「名前空間」に適用されます-クラス自体は一般的な意味での名前空間であり、そのコンテキストには別のコンテキストとは異なるもの、enumこの意味でも名前空間です)。

Element クラスを持つXML関連の名前空間に遭遇したとしましょう。これについて少し学び、 Attribute クラスを見ると、いくつかの類似点があります。その後、 ProcessingInstruction クラスを見ると、それがどのように機能するかについて合理的な推測を行うことができます(完全に間違っていると推測される場合、おそらく設計上の欠陥です。 )。見る前に Comment クラスがあると推測できます。 TextNode クラスを探して、これらすべてをドキュメントから学習するのではなく、 Node から継承するのではないかと考えます。 Lang クラスを使用していくつかの合理的なアプローチを選択したのではなく、それがあるかどうかを疑問に思います。

これらはすべて私がすでに知っているドメインに関連しているため、概念的な「コスト」これらの7つのクラスの多くは、テレビ FallOfSaigon Enuii AmandaPalmersSoloWork ForArtsSakeQuotient および DueProcess

これは、Chirsのポイントに関連しています。彼は、選択肢の数を抑えるために、使いやすさのためにアドバイスされていると言っているからです。ただし、アルファベット順に国の選択肢がある場合は、リスト全体をすぐに調べて必要なものをすぐに選択するため、選択肢を抑えるためのアドバイスは適用されません(実際、一度にいくつかのオプションが両方になる可能性があります有用性が低く、potentially辱される可能性があります)。

名前空間に200の名前があるが、多くを理解するために本当に学ぶ必要があるのが半ダースの場合は、ほとんど関係のないダースの名前を持っているよりもはるかに簡単ですお互い。

論理的なグループ化については説明したくないが、分割を行うには、2つの異なる名前空間をグループ化できる必要があります。私は約30クラスの新しい名前空間を検討し始めました。しかし、私はそれを大きな関心事とは思わないでしょう。

上記の非常に驚くべき読み物をすべて見つけたと言わなければなりません。

ユーザビリティの専門家は、メニューの選択肢の数を限られた数に抑えて、すぐにすべての選択肢を表示できるようにするように言っています。同じことは、仕事の整理方法にも当てはまります。

通常、名前空間には4〜10種類が必要です。ものを探したり、上下にスクロールしたりするためのハンティングラウンドを大幅に節約します。 resharperを使用してアイテムを移動するのは非常に迅速かつ簡単であるため、そうしない理由はわかりません。

言及すべきもう1つのことは、拡張メソッドを含むクラスを独自の名前空間に配置すると、多くの場合、 using ディレクティブを使用してこれらの拡張メソッドを有効または無効にできることです。したがって、名前空間内のものが拡張メソッドを含む静的クラスである場合、答えは1です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top