Làm thế nào để tạo một trang web MVC MVC theo mô-đun


14

Tôi đang trong giai đoạn lập kế hoạch cho một hệ thống mạng nội bộ của nhân viên được xây dựng với ASP.NET MVC 4. Chúng tôi muốn trang web bao gồm các "mô-đun" riêng biệt, mỗi mô-đun cung cấp một tính năng khác nhau: nhắn tin, thay đổi bảng lương, v.v. . Tôi muốn các mô-đun này có thể được bật hoặc tắt trong thời gian biên dịch. Trang chủ sẽ hiển thị một số loại điều hướng sẽ liên kết với từng mô-đun được tải.

Điều đó thật dễ dàng cho đến nay, nhưng tôi không muốn tính năng điều hướng phải biết về các mô-đun trước đó. Nói cách khác, tôi muốn các mô-đun có thể khám phá một cách linh hoạt; Tôi muốn có thể viết mã cho một mô-đun mới và sau đó có một liên kết được thêm vào thanh điều hướng mà không có thay đổi mã ở bất kỳ nơi nào khác trong nguồn. Mỗi mô-đun nên có một số cách đăng ký chính nó với thanh điều hướng và - quan trọng hơn - điều này nên được thực hiện cho từng mô-đun khi được tải.

Tôi tin rằng điều này ngăn cấm sử dụng Khu vực của MVC, vì những khu vực này được thiết kế cho trường hợp khi bố cục của trang web được biết trước. MEF có vẻ như có thể phù hợp, mặc dù mọi người dường như đã thành công lẫn lộn trong việc kết hợp MEF với MVC. MEF thực sự là con đường để đi đến đây, hay có cách nào tốt hơn để hoàn thành những gì tôi cần?


Câu hỏi hay, tôi có cảm giác giải pháp của bạn có thể sẽ xoay quanh việc sử dụng sự phản chiếu. Bạn vẫn có thể sử dụng các khu vực khi bạn tạo các mục của mình, nhưng phương pháp xây dựng menu của bạn sẽ cần sử dụng sự phản chiếu để có được tất cả các loại của bạn (để giúp bạn thay đổi mã). Điều gì về nếu tất cả họ thực hiện cùng một giao diện Giao diện IModule. Sau đó, bạn có thể tìm thấy tất cả những người thừa kế của giao diện để có được tất cả các mô-đun bạn cần liên kết đến, vấn đề là bạn sẽ liên kết chính xác điều đó với một liên kết như thế nào mà không cần thêm dữ liệu? Hmm cốt truyện dày lên ...
mattytommo

1
Âm thanh với tôi như bạn muốn xây dựng một CMS, ngoại trừ việc thay vì thực hiện quản trị CMS từ bên trong CMS, bạn muốn nó được thực hiện trong thời gian xây dựng. Điều đó dẫn tôi đến câu hỏi, tại sao bạn muốn nó được thực hiện tại thời điểm xây dựng?
James P. Wright

@ JamesP.Wright Vâng, lý do tôi muốn làm điều đó trong thời gian xây dựng chỉ là vì điều đó có vẻ đơn giản hơn là phơi bày chức năng này thông qua một trang trên trang web. (Thêm vào đó, bộ mô-đun được sử dụng sẽ thay đổi hiếm khi đủ để thêm vào chi phí của loại lựa chọn động là không cần thiết.) Nhưng thực sự, quan trọng hơn chọn mô-đun ở thời gian xây dựng là khả năng của các ứng dụng để tìm các module trong nơi đầu tiên, đó là lực đẩy của câu hỏi của tôi.
bdesham

nopC Commerce ( nopc Commerce.com/documentation.aspx ) là một ví dụ điển hình về bạn muốn. Hãy xem cách viết một plugin và cách tiếp cận của họ cho DI.
Rui Marques

Đối với mục đích nghiên cứu, tôi đã tò mò 'thành công hỗn hợp' là gì khi kết hợp MEF với MVC. Vì codeplex là "Sống trong kho lưu trữ" ngày nay, liên kết mà OP cung cấp không hoạt động nữa. Để dành thời gian cho người khác: tìm kiếm bằng ctrl + f cho 'MEF2 với MVC4 qua Microsoft.Cysis' trên tab thảo luận trên archive.codeplex.com/?p=mef ;)
Kevin

Câu trả lời:


4

Trước tiên tôi sẽ có một lớp tập trung được sử dụng cho ứng dụng để đăng ký các mô-đun được biên dịch với một hàm tạo tĩnh và một thành viên tĩnh Danh sách các mô-đun có trong hệ thống. Các mô-đun sẽ có một thuộc tính tĩnh cho biết nó có phải là một mục menu hay không và nó sẽ xuất hiện theo thứ tự nào trong menu.

Mỗi mô-đun sẽ có hàm tạo tĩnh riêng để ghi chú trong lớp tập trung theo dõi các mô-đun.

Hãy nghĩ về hệ thống này giống như một hệ thống đồng hồ thời gian nơi nhân viên đến và đồng hồ. Sau đó, tại thời điểm tính lương, chúng tôi biết phải trả tất cả các nhân viên dựa trên người đã bấm giờ, v.v.

Sự phản chiếu cũng có thể được sử dụng nếu bạn có hợp đồng giao diện trên các mô-đun mà chúng phải kế thừa từ thông tin thuộc tính meta liên kết với nó.

Tôi đã làm việc cho Warner Brothers Music và đã làm một hệ thống xử lý âm nhạc nội bộ cho các định dạng mã hóa khác nhau. Tôi đã tạo một mô hình plugin chung để mã hóa với sự phản chiếu đã sử dụng tính kế thừa để nó có thể là kiểu chữ với sự phản chiếu để có được các thuộc tính meta cơ bản của lớp. Tôi đã không thử sử dụng một lớp tập trung tĩnh mặc dù. Chỉ cần nghĩ ngẫu nhiên về điều đó như một cách khác để thử cho vui.

Tôi cũng sẽ nói thêm rằng tôi đã sử dụng MVC phục vụ nhiều khách hàng với yêu cầu cơ bản nhưng cũng có các tính năng nâng cao tương tự như những gì bạn đang cố gắng thực hiện. Thay vào đó, tôi đã chuyển đổi MVC thành sử dụng App_Code thay vì yêu cầu biên dịch. Nó dễ dàng hơn để đẩy các tập tin theo cách này mà không cần một trình biên dịch tập trung.

Bạn có thể tận dụng JIT bằng cách đẩy FTP hoặc GIT đơn giản thay vì cần biên dịch cục bộ và đẩy DLL xung quanh.

Đây là một liên kết đến bài viết đó về stack overflow


Nghe có vẻ giống với những gì tôi đang tưởng tượng. Vấn đề duy nhất là, làm thế nào để tôi có được các mô-đun được tải ở vị trí đầu tiên? Theo cơ chế nào tôi bảo mỗi người trong số họ đăng ký với lớp trung tâm? Đây là nơi MEF dường như có thể phù hợp.
bdesham

MEF là tốt hơn. Tôi đã đưa ra ý tưởng mà không cần xem xét nó nhưng tôi đã sử dụng MEF cho tùy chọn đó nếu nó được đưa ra khi tôi thực hiện các dự án đó. Có vẻ như là một ý kiến ​​hay. Tôi không thấy lý do tại sao bạn không thể kết hợp MEF và MVC.
Jason Sebring

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.