Khi thiết kế một dự án và bố trí kiến trúc tôi bắt đầu từ hai hướng. Đầu tiên tôi nhìn vào dự án đang được thiết kế và xác định những vấn đề cần phải giải quyết. Tôi nhìn vào những người sẽ sử dụng nó và bắt đầu với một thiết kế UI thô. Tại thời điểm này tôi đang bỏ qua dữ liệu và chỉ nhìn vào những gì người dùng đang yêu cầu và ai sẽ sử dụng nó.
Khi tôi đã hiểu cơ bản về những gì họ đang yêu cầu, tôi xác định dữ liệu cốt lõi là gì họ sẽ thao tác và bắt đầu bố trí cơ sở dữ liệu cơ bản cho dữ liệu đó. Sau đó, tôi bắt đầu đặt câu hỏi để xác định các quy tắc kinh doanh bao quanh dữ liệu.
Bằng cách bắt đầu từ cả hai đầu một cách độc lập, tôi có thể đặt ra một dự án theo cách kết hợp hai đầu lại với nhau. Tôi luôn cố gắng giữ các thiết kế tách biệt càng lâu càng tốt trước khi ghép chúng lại với nhau, nhưng hãy ghi nhớ các yêu cầu của từng thiết kế khi tôi tiến về phía trước.
Khi tôi đã hiểu rõ về từng kết thúc của vấn đề, tôi bắt đầu đưa ra cấu trúc của dự án sẽ được tạo ra để giải quyết vấn đề.
Khi bố cục cơ bản của giải pháp dự án được tạo, tôi xem xét chức năng của dự án và thiết lập một bộ không gian tên cơ sở được sử dụng tùy thuộc vào loại công việc đang được thực hiện. Đây có thể là những thứ như Tài khoản, Giỏ hàng, Khảo sát, v.v.
Đây là cách bố trí giải pháp cơ bản mà tôi luôn bắt đầu. Khi các dự án được xác định rõ hơn, tôi tinh chỉnh nó để đáp ứng nhu cầu cụ thể của từng dự án. Một số khu vực có thể được hợp nhất với những khu vực khác và tôi có thể thêm một vài khu vực đặc biệt khi cần thiết.
Tên giải pháp
.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.