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
.ProjectNameDocuments
For large projects there are certain documents that need to be kept with
it. For this I actually create a separate project or folder within the
solution to hold them.
.ProjectNameUnitTest
Unit testing always depends on the project - sometimes it is just really
basic to catch edge cases and sometimes it is set up for full code
coverage. I have recently added graphical unit testing to the arsenal.
.ProjectNameInstaller
Some projects have specific installation requirements that need to be
handled at a project level.
.ProjectNameClassLibrary
If there is a need for web services, APIs, DLLs or such.
.ProjectNameScripts (**Added 2/29/2012**)
I am adding this because I just found a need for one in my current project.
This project holds the following types of scripts: SQL (Tables, procs,
views), SQL Data update scripts, VBScripts, etc.
.ProjectName
.DataRepository
Contains base data classes and database communication. Sometimes
also hold a directory that contains any SQL procs or other specific
code.
.DataClasses
Contains the base classes, structs, and enums that are used in the
project. These may be related to but not necessarily be connected
to the ones in the data repository.
.Services
Performs all CRUD actions with the Data, done in a way that the
repository can be changed out with no need to rewrite any higher
level code.
.Business
Performs any data calculations or business level data validation,
does most interaction with the Service layer.
.Helpers
I always create a code module that contains helper classes. These
may be extensions on system items, standard validation tools,
regular expressions or custom-built items.
.UserInterface
The user interface is built to display and manipulate the data.
UI Forms always get organized by functional unit namespace with
additional folders for shared forms and custom controls.