Quando disegno un progetto e definisco l'architettura, parto da due direzioni. Per prima cosa guardo il progetto in fase di progettazione e determina quali problemi aziendali devono essere risolti. Guardo le persone che lo useranno e comincio con una progettazione dell'interfaccia utente approssimativa. A questo punto sto ignorando i dati e sto solo guardando cosa chiedono gli utenti e chi li utilizzerà.
Una volta che ho una conoscenza di base di ciò che stanno chiedendo, determino quali sono i dati di base che verranno manipolati e inizierò un layout di database di base per tali dati. Quindi inizio a porre domande per definire le regole aziendali che circondano i dati.
Partendo da entrambe le estremità in modo indipendente, sono in grado di delineare un progetto in un modo che unisce le due estremità. Cerco sempre di mantenere i disegni separati il più a lungo possibile prima di fonderli insieme, ma tengo presente i requisiti di ciascuno mentre avanzi.
Una volta che ho una buona conoscenza solida di ciascuna estremità del problema, comincio a delineare la struttura del progetto che verrà creato per risolvere il problema.
Una volta creato il layout di base della soluzione di progetto, guardo la funzionalità del progetto e ho impostato un set di base di spazi dei nomi che vengono utilizzati a seconda del tipo di lavoro svolto. Potrebbero essere cose come Account, Carrello, Sondaggi, ecc.
Ecco il layout di base della soluzione che inizio sempre. Man mano che i progetti vengono meglio definiti, lo perfeziono per soddisfare le esigenze specifiche di ciascun progetto. Alcune aree potrebbero essere fuse con altre e potrei aggiungerne alcune speciali se necessario.
NomeSoluzione
.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.