Najlepsze praktyki w zakresie komponowania ASP.NET aplikacje webowe MVC (MEF, Areas, DI)

Obecnie zastanawiam się, jak zrestrukturyzować architekturę istniejącej niezbyt modularnej ASP.NET aplikacja MVC 3.0. Mam plugin jak struktura w umyśle, aby istniejący projekt extensible.

Szukałem różnych strategii tworzenia modułowych aplikacji internetowych i znalazłem następujące. Chciałbym, żebyś skomentował te pomysły.

  • obszary MVC w oddzielnych projektach

Dla każdej wtyczki chcę stworzyć indywidualną ASP.NET projekt MVC, który zawiera kontrolery, widoki i modele widoku dla wtyczki. Moduł "pracownik" będzie zawierał obszar do listy, tworzenia, aktualizacji i usuwania pracowników. Jednak brzmi to dobrze, AreaRegistration wymagane, aby umieścić wszystkie obszary w katalogu "bin". Znalazłem sposób, aby umieścić moje projekty Area bezpośrednio w folderze Areas i rozwiązać zespoły Area z folderu"/Areas/[AreaName]/bin":

BuildManager.AddReferencedAssembly.Add(Assembly.LoadFrom(…));
AppDomain.CurrentDomain.AssemblyResolve += ResolveAssemblies;

To działa dość dobrze i pozwala mi wdrożyć Pluginy w Folder obszarów głównego projektu. Podoba mi się, że używam funkcji obszarów, która jest dostarczana po wyjęciu z pudełka przez ASP.NET MVC.

  • MVC Portable Areas (MVCContrib)

Http://elegantcode.com/2012/04/06/mvc-portable-areas/

Obszary przenośne nie wydają się być dobrym rozwiązaniem, ponieważ wymagają kompilacji widoków jako osadzonych zasobów w pliku projektu Area. Uniemożliwiłoby to buforowanie usług IIS. Z drugiej strony naprawdę nie wyobrażam sobie, jak duża wada wydajności naprawdę jest.

  • moduły oparte na MVC przy użyciu MEF

Http://www.fidelitydesign.net/?p=104

W celu stworzenia luźno powiązanych usług w innych projektach w dużym stopniu polegam na MEF. Dlatego pomyślałem, że byłoby to świetny pomysł, aby użyć go do odkrycia ASP.NET Moduły/wtyczki MVC. W końcu użyłbym ControllerFactory, która tworzyłaby instancję kontrolerów eksportowanych za pomocą atrybutu 'Export'. W ten sposób miałbym pełne kontrola nad instancją wtyczki i może korzystać z MEF, aby uzyskać usługi. Jednak korzystanie z MEF naprawdę wymaga znacznie więcej pracy niż korzystanie z obszarów MVC, które rozwiązują Kontrolery po wyjęciu z pudełka.

  • Entity Framework w projektach wtyczek

Jeden problem, nie byłem w stanie rozwiązać do tej pory, jest jak dystrybuować podmioty w poszczególnych projektów wtyczek. Obecnie używamy pierwszego podejścia bazodanowego, które składa się z jednego *.plik modelu edmx zawierający wszystkie encje. Nawet z DbContext lub Code First nie jest możliwe użycie wielu klas DbContext dla jednej bazy danych. Jednym z pomysłów byłoby użycie MEF do ładowania encji z różnych wtyczek do centralnej klasy DbContext. Jednak nie wiem, czy jest to obsługiwana i / lub zalecana konfiguracja.

Author: JJS, 2012-08-26

1 answers

Inną opcją jest użycie mojego Gryfa.MvcContrib. Zajmuje się wszystkimi kanalizacjami i pozwala pisać widoki i używać obszarów z niewielkimi zmianami kodu.

Użyj go razem z kontenerem IoC, aby uzyskać potężny system wtyczek.

Oto artykuł, który pokazuje jak: http://www.codeproject.com/Articles/386674/ASP-NET-MVC-3-plug-in-architecture-using-Griffin-M

 3
Author: jgauffin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-27 05:55:49