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:
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.
Vous devez vous connecter pour publier un commentaire.
Avoir un projet/de l'assemblée pour chaque module et l'exécution de ce que Nuget package est vraiment une bonne stratégie.
Avantage:
Défis:
Au cours du développement de débogage de code assembleur qui est installée à l'aide de Nuget. Nuget prend en charge intégré. Nous l'avons fait dans notre cas (le Cadre est utilisé par plusieurs plate-forme).
Code de changements nécessaires dans le module de code (un bug ou d'une nouvelle fonctionnalité requise). Eh bien, c'est difficile:
Option 1: Même développeur simplement aller de l'avant et faire ce changement, créer un nouveau package et installer la nouvelle version de son application. Arrivés à autoriser le changer car il est essentiel de code.
Option 2: Un désigné par l'équipe responsable pour fixer problème ou de demande de modification dans le cadre du code.
Vous pouvez également essayer d'utiliser le plugin architecture, construire les différents modules qui composent l'application en tant que plugin, puis construire le module qui est nécessaire pour toute application en une seule base de code. Dans ce cas, l'installation d'un composant pour un utilisateur particulier, fera l'objet d'un ajout ou d'arracher des plugins. De nombreux grands projets vous fait de cette architecture particulière, car elle réduit le copier-coller, augmente et la réutilisation et la vitesse de développement. Vous pouvez le vérifier nopcommerce un projet open source pour avoir une idée de comment il est fait.