2009-05-07 29 views
5

Tôi đang tìm cách tạo một dự án ASP.NET MVC quy mô khá lớn và tôi muốn chia nhỏ nó ra sao cho nó không phải tất cả trong một dự án và một assembly.Tổ chức giải pháp ASP.NET MVC

Tôi đã xem Oxite tổ chức của họ như thế nào (http://oxite.codeplex.com/Wiki/View.aspx?title=architecture) nhưng tôi đã tự hỏi làm thế nào những người khác cũng làm như vậy. Bất kỳ đề xuất?

Hiện nay, tôi đang xem xét một cái gì đó rất giống với Oxite:

Dự án - Dự án này bao gồm các lớp mô hình trong đó bao gồm các mô hình, các lớp cấu hình và giao diện cho các dịch vụ và kho. Không nên có nhiều logic ứng dụng ở đây, chủ yếu là cấu trúc dữ liệu.

Project.Core - Dự án này chứa tất cả mã cho bộ điều khiển và định tuyến bao gồm bộ lọc và kết quả. Cũng bao gồm ở đây là mô hình ViewData.

Project.Site - Dự án này chứa các chế độ xem, hình ảnh, javascript và tất cả các tệp không phải mã tĩnh khác. Nên có tối thiểu mã C# ở đây, phần lớn nên sống trong Project.Core

Trả lời

8

Bạn có thể muốn kiểm tra cách S#arp Architecture có bộ điều khiển, dịch vụ và lõi tách ra thành các dự án với các dự án Thử nghiệm tương ứng.

+0

Có bất kỳ ví dụ nào về những người đang sử dụng Kiến trúc S # arp? – ajma

2

Đây là cách chúng tôi đã chia nhỏ dự án. ASP.NET MVC này là khá gần để được đưa ra và chúng tôi đã học được một vài điều trên đường đi. Tôi đã đưa ra lý do tại sao mỗi dự án là riêng biệt là tốt.

Project.Models - M trong MVC, điều này chứa tất cả các lớp học kinh doanh của bạn. Nếu bạn có thể quản lý nó (một bạn thực sự cần), không nên có sự kiên trì hoặc các lớp liên quan đến dịch vụ web ở đây. Bạn có thể tất nhiên có giao diện cho truy cập dữ liệu được xác định trong dự án này. Một cách nhanh chóng để kiểm tra xem dự án này là "sạch" của truy cập dữ liệu là để kiểm tra xem bạn có yêu cầu tài liệu tham khảo để truy cập dữ liệu DLL như NHibernate trong dự án này hay không. Lý do: Về mặt lý thuyết, bạn sẽ có thể để gói dự án này và sử dụng các lớp học bất cứ nơi nào khác, ngay cả khi bạn chuyển sang một giao diện người dùng khác nhau như một giao diện điều khiển, vv

Project.Site - Dự án này bao gồm tất cả các JavaScript, CSS, Chế độ xem, v.v., mọi thứ liên quan đến Chế độ xem. Lý do: Nếu bạn có nhà thiết kế trang web, bạn chỉ có thể cấp cho họ quyền truy cập vào dự án này và yêu cầu anh ấy làm việc.

Project.Controllers - C trong MVC, điều này chứa tất cả các bộ điều khiển của bạn cũng như ModelBinders của bạn. Lý do: Ba dự án khác nhau cho Mô hình, Chế độ xem và Bộ điều khiển khiến việc rò rỉ các mối quan ngại xảy ra khó khăn hơn.

ProjectTests - Giữ tất cả các thử nghiệm đơn vị trong các dự án riêng biệt buộc bạn chỉ thử nghiệm giao diện công cộng; một thực hành tốt cho các bài kiểm tra đơn vị theo ý kiến ​​của tôi.

Projects.Services - Tất cả các dịch vụ web, mã liên quan đến sự kiên trì đều có tại đây trong dự án này.

Hiện tại, mọi lớp Utility đều đi vào Project.Models, nhưng tôi nghĩ sẽ tốt hơn nếu có một giải pháp riêng cho các lớp Utility và chỉ nhập chúng dưới dạng tham chiếu tới các assembly được biên dịch khi cần thiết.

+0

Tôi sẽ không khuyên bạn nên giữ Chế độ xem và Bộ điều khiển trong các dự án riêng biệt. Cả hai đều rất cụ thể và làm việc cùng nhau. Tốt nhất là họ ở cùng nhau trong một dự án. – harsimranb

Các vấn đề liên quan