2015-02-04 20 views
17

Firma, w której aktualnie jestem zatrudniony, zmaga się z decyzją architektoniczną dotyczącą naszej gamy aplikacji. W tej chwili mamy kilka aplikacji, które mają wspólne części (przypominają moduł kalendarza). Do tej pory mieliśmy na kopiowanie kodu z innej istniejącej aplikacji, ale w przyszłości chcemy rozwijać nasze aplikacje do bardziej modułową:ASP.NET MVC 5 Modularna architektura aplikacji internetowych?

Our situation

Jak widać na zdjęciu powyżej, możliwe jest mieć różne wersje modułów na aplikację.

Rozważamy możliwych rozwiązań:

  • Budowa rdzenia ramy aplikacji, gdzie możemy zainstalować nasze modułów Mamy myśleć o narzędzia jak Nuget to osiągnąć..
  • Budowanie jednej aplikacji, w której zawarte są wszystkie nasze moduły (= jedna podstawa kodu), ale klient otrzymuje tylko funkcję, która jest dla niego aktywowana. Czekamy na niektóre problemy z wersjonowaniem tutaj.

Wszelkie sugestie na ten temat? Nie możemy być pierwszą firmą, która zmaga się z tym problemem Wszystkie nasze aplikacje to aplikacje internetowe ASP.NET MVC 4/5, zbudowane z szablonów Razor Templates lub JavaScript (knockout.js). Wszystkie nasze aplikacje są wdrażane na platformie Microsoft Azure, a my mamy rozległą wiedzę na temat buildscript (MSBuild), serwerów CI ...

+1

Pracowałem na poprzedniej pozycji z podobną konfiguracją. To, co zrobiliśmy, miało jedno kompleksowe rozwiązanie obejmujące wszystkie projekty. Wielorazowe elementy aplikacji będą dostępne we wspólnym projekcie w rozwiązaniu, do którego odwołują się poszczególne aplikacje internetowe. Jedyną rzeczą, której nie dotyczy to różne wersje modułów, dlaczego tak się dzieje? Myślę, że to na dłuższą metę może spowodować ból głowy. Jeśli chodzi o dostęp do różnych modułów dla każdego klienta, byłby on regulowany przez twoją strukturę uprawnień/zabezpieczeń w twojej aplikacji. – mattytommo

+0

Możesz także uczynić każdy moduł indywidualnym projektem i importować projekty do każdego większego projektu. Wolę to od dużego rozwiązania, które obejmuje wszystko proste, ponieważ nie cierpię przeszukiwania dużej struktury drzewa. Oba osiągają jednak ten sam wynik. Pozwala to również zachować stare wersje modułów i dodać je do większego projektu/ –

+0

@mattytommo współpracujemy z płacącymi klientami. Jest możliwe, że chcemy zatrzymać określonego klienta (= aplikację) na wersji 1.x, ponieważ tego chce, lub dlatego, że nie zapłacił za nową wersję 2.0 ... – yoerideschrijver

Odpowiedz

8

Posiadanie oddzielnego projektu/zestawu dla każdego modułu i dostarczenie go jako pakietu Nuget to zdecydowanie dobra strategia.

Zaleta:

  1. może utrzymać i zwolnić wiele wersji. Inny klient otrzymuje inną wersję.
  2. Instalacja najnowszej lub określonej wersji obsługiwanej przez Nuget. Pomaga to podczas tworzenia aplikacji, w której deweloper aplikacji App A może kierować na wersję 2.0 modułu A, podczas gdy deweloper aplikacji B może kierować reklamy na wersję 1.0.
  3. Baza pojedynczego źródła z oddzielnymi odgałęzieniami dla każdej wersji. Klient korzystający z żądania 1.0 zmiany otrzyma kod z oddziału 1.0 z żądaną poprawką.
  4. Każdy moduł może być niezależnie wydawany lub aktualizowany.

wyzwania:

  1. Podczas rozwoju debugowanie kodu montaż, który jest instalowany przy użyciu Nuget. Nuget wspiera to w wbudowaniu. Osiągnęliśmy to w naszym przypadku (Framework jest wykorzystywany przez wiele platform).

  2. Wymagane zmiany kodu w kodzie modułu (wymagany jest błąd lub nowa funkcja). To jest trudne:

Opcja 1: Ten sam programista po prostu wykonuj tę zmianę, utwórz nowy pakiet i zainstaluj nową wersję w swojej aplikacji. Musimy autoryzować zmianę, ponieważ jest to kod krytyczny.

Opcja 2: Wyznaczony zespół odpowiedzialny za naprawienie problemu lub zmianę żądania w kodzie źródłowym.

2

Możesz także spróbować użyć architektury wtyczki, po prostu zbuduj różne moduły tworzące aplikację jako wtyczkę, a następnie zbuduj moduł, który jest wymagany dla każdej aplikacji jako pojedyncza podstawa kodu. W takim przypadku zainstalowanie komponentu dla dowolnego użytkownika będzie wymagało dodania lub wyciągnięcia wtyczek. Wiele dużych projektów sprawia, że ​​jest się tego architekturą, ponieważ ogranicza kopiowanie i wklejanie, zwiększa i ponownie wykorzystuje oraz przyspiesza rozwój. Aby sprawdzić, jak się to robi, możesz sprawdzić, czy jest to projekt o otwartym kodzie źródłowym.