Haben Sie einen bestimmten Stil bei der Organisation von Projekten?
Zum Beispiel erstelle ich gerade ein Projekt für ein paar Schulen hier in Bolivien. So habe ich es organisiert:
TutoMentor (Solution)
TutoMentor.UI (Winforms project)
TutoMentor.Data (Class library project)
Wie genau organisieren Sie Ihr Projekt? Haben Sie ein Beispiel für etwas, das Sie organisiert haben und auf das Sie stolz sind? Können Sie einen Screenshot des Lösungsbereichs freigeben?
Im UI-Bereich meiner Anwendung habe ich Probleme, ein gutes Schema zu finden, um verschiedene Formulare zu organisieren und wo sie hingehören.
Bearbeiten:
Was ist mit dem Organisieren verschiedener Formulare im .UI-Projekt? Wo / wie soll ich eine andere Form gruppieren? Es ist eine schlechte Idee, sie alle in der Stammebene des Projekts zu platzieren.
Antworten:
Wenn ich ein Projekt entwerfe und die Architektur entwerfe, gehe ich von zwei Richtungen aus. Zuerst schaue ich mir das Projekt an und bestimme, welche Geschäftsprobleme gelöst werden müssen. Ich schaue auf die Leute, die es benutzen werden und beginne mit einem groben UI-Design. An diesem Punkt ignoriere ich die Daten und schaue nur, was die Benutzer verlangen und wer sie verwenden wird.
Sobald ich ein grundlegendes Verständnis dafür habe, wonach sie fragen, stelle ich fest, welche Kerndaten sie bearbeiten, und beginne mit einem grundlegenden Datenbanklayout für diese Daten. Dann beginne ich, Fragen zu stellen, um die Geschäftsregeln zu definieren, die die Daten umgeben.
Wenn ich von beiden Seiten unabhängig voneinander beginne, kann ich ein Projekt so auslegen, dass beide Seiten miteinander verschmelzen. Ich versuche immer, die Entwürfe so lange wie möglich getrennt zu halten, bevor ich sie zusammenführe, aber denke dabei an die Anforderungen der einzelnen Entwürfe.
Sobald ich ein solides Verständnis für jedes Ende des Problems habe, beginne ich mit der Gliederung des Projekts, das erstellt wird, um das Problem zu lösen.
Sobald das Grundlayout der Projektlösung erstellt ist, überprüfe ich die Funktionalität des Projekts und richte einen Basissatz von Namespaces ein, die je nach Art der ausgeführten Arbeit verwendet werden. Dies können Dinge wie Konto, Einkaufswagen, Umfragen usw. sein.
Hier ist das grundlegende Lösungslayout, mit dem ich immer beginne. Wenn die Projekte genauer definiert werden, verfeinere ich sie, um den spezifischen Anforderungen jedes Projekts gerecht zu werden. Einige Bereiche können mit anderen zusammengeführt werden, und ich kann bei Bedarf einige spezielle Bereiche hinzufügen.
Lösungsname
quelle
Ich teile meine Projekte gerne in Ebenen ein
Auf diese Weise ist es einfacher, zyklische Abhängigkeiten zu verwalten. Ich kann beispielsweise garantieren, dass kein Projekt versehentlich das View-Projekt (Layer) importiert. Ich neige auch dazu, meine Schichten in Unterschichten aufzubrechen. So haben alle meine Lösungen eine Liste von Projekten wie folgt:
Sie sind die größeren "Bausteine" meiner Anwendung. Dann organisiere ich in jedem Projekt logischer in Namespaces, aber es variiert sehr. Für die Benutzeroberfläche versuche ich beim Erstellen vieler Formulare, in räumlichen Abschnitten zu denken und dann Namespaces für jeden "Raum" zu erstellen. Nehmen wir an, es gibt eine Reihe von Benutzersteuerelementen und Formularen für die Benutzereinstellungen, für die ich einen Namespace namens UserPreferences habe und so weiter.
quelle
Core
für ziemlich gefährlich, weil es zu einem monolithischen Code-Design führt, bei dem die meisten logischen Abläufe möglicherweise nicht ausgeführt werdenCore
. Beispiel: Eine Logik, die nicht wie ein Modell, ein Präsentator, eine Persistenz, eine Benutzeroberfläche, eine Validierung, ein Bericht oder ein Web klingt, wird auf natürliche Weise verwendetCore
.Core
Projekt entweder in einen monolithischen Müll verwandeln oder eine Lösung mit Hunderten von Projekten vermeiden . Es liegt in der Verantwortung des Entwicklers, diese Entscheidung zu treffen. Keine Projektstruktur kann schlechte Programmierer davor bewahren, schlechte Dinge zu tun.Projekte organisieren
Normalerweise versuche ich, meine Projekte nach Namespace zu unterteilen, wie Sie sagen. Jede Schicht einer Anwendung oder Komponente ist ein eigenes Projekt. Wenn es darum geht, wie ich meine Lösung in Projekte aufteilen möchte , konzentriere ich mich auf die Wiederverwendbarkeit und die Abhängigkeiten dieser Projekte. Ich denke darüber nach, wie andere Mitglieder meines Teams das Projekt nutzen werden, und ob andere Projekte, die wir später erstellen, von der Verwendung einer Komponente des Systems profitieren könnten.
Zum Beispiel ist es manchmal ausreichend, nur dieses Projekt zu haben, das eine ganze Reihe von Frameworks (E-Mail, Protokollierung usw.) enthält:
In anderen Fällen möchte ich möglicherweise Frameworks in Teile aufteilen, damit sie einzeln importiert werden können:
Formulare organisieren
Das Organisieren von Formularen unter einem UI-Projekt ändert sich wirklich, wenn Ihr Projekt erweitert wird.
Klein - Ein einfacher Formularordner kann für ein sehr kleines Projekt ausreichen. Manchmal können Sie Strukturen wie Namespaces überentwickeln und die Dinge komplizierter machen, als sie sein müssen.
Mittel bis groß - Hier beginne ich normalerweise, meine Formulare in Funktionsbereiche zu unterteilen. Wenn ich einen Teil meiner App habe, der 3 Formulare zum Verwalten eines Benutzers enthält, und einige, die Fußballspiele und -ergebnisse verfolgen, dann habe ich einen Bereich Formulare> Benutzer und einen Bereich Formulare> Spiele oder ähnliches. Es hängt wirklich vom Rest des Projekts ab, wie viele Formen ich habe, um zu bestimmen, wie feinkörnig ich es aufteile.
Denken Sie daran, dass am Ende des Tages Namespaces und Ordner zur Verfügung stehen, die Ihnen helfen, die Dinge schneller zu organisieren und zu finden.
Es hängt wirklich von Ihrem Team, Ihren Projekten und dem ab, was für Sie einfacher ist. Ich würde vorschlagen, dass Sie im Allgemeinen separate Projekte für jede Schicht / Komponente Ihres Systems erstellen, aber es gibt immer Ausnahmen.
Anleitungen zur Systemarchitektur finden Sie auf der Website "Patterns and Practices" von Microsoft.
quelle
Wenn ich Code in .NET schreibe, besteht eine eindeutige Tendenz zu Clustern verwandter Funktionen. Jeder von ihnen kann einige Untergruppen desselben haben. Ich mag es, die Hauptgruppen physisch aufzuteilen - eine davon pro VS-Projekt. Ich unterteile dann weiter logisch mit Hilfe von Baugruppen. Nach diesem Muster sieht eines meiner aktuellen Projekte so aus:
Hoffentlich ist das nützlich für Sie. Das Ausmaß der Trennung hat mich einige Zeit gekostet, um es herauszufinden.
quelle
Es ist gut, einen Plan für die Organisation Ihrer Lösungen zu haben, und es gibt verschiedene Möglichkeiten, dies zu tun. Wir verfügen über einige Funktionen, die für mehrere Projekte gemeinsam genutzt werden, wodurch auch die Konsistenz für unsere Benutzer gewährleistet wird. Die Projektorganisation hängt davon ab, was wir tun. Im Kern werden wir haben:
Von dort hängt es wirklich vom Setup ab. Wenn wir sowohl eine Client-Anwendung als auch ein Web-Front-End haben (nützlich zum Sammeln von Nutzungsergebnissen im Klassenzimmer oder für andere Forschungszwecke), benötigen wir ein Projekt mit dem gemeinsam genutzten Code (dh den Datenobjekten, die serialisiert werden).
Bei Bedarf können weitere Teilprojekte hinzugefügt werden. Wie gesagt, es kommt wirklich auf das Projekt an. Einige Projekte sind sehr einfach und benötigen nur Kernelemente. Wir versuchen, eine willkürliche Projekttrennung zu bekämpfen, daher ist eine Unterteilung nach Ebenen wirklich sinnvoll. Die Ebenen werden dadurch definiert, was für Projekte, Lösungen oder Plugins / Erweiterungen gemeinsam genutzt werden muss.
quelle
Es ist interessant, dass so viele Leute hier nicht an TROCKEN denken. Es ist ein paar Mal in meinem Leben vorgekommen, dass Entwickler Verzeichnisstrukturen erstellt haben, die aus diesem Grund nicht erstellt werden konnten. Halten Sie den Projektnamen von Lösungs- und Projektverzeichnissen fern!
Also hier ist mein Weg:
quelle
DRY
? Abkürzung für etwas?Logic
? Konnte derCommon
Ordner keine Logik enthalten ?Wenn ich meine Anwendung entwerfe, sehe ich sie immer als Module mit einigen Abhängigkeiten zwischen ihnen. Wenn ich an ein Design denke, verwende ich eine Bottom-up- Strategie, um es zu entwickeln. Ich entwickle jedes Modul und dann bekomme ich sie zusammen arbeiten.
Nun, diese Module sind Projekte unter meiner Lösung (normalerweise Klassenbibliotheken ). Jedes Modul hat einen anderen Namespace und ein eigenes Design (mit Klassen usw.).
Eines dieser Module ist die GUI ( Graphical User Interface ).
Ich verwende auch immer ein Revision Control- Tool, um die Änderungen in jedem Projekt zu verfolgen. Ich schlage Git vor . Es ist Open Source, verteilt und kostenlos zu benutzen.
quelle
Jedes Mal, wenn ich ein neues Projekt beginne, erhalte ich eine umfassende Beschreibung dessen, was es tun soll. Dieser Input hilft mir, indem er mir einen Kontext bietet. Daher denke ich, welche Methode am besten (oder am besten geeignet) ist, um die Projektziele zu erreichen. An diesem Punkt beginne ich zu überlegen, in welchen Entwurfsmustern ich die beabsichtigte Lösung finden kann. Hier beginne ich mit der Organisation des Projekts unter Berücksichtigung der Entwurfsmuster, die ich für das Projekt übernehmen werde.
Einige Beispiele:
Denken Sie daran, dass Sie jedes Mal gezwungen sind, Ihr Projekt auf eine bestimmte Weise zu organisieren.
Hier ist eine Lektüre für Sie:
.Net Design Patterns .
Entwurfsmuster .
Objektorientiertes Design .
Hoffe das hilft.
quelle