Ketika mendesain proyek dan meletakkan arsitektur saya mulai dari dua arah. Pertama saya melihat proyek yang sedang dirancang dan menentukan masalah bisnis apa yang perlu diselesaikan. Saya melihat orang-orang yang akan menggunakannya dan mulai dengan desain UI kasar. Pada titik ini saya mengabaikan data dan hanya melihat apa yang diminta pengguna dan siapa yang akan menggunakannya.
Setelah saya memiliki pemahaman dasar tentang apa yang mereka minta, saya menentukan apa data inti yang akan mereka manipulasi dan memulai tata letak basis data dasar untuk data itu. Lalu saya mulai mengajukan pertanyaan untuk mendefinisikan aturan bisnis yang mengelilingi data.
Dengan memulai dari kedua ujungnya secara mandiri, saya dapat membuat proyek dengan cara yang menggabungkan kedua ujungnya menjadi satu. Saya selalu mencoba untuk menjaga desain terpisah selama mungkin sebelum menyatukannya, tetapi ingat persyaratan masing-masing saat saya bergerak maju.
Setelah saya memiliki pemahaman yang baik tentang setiap akhir masalah, saya mulai menjabarkan struktur proyek yang akan dibuat untuk menyelesaikan masalah.
Setelah tata letak dasar dari solusi proyek dibuat, saya melihat fungsionalitas proyek dan mengatur set dasar ruang nama yang digunakan tergantung pada jenis pekerjaan yang dilakukan. Ini mungkin hal-hal seperti Akun, Keranjang Belanja, Survei, dll.
Berikut adalah tata letak solusi dasar yang selalu saya mulai. Ketika proyek didefinisikan dengan lebih baik, saya memperbaikinya untuk memenuhi kebutuhan spesifik setiap proyek. Beberapa area dapat digabung dengan yang lain dan saya dapat menambahkan beberapa yang khusus sesuai kebutuhan.
Nama Solusi
.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.