2009-02-03 6 views
7

Trong cấu trúc thư mục MVC, nơi tệp lớp chung nên nằm ở đâu? Ví dụ, tôi có một lớp xác định DataContext đúng để sử dụng, vì vậy tôi không phát minh lại bánh xe trong mỗi bộ điều khiển của mình. Nó có nên nằm trong thư mục Controllers mặc dù nó không phải là bộ điều khiển không? Nó có nên được với các mô hình bởi vì nó liên quan đến cơ sở dữ liệu, mặc dù nó không phải là một mô hình? Có thể thư mục Views \ Shared? Hoặc là Nội dung thư mục bắt tất cả cho loại nội dung đó? Tôi chắc chắn rằng tôi có thể đặt nó ở bất cứ nơi nào, nhưng tôi đã tự hỏi nơi "đúng" là nơi.Vị trí lớp chung MVC

Trả lời

8

Đây không phải là bộ điều khiển, nội dung hoặc chế độ xem, vì vậy, đừng sử dụng chúng. Nó có vẻ gần gũi nhất với mô hình của bạn, vì vậy bạn có thể đặt nó trong mô hình dưới một thư mục con được gọi là "Người trợ giúp" hoặc "Tiện ích" hoặc một số loại như vậy. Hoặc bạn có thể thêm một thư mục cấp cao nhất khác được gọi là Dịch vụ và đặt nó ở đó. Đó là nơi tôi đặt tất cả logic ứng dụng của tôi, người trung gian giữa các bộ điều khiển và mô hình.

+0

Bạn đặt tất cả logic ứng dụng của mình vào dự án lớp trình bày? Âm thanh khủng khiếp .... –

+0

Đối với các dự án nhỏ tôi đặt nó ở đó. Nếu các dịch vụ sẽ được tái sử dụng, họ sẽ nhận được dự án của riêng họ. –

0

Nếu nó có thể hữu ích một mình (nghĩ về một công cụ dòng lệnh được xây dựng xung quanh nó), hãy đặt nó trong thư mục Mô hình. Nếu nó chỉ được sử dụng như một helper cho bộ điều khiển, hãy đặt nó trong thư mục Controllers.

3

Nếu bạn nhìn vào MVC Storefront Rob: Dự án thư viện lớp riêng biệt (như Commerce.MVC.Data)

+0

Nó không phải là về những gì Rob làm, nó là nhiều hơn thế - nó chỉ đơn giản là một cách tiếp cận tiêu chuẩn trong tách trách nhiệm và như vậy. Truy cập dữ liệu không có doanh nghiệp nào trong lớp trình bày của ứng dụng trừ khi chúng ta đang nói về một ứng dụng một trang mà nó sẽ không có ý nghĩa nhiều. –

0

Nó thực sự phụ thuộc vào những gì nó làm, nếu nó truy cập dữ liệu mà nó phải ở trong Data Access Layer, nếu không bạn có thể đặt nó trong thư mục điều khiển.

0

dmajkic,

Tại sao tách riêng nó ra thành khu vực riêng của mình? Nếu mã BLL của nó, nó phải nằm trong thư mục điều khiển, nếu mục DAL của nó có liên quan, nó phải nằm trong Model. Tôi có thể hiểu được nếu một dự án rất lớn và bạn muốn tạo một số thư mục con, đó không phải là vấn đề. Nhưng việc đặt mã trong một tầng khác thực sự đánh bại mục đích của MVC bạn có nghĩ vậy không?

+1

No. MVC là kiểu xem. Nó liên quan đến lớp trình bày. Bộ điều khiển chỉ chứa logic trình bày. Không nên có một logic kinh doanh trong các lớp điều khiển. dmajkic nói để đặt lớp trong một dự án riêng biệt, không phải là một tầng riêng biệt. – liammclennan

+0

@liammclennan - Chính xác, tôi không biết Al đang hút thuốc gì, nhưng có lẽ anh ta nên bỏ thuốc lá. –

0

Có một hội đồng DataAccess riêng biệt, làm cho lớp đó bên trong và gọi nó là DataContextFactory.