ASP.NET MVC 5 Modulaire de l'Architecture d'application Web?

L'entreprise où je travaille actuellement est aux prises avec une décision architecturale pour notre gamme d'applications. À l'heure actuelle, nous avons un couple d'applications qui ont des parties communes (penser comme un module calendrier). Jusqu'à maintenant, nous avons continué à copier le code à partir d'autres applications existant, mais dans l'avenir, nous voulons évoluer nos applications pour une plus conception modulaire:

ASP.NET MVC 5 Modulaire de l'Architecture d'application Web?

Comme vous pouvez le voir dans l'image ci-dessus, il est possible d'avoir différentes versions de modules par l'application.

Nous réfléchissons à des solutions possibles:

  • La construction d'une application de base cadre où nous pouvons installer notre
    les modules. Nous allons réfléchir à un outil comme Nuget pour accomplir cette tâche.
  • De la construction d'une application où tous nos modules sont inclus dans (=une seule base de code), mais le client ne reçoit que la fonctionnalité est activée pour lui. Nous sommes forseeing quelques problèmes avec les versions ici.

Des suggestions à ce sujet? Nous ne pouvons pas être la première entreprise qui rencontrent des difficultés avec ce problème?Toutes nos applications sont ASP.NET MVC 4/5 applications web, construit avec de Rasoir, des Modèles ou des modèles JavaScript (knockout.js). Toutes nos applications sont déployées sur Microsoft Azure et nous avons une vaste interne, la connaissance de buildscripts (MSBuild), Serveurs CI...

  • J'ai travaillé dans une position précédente avec une configuration similaire. Ce que nous avons fait avons un tout englobant solution qui comprend tous les projets. Les éléments réutilisables de vos applications vivons dans un projet partagé dans la solution référencé par chacune de vos applications web. La seule chose que cela n'a pas d'adresse est différente des versions des modules, pourquoi est-ce le cas? Je pense que cela va vous causer des maux de tête dans le long terme. Comme pour l'accès aux différents modules pour chaque client, qui serait régi par vos autorisations/structure de sécurité dans votre application.
  • Vous pouvez également faire de chaque module d'un projet individuel, et importer les projets dans chaque grand projet. Je préfère cela à la grande solution qui englobe tout simple parce que je déteste la recherche au travers d'une grande structure de l'arbre. La fois d'atteindre le même résultat si. Cela vous permet également de conserver les anciennes versions de modules et de les ajouter à un projet plus vaste/
  • nous travaillons avec des clients payants. Il est possible que nous voulons conserver une certaine clientèle (=application) sur la version 1.x parce qu'il veut de cette façon ou parce qu'il n'a pas à payer pour la nouvelle version 2.0...
  • Ah je vois, mais, techniquement, de restreindre les fonctionnalités peuvent être gérées dans le module lui-même. Par exemple si vous voulez ajouter une fonctionnalité Rappels à votre Calendrier, vous permettrait de limiter cette nouvelle fonctionnalité dans le module uniquement à vos clients payants. C'est exactement ce que nous avons fait dans mon ancien lieu de travail. C'est la façon dont la plupart des applications que j'ai travaillé avec de gérer des trucs comme ça.