2008-12-01 12 views
13

In C# sind die Fragen, welche Typen erstellt werden sollen, welche Member sie haben sollten und welche Namespaces sie enthalten sollten, Fragen des OO-Designs. Das sind nicht die Fragen, die mich interessieren.Wie organisieren Sie C# -Code in Dateien?

Stattdessen möchte ich fragen, wie Sie diese in Diskartefakten speichern. Hier sind einige Beispielregeln:

  • Legen Sie alle Assembly Typen in einer einzigen Quelldatei. Ein Freund, der das gemacht hat, sagte: "Dateien sind ein Werkzeug zur Organisation von Archiacs. Heute benutze ich classview und Collapse to Definitions, um meinen Code zu durchsuchen."

  • Geben Sie Ihren gesamten Code in eine Baugruppe ein. Erleichtert die Bereitstellung der Version &.

  • Die Verzeichnisstruktur spiegelt die Namespacestruktur wider.

  • Jeder Namespace erhält eine eigene Assembly.

  • Jeder Typ geht in seine eigene Baugruppe. (Als extremes Beispiel aufgeführt.)

  • Jeder Typ erhält seine eigene Quelldatei.

  • Jedes Mitglied erhält seine eigene Datei; Jeder Typ erhält ein eigenes Verzeichnis. (Gelistet als ein extremes Beispiel.)

Antwort

16

Was immer Sie tun, nur BITTE es konsequent tun. Ich glaube nicht, dass es eine einzige Antwort gibt (obwohl es ein paar falsche gibt). Aber stellen Sie sicher, dass Sie Ihrer Form treu bleiben, denn dies wird der Schlüssel für Ihre Nachfolger sein, Dinge leicht zu finden.

+0

Versuchen Sie zu sagen, wir sollten konsistent sein? Ich war mir nicht sicher. * grins * Gute Antwort, übrigens. –

5

Derzeit tun I:

  • Eine Baugruppe für Produktionscode + Unit-Tests
  • Verzeichnisstruktur ahmt Namespaces
  • eine Art pro Datei
    • verschachtelte Typen erhalten ihre eigene Datei mit den Typen partial. Das heißt:
 
// ------ C.cs 

public partial class C : IFoo 
{ 
    // ... 
} 

// ------ C.Nested.cs 
partial class C 
{ 
    public class Nested 
    { 
     // ... 
    } 
} 
3

Ich mache es ziemlich ähnlich. Ein Punkt, an dem ich unterscheiden:

  • eine Art pro Datei

Ich erkläre Delegattypen wo ich sie brauche, das heißt nicht in einer eigenen Datei, sondern in der Klasse, die sie verwendet.

1

Für kleine Projekte mit weniger als einem Dutzend Klassen, nur eine Klasse pro Datei.

Für Enterprise-Projekte habe ich mehrere Projekte in einer Lösung.Sie sind nach Zweck gruppiert (Business-Klassen, Schnittstellen, UI). Jede Klasse hat ihre eigene Datei.

0

Ich bevorzuge die herkömmliche Ein-Datei-pro-öffentliche Klasse, mit Ordnern innerhalb des Projekts (die Unterverzeichnissen zugeordnet) verwendet, um konzeptionell verwandte Klassen nach Bedarf zu gruppieren, um die Solution Explorer-Ansicht verwaltbar zu halten. Wenn Ihre Klassennamen gut gewählt sind, sollten die Ordner nicht unbedingt notwendig sein, aber sie sind hilfreich, wenn das Projekt viele Klassen hat.

Die Verwendung separater Dateien für verschachtelte Typen erscheint als Overkill, zumindest wenn es sich bei den verschachtelten Klassen um relativ einfache "Helfer" -Klassen handelt, insbesondere wenn sie privat sind.

Der wichtigste praktische Einwand gegen das Schema "Alles in einer großen Datei" Ihres Freundes ist, dass Visual Studio dazu neigt, sehr, sehr langsam zu werden, wenn es versucht, mit sehr langen Code-Dateien umzugehen.

0

Ich bevorzuge diese Art von Organisation in welcher Sprache auch immer.

Verwandte kleine Klassen in ihren eigenen Datei (en).

Große Klassen in ihrer eigenen Datei.

Verzeichnisse für separate Teilprojekte.

3

Ich erstelle eine Baugruppe pro Architekturschicht. (WinUI.exe, BusinessWorkflow.dll, BusinessComponent.dll usw.

Dann wird eine physische Datei pro Klasse.

So ist das "vertikale".

Namensräume, konzeptionell, gehen horizontal, Domänen-Ebene Gruppierung Zusammenfassend gesagt: Aufträge gehen in "Accounting.AccountsPayable" zum Beispiel.

Da jede Assembly nur die darunterliegende Architektur referenziert, ist Ihre IntelliSense sehr eingeschränkt durch relevante Referenzen innerhalb Ihres Domain-Modells.

(Ich stimme dem überein - Konsistenz ist wichtig.

1

Egal wie klein ein Typ ist, jede Art in eine separate Datei setzen - Ausnahme: verschachtelte Klassen und Delegierten

By the way, eine partielle Klasse mit für den alleinigen Zweck zu trennen, um eine verschachtelte Art der Platzierung in eine eigene Datei scheint wie ein Overkill. Partielle Klassen sollten vernünftig und in der Regel für Tools zur Dateigenerierung verwendet werden - Sie müssen überlegen, wie Sie Ihre partiellen Klassen für verschachtelte Klassen "benennen". Einen intuitiven Namen für eine physische verschachtelte Datei zu finden, kann sehr mühsam sein und es ist definitiv keine einfache Aufgabe.

Bei Projekten benennen Sie Ihre Projekte so, dass sie Namespaces widerspiegeln - Ausnahme: Wenn ein verschachtelter Namespace groß wird, würde ich einen verschachtelten Ordner in ein anderes Projekt migrieren.

Verwandte Themen