Thực tiễn tốt nhất cho kiến ​​trúc MVC [đã đóng]


28

Câu hỏi của tôi là về cách kiến ​​trúc một ứng dụng MVC. Ví dụ: chúng tôi được khuyến khích sử dụng DI với mẫu Kho lưu trữ để tách rời quyền truy cập dữ liệu từ bộ điều khiển, tuy nhiên rất ít người nói trên CÁCH làm điều đó cụ thể cho MVC. Ví dụ, chúng ta sẽ đặt các lớp Kho lưu trữ ở đâu? Chúng dường như không liên quan đến mô hình cụ thể, vì mô hình cũng tương đối tách rời khỏi các công nghệ truy cập dữ liệu thực tế.

Một câu hỏi thứ hai liên quan đến cách cấu trúc các lớp hoặc tầng. Hầu hết các ứng dụng ví dụ (bữa tối Nerd, Cửa hàng âm nhạc, v.v.) dường như đều sử dụng cách tiếp cận 2 lớp, một lớp (không tính các bài kiểm tra) thường có bộ điều khiển gọi trực tiếp mã L2S hoặc EF.

Nếu tôi muốn tạo một ứng dụng nhiều lớp / lớp, một số thực tiễn tốt nhất có liên quan đến MVC là gì?

Câu trả lời:


5

DI được thực hiện trong ASP MVC bằng cách sử dụng Bộ điều khiển Factory. Nhà máy này được sử dụng để giải quyết các phụ thuộc bộ điều khiển của bạn.

MvcContrib có một số triển khai Facotry điều khiển mà bạn có thể sử dụng ngoài hộp. Tôi sử dụng triển khai Castle Windsor của họ và nó hoạt động tốt. Cũng sẽ đề nghị kiểm tra Lớp TestHelper của họ. Nó có một số chức năng rất tuyệt vời để chế nhạo Trình điều khiển HTTPContext, Phiên, vv .. MVCContrib

Cá nhân tôi muốn cung cấp cho Mô hình của tôi một ví dụ Kho lưu trữ để làm việc. Mô hình hiển thị một api cho kho lưu trữ (CRUD). Sự phụ thuộc của bộ điều khiển vào một mô hình cụ thể được đưa vào khi tạo (hàm tạo), điều này được đưa vào thông qua Nhà máy điều khiển. Đây là điểm vào của tôi vào biểu đồ đối tượng mà bộ chứa IoC của tôi quản lý.


2

Ví dụ, chúng ta sẽ đặt các lớp Kho lưu trữ ở đâu?

Họ thuộc về mô hình; chúng là mô hình trong ứng dụng.

Làm thế nào để tôi cấu trúc các lớp? Nếu tôi muốn tạo một ứng dụng nhiều lớp / lớp, một số thực tiễn tốt nhất có liên quan đến MVC là gì?

Các bậc đại diện cho sự phân tách vật lý của mã. Các lớp đại diện cho sự phân tách hợp lý. Các lớp (như hiện tại) hoạt động tốt cho MVC. Tùy thuộc vào số lượng logic nghiệp vụ, nó có thể được đặt trong Bộ điều khiển của bạn hoặc có thể được đặt trong một cụm riêng biệt và có thể được bộ điều khiển sử dụng trong chu kỳ yêu cầu.


Vì vậy, bạn đang đề xuất rằng họ nên đi trong Dự án giao diện người dùng của một ứng dụng nhiều tầng?
Erik Funkenbusch

@Mystere Man Nếu nó không phải là khổng lồ, thì họ nên tham gia vào dự án lưu trữ ứng dụng MVC của bạn. Cụ thể, logic nghiệp vụ sẽ đi vào bộ điều khiển và mỗi hành động sẽ có logic riêng. MVC không chỉ là một mẫu chỉ UI; đó là lý do tại sao tôi không đồng ý với khẳng định của bạn rằng đó là một 'dự án UI'. Không phải vậy. Đây là một dự án MVC như một Viewphần (có UI của bạn).
George Stocker

Ok, có lẽ tôi phras điều đó kém. Tuy nhiên, bạn không đồng ý rằng lớp khung nhìn không nên thao túng cơ sở dữ liệu? Và nếu bạn đặt các lớp Kho lưu trữ trong mô hình, thì khung nhìn có thể làm như vậy.
Erik Funkenbusch

trong một ứng dụng MVC nhỏ, UI "Layer" chỉ đơn giản là thư mục chứa các khung nhìn. Trong một ứng dụng lớn hơn, nó có thể là dự án của riêng nó. Nếu đó là dự án riêng của nó, thì nó sẽ phối hợp với bộ điều khiển và bộ điều khiển có thể kết nối với BusinessLayer khi cần. Không ai bên ngoài bộ điều khiển thậm chí sẽ cần biết tầng kinh doanh tồn tại. Tôi nghĩ rằng bạn đang tự động nghĩ rằng đây là những dự án riêng biệt, nhưng chúng không phải như vậy.
George Stocker
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.