Frage

Was die Anzahl der Klassen, glaubst du, ist ideal pro namespace "branch"?An dem Punkt würde man sich entscheiden, zu brechen, einen namespace in mehrere Dateien?Lasst uns nicht diskutieren, die logische Gruppierung von Klassen (nehme an, Sie sind logisch gruppiert richtig), ich bin an diesem Punkt konzentriert sich auf die wartbar vs.nicht verwaltbar Anzahl der Klassen.

War es hilfreich?

Lösung

"42?Nein, es funktioniert nicht..."

Ok, lassen Sie uns setzen unsere Programmierung Fähigkeiten zu arbeiten und zu sehen, was Microsoft ' s Meinung:

# 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

Und das gibt uns die folgenden Statistiken über die Anzahl der Arten pro Namensraum:

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

Andere Tipps

Mit modernen IDEs und anderen dev-tools, ich würde sagen, dass, wenn alle Klassen gehören in einen namespace, dann ist es nicht beliebig viele, an denen Sie brechen sollten, bis ein namespace nur für Wartbarkeit.

Ich denke, dass ein namespace sollte so groß wie es sein muss.Wenn es einen logischen Grund dafür zu erstellen Geschwister-namespace oder Kind namespace, dann tun Sie das.Der Hauptgrund, so wie ich es sehe nach split in namespaces, ist die Entwicklung zu vereinfachen, macht es für Entwickler einfacher zu navigieren die namespace-Hierarchie zu finden, was Sie brauchen.

Wenn Sie einen namespace mit vielen Typen, und Sie denken, dass es schwierig zu finden, bestimmte, dann betrachten Sie Sie auf einem anderen Namensraum.Ich verwenden würde, ein Kind namespace, wenn die Typen sind spezialisiert übergeordneten namespace-Typen, und ein Geschwister-namespace, wenn die Typen, die verwendet werden können, ohne die original-namespace-Typen oder haben einen anderen Zweck.Natürlich, es hängt alles davon ab, was Sie erstellen und die Zielgruppe.

Wenn Sie einen namespace hat weniger als 20 Arten, es ist wahrscheinlich nicht Wert aufteilen.Allerdings sollten Sie namespace-Zuordnung während der Konstruktion, so dass Sie im Vorfeld wissen bei der Entwicklung, welche Arten gehen in die namespaces.Wenn Sie namespace-Zuordnung während der Entwicklung, erwarten Sie eine Menge refactoring-wie Sie bestimmen, was gehen sollte, wo.

Eine Sache, die nicht hier behandelt werden, obwohl es sich um Chris' Nummer in einer Weise, dass die learnabilty ein namespace ist nicht nur in Bezug auf die Anzahl der Elemente.

(Übrigens, dies gilt für "namespace" im weitesten Sinne - eine Klasse selbst ist ein Namensraum, in dem Allgemeinen Sinne, daß es bestimmte Namen, die bedeuten, dass eine andere Sache in diesem Zusammenhang als könnten Sie in einem anderen, ein enum ist ein namespace in diesem Sinne auch).

Lassen Sie uns sagen, ich der Begegnung mit einem XML-namespace mit einem Element Klasse.Ich Lerne ein wenig über dies und wenn ich mir die Attribut Klasse, ich sehe einige ähnlichkeit.Wenn ich dann ein ProcessingInstruction Klasse, kann ich machen eine vernünftige Vermutung darüber, wie es funktioniert (und es ist vermutlich ein design-Fehler, wenn ich denke, völlig falsch, bestenfalls Unterschiede müssen nicht nur dokumentiert werden, sondern erklärt).Ich kann mir vorstellen, dass es eine Kommentar Klasse, bevor ich selbst es sehen.Ich werde gehen, für Ihre Suche TextNode Klasse und Frage mich, ob diese Erben alle von Knoten anstatt über Sie zu erfahren aus der Dokumentation.Werde ich Frage mich, welche einige vernünftige Ansätze, die Sie nahm mit Ihren Lang Klasse anstatt sich zu Fragen, ob Sie da ist.

Denn es bezieht sich alles auf eine domain, die ich bereits Kenntnisse in der konzeptionellen "Kosten" von diesen sieben Klassen noch viel, viel weniger, als wenn die sieben Klassen, in denen genannt, Schafe, Fernsehen, FallOfSaigon, Enuii, AmandaPalmersSoloWork, ForArtsSakeQuotient und DueProcess.

Dies bezieht sich auf Chirs' Punkt, weil er sagt, dass wir darüber informiert sind aus Gründen der Benutzerfreundlichkeit um die Anzahl der Auswahlmöglichkeiten.Jedoch, wenn wir die Wahl haben, die Länder in alphabetischer Reihenfolge, werden wir sofort verstehen die ganze Liste und wählen Sie das müssen wir uns sofort, so dass die Beratung zu halten Auswahlmöglichkeiten funktioniert nicht (in der Tat, ein paar Optionen zu einer Zeit kann weniger nützlich und potenziell beleidigende).

Wenn Ihr namespace hat 200 Namen, aber Sie haben nur zu wirklich lernen Sie, ein halbes Dutzend zu verstehen die Menge, dann werden es viel einfacher zu verstehen, als ein Dutzend Namen, die mit wenig Bezug zu einander.

Ich weiß, Sie wollen nicht diskutieren, logische Gruppierung jedoch zu tun, eine Spaltung, die Sie brauchen, um in der Lage zu Gruppe zwei verschiedenen namespaces.Ich würde überlegen, einen neuen namespace an rund 30 Klassen;aber ich würde es nicht als ein großes Anliegen.

Ich muss sagen, ich finde, alle der oben sehr überraschend zu Lesen.

Usability-Experten sagen uns, um die Anzahl der Auswahlmöglichkeiten in einem Menü für eine begrenzte Anzahl, so wir können sofort sehen, alle Möglichkeiten.Das gleiche gilt für Sie, wie Sie organisieren Ihre Arbeit.

Ich würde erwarten in der Regel 4-10 Typen in einem namespace.Spart so viel Jagd-Runde für Sachen und scrollen nach oben und unten.Es ist so schnell und einfach zu bewegen Zeug um mit resharper, dass ich sehe keinen Grund, warum nicht.

Eine andere Sache, die sollte erwähnt ist, dass es oft zahlt, um eine Klasse, die Erweiterung Methoden in einem eigenen Namensraum, so dass Sie können aktivieren oder deaktivieren Sie diese Erweiterung Methoden mit ein using Richtlinie.Also, wenn das Ding in der namespace ist eine statische Klasse, die Erweiterung Methoden, die Antwort ist 1.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top