6

Tôi hiện đang cố gắng tái cấu trúc dự án (asp.net mvc) mà không có bất kỳ sự phân tách nào cả. chỉ thư mục: sWhats cấu trúc giải pháp được đề xuất cho một trang web hơi lớn trong asp.net

  • Dự án có một loạt các lớp học EF Mã đầu tiên (People.cs, Exam.cs, Message.cs, vv)
  • Dự án có một vài kho (mà tất cả sử dụng EF Data Context)
  • và dĩ nhiên rất nhiều bộ điều khiển và viewmodels

chúng tôi có một dự án thử nghiệm nhưng chúng tôi arent rất tốt tại TDD nên không phải cái gì của nó, chúng tôi đang thực sự làm việc trên như của bây giờ.

Tôi muốn có sự phân tách rõ ràng hơn về các trách nhiệm khác nhau mà dự án phải giải quyết và sẽ đánh giá cao một số lời khuyên về cấu trúc dự án tốt đạt được điều này.

Vui lòng trợ giúp. cảm ơn trước

Trả lời

12

tôi sẽ đề nghị sau một Domain Driven Design (DDD) và một trong những cách gợi ý đẻ ra này sẽ được tạo ra các dự án sau:

Company.Project.Web < - Ứng dụng MVC của bạn, mặc dù bạn vẫn có thể sử dụng WebForms Company.Project.Domain < - Đối tượng chuyển giao dữ liệu (DTO của), ViewModels, Business logic, Sự kiện Company.Project.Data < - Giao diện Repository

Company.Project.Data.EF < - Ent Thực hiện ityFramework cụ thể của Repositories Company.Project.Model < - Các lớp EF CodeFirst bạn

Company.Common < - Một dự án chung của các tiện ích và/hoặc mở rộng

tôi sẽ đề nghị bạn hãy xem dự án Silk http://silk.codeplex.com/ từ các mô hình và nhóm thực hành. Thực hiện tham chiếu tuyệt vời của DDD, Repository và MVC cũng như trộn trong HTML 5 và jQuery (vNext).

+0

Đồng ý với việc thêm Giao diện - và tôi muốn sử dụng hộp chứa IoC để xử lý giao diện để triển khai khi chạy. –

+0

Tôi đã đọc rằng chế độ xemMô hình không được phép tương tác với lớp dịch vụ (logic nghiệp vụ). không nên họ vẫn là dự án web? – ignaciofuentes

+0

Chúng tôi thường giữ các ViewModels trong dự án Web. Mặc dù, DTO của chúng tôi có thể được sử dụng trực tiếp bởi lớp trình bày có thể là Web hoặc Dịch vụ hoặc WPF (XAML). Container IoC chẳng hạn như Unity là điều bắt buộc để giữ mối quan tâm của chúng tôi được tách biệt và đưa vào các phụ thuộc dịch vụ của chúng tôi. – jdmonty

11

Chúng tôi sử dụng thiết kế tương tự như được đề cập bởi jdmonty nhưng đơn giản hơn một chút. Chúng tôi làm như sau:

  • ApplicationName.Web - MVC Application
  • ApplicationName.Services - Kinh doanh logic
  • ApplicationName.Domain - lớp EF CodeFirst và các kho rằng hành động trên chúng
  • ApplicationName.Common - Các lớp học và tiện ích được sử dụng bởi nhiều dự án
  • ApplicationName.Tests - Thử nghiệm cho các dự án khác nhau

Dự án Web là phụ thuộc vào dự án Services.Dự án Dịch vụ phụ thuộc vào dự án Tên miền.

+0

Cảm ơn lời khuyên này. nó trông khá sạch sẽ ... bạn có phiền cho một chút chi tiết hơn về nơi bạn giữ ViewModels của bạn? ... họ có tương tác với dự án Dịch vụ không? – ignaciofuentes

+3

Chúng tôi giữ các ViewModels trong dự án Web bởi vì như bạn đã đề cập, chúng không nên tương tác với lớp Dịch vụ. ViewModels chỉ được sử dụng để truyền dữ liệu giữa các Views và Controller. –

+0

Nick, bạn có đang sử dụng DataAnnotations trong các mô hình chế độ xem của mình để xác thực không? Nếu bạn làm, chúng ta có thể nói rằng những xác nhận này cũng là logic kinh doanh? –

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