Frage

Ok, also habe ich versucht, alle in einem gewissen Stammordner einen meiner Klassen zu setzen, entweder:

UI
Businesslogic
Data Access
Business
Schnittstellen

ich habe ein paar mehr, wo ich kann nicht scheinen sehr gut Eimer, so dass ich für Anregungen bin auf der Suche

  1. Eine Cache-Klasse, die über ein eigenes Wörterbuch hält und erlaubt es, verschiedenen Zugriff auf Objekte auf einigen spezifischen Tasten auf Basis

  2. Ereignis Arg Klassen?

Auch im Rahmen eines Projekts beginnen i jetzt Subsystemen zu haben, die alle 3 haben (Datenzugriff, Business Objects, busiensslogic). Wie soll ich die Ordnerstruktur zerbrechen?

A.

ProjectX
--Subsystem1
---- Business
---- Data Access
---- Business
--Subsystem2
---- Business
---- Data Access
---- Business

oder

ProjectX
--BusienssLogic
---- Subsystem1BL
---- Subsystem2BL
--DataAccess
---- Subsystem1DA
---- Subsystem2DA
--BusinessObjects
---- Subsystem1BO
---- Subsystem2BO

oder

ProjectX
--BusinessLogic
--DataAccess
--BusinessObjects
(Ohne Unterverzeichnisse für jedes Funktions Subsystem)

War es hilfreich?

Lösung

Ich versuche, meine Montage Namen mit ihren Namensräumen auszurichten, und verwenden Sie das .NET Framework selbst als Richtlinie. Ich glaube fest daran, dass mit einer Namespace-Struktur arbeiten, die eine Ordnerstruktur antreibt, für eine viel wartbar Code-Basis macht.

Zum Beispiel habe ich einen Caching-Provider, den Teil des globalen Entwickler-Framework ist, die wir verwenden. Er lebt in einem Namensraum von etwas ähnliches wie:

[Firma] .Core.Data.Caching

Ich habe andere Datenfunktionalität bezogen, die auch logisch unterhalb des Daten Funktion fällt, so Caching hat Geschwister wie Adapter, Wandler und Generatoren. Also, nehmen wir an, wir haben die folgenden Namensräume:

[Firma] .Core.Data.Adapters
[Unternehmen] .Core.Data.Converters
[Unternehmen] .Core.Data.Caching
[Unternehmen] .Core.Data.Generators

Diese verwandten Namensräumen leben in einer Baugruppe namens [Firma] .Core.Data, die auch der Projektname ist. Dinge in der Lösung zu finden, wird sehr einfach diese Struktur folgen. Apropos Struktur, jetzt bekommen wir zurück, wie sie auf der Festplatte gespeichert werden.

Der Projektname ist der Stammordner Namen. Dies setzt voraus, meinen Source-Control-Ordner, die "C: \ Source Control" auf meinem lokalen Rechner:

C: \ Source Control \ Core [Unternehmen] .Core.Data \
C: \ Source Control \ Core [Unternehmen] .Core.Data \ Adapters
C: \ Source Control \ Core [Unternehmen] .Core.Data \ Caching
C: \ Source Control \ Core [Unternehmen] .Core.Data \ Converters | C: \ Source Control \ Core [Unternehmen] .Core.Data \ Generatoren

So, als eine Hierarchie, sieht es so etwas wie:

[Lösung]
- [Unternehmen] .Core.Data
---- [Adapter]
------ (Adapter-Dateien)
---- [Caching]
------ (Caching-Dateien)
---- [Converters]
------ (Konverter-Dateien)

habe ich alle Projekte auf dem gleichen Niveau, und variieren Teilnamespaces mit Ordnern. Auf diese Weise der Namensräume und die physikalischen Strukturen sind leicht miteinander zu vereinbaren. Der schwierige Teil ist das Auffinden Balance. Sie wollen nicht eine große Anzahl von kleineren Baugruppen haben, so dass ich normalerweise Gruppe sie auf einer höheren Ebene, und es schließlich Refactoring, wenn sie entweder zu groß zu wachsen tendiert, oder wenn Teilnamespaces häufiger als andere Teile ändern .

Ich habe das jetzt schon seit Jahren tun, und es ist sehr bequem nicht nur für mich, sondern für meine Entwickler zu verwenden.

Wie für Ihre EventArgs Frage stimme ich mit dem Konsens, dass ich normalerweise pro Datei eine Klasse zu tun, sondern die Ausnahme mache eine EventArgs-Klasse mit einer anderen Klasse zu setzen, wenn es singuläre Nutzung ist. Für Multiuse, lege ich sie auf dem höchsten logischen Punkt in der Versammlung, die Namespace-Struktur ermöglicht meine Scoping zu binden.

Andere Tipps

Ich mag in der Regel auf die Klasse 1, 1 Datei Regel bleiben, aber wenn es um EventArgs kommt, Ich mag sie wirklich in der gleichen Datei zu erklären, dass ich den Delegierten oder Ereignis zu definieren. Es sei denn, die args von mehr als einer Klassenhierarchie verwendet, die nicht oft mit mir geschehen neigt.

Wie für den Cache, würde ich in den Ordner der Klassen stellen, in der sie unterstützt.

So viel wie ich gute Organisation möchte, kann man auch anal mit ihm.

Dies ist vor allem persönlicher Geschmack.

Ich bin damit einverstanden mit dem, was Brian Genisio sagte über, wo EventArg Klassen etc .: wenn Sie setzen nur verwenden sie einmal, setzen Sie sie in der gleichen Datei, in der Sie sie verwenden. Für allgemeine Klassen / Dateien, habe ich immer eine ‚Allgemein‘ Ordner (wie bequem; -))

In Bezug auf die Ordnerstruktur: Ich würde gehen mit dem zweiten, dass man 3-Tier und hält die Subsysteme getrennt. Win-Win!

Ich will nur einen Kommentar zu Namen hinzuzufügen. Ich fühle das Wort-Geschäft zu Missbrauch führt. Wir taten dies, und jetzt wissen wir nicht, was es geht um: Domain-Logik oder Dienstschicht. Ich würde vorschlagen, Namen wie Domain. Domain.Impl (to separate Schnittstellen von Impl) und dann auf Dienste ... und vielleicht Persistenz, wenn Sie ORM verwenden ... kann es anders sein, wenn Ihre anderen Ansatz, aber um ehrlich zu sein, ich bin verwirrt über Namen Businesslogic, Data Access und Business. Ich verstehe nicht, was was ist. Business sollten Business-Logik, logisch enthalten? Oder sind sie nur DTOs? Warum sind sie dann in einem separaten Projekt von Data Access?

Es gibt nicht nur einen richtigen Weg, dies zu tun.

Herunterladen einige Open-Source-Projekte mit ähnlichen Technologien zu einem Projekt und nehmen Sie Ihre Ideen von ihnen.

Leider verpasste ich den C #-Tag. Beispiele für gute .NET Projekte wurden vor bedeckt hier und here .

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