SOA vs MVC-quand utiliser
j'ai réussit à lire sujet, mais n'ont toujours pas d'image complète et j'apprécierais vraiment votre réponse à la question suivante:
- pour ce type d'application doit être utilisée SOA approach (get JSON depuis le côté serveur et de générer le code html côté client à l'aide du framework javascript,
comme knockout js, angular js et ainsi de suite), et ASP.net MVC sur l'approche d'architecture alternative côté serveur (générer des pages totalement sur le côté serveur et les vues de retour comme résultat).
Par exemple, pour last SPA avec une logique client riche WCF services + knockout js (client side MVVM) a fourni un excellent résultat. Mais quelle approche conviendra le mieux? pour L'application CRUD (par exemple, plusieurs tables pour ajouter, mettre à jour des données avec différents rôles d'utilisateur en usage).
2 réponses
SOA est beaucoup plus que l'envoi de JSON à un client web.
Imaginez que vous avez une entreprise avec un système de logiciel basé sur une base de données pour des choses comme les ventes, l'inventaire, les rapports, etc. La plupart des systèmes commencent petit, avec juste un client ou une application web parlant directement à la base de données... et c'est correct.
cependant, au fur et à mesure que le système se développe, il y a certaines choses que vous trouverez qui ne s'inscrivent pas bien dans ce modèle: les processus de traitement par lots de longue durée qui bloquent l'application ou le web page, Emplois programmés qui impliquent plus que juste le serveur de base de données, des processus impliquant des données vivant dans des sources externes, ou des rapports complexes qui encombrent votre DB pendant qu'ils courent. À ce stade, vous voudrez penser à ajouter un serveur d'application pour gérer certaines de ces tâches. Un serveur d'application peut prendre une partie de la charge de travail de vos clients. Il peut également enlever certaines charges de ce qui est probablement à ce moment-là une base de données surchargée, de sorte que le serveur d'application demande ou déplace les données brutes vers et depuis la base de données, et votre application demande / soumet les données transformées vers et depuis le serveur d'application.
comme le système se développe encore plus, vous trouverez également que différentes parties du système ont des effets secondaires inattendus ailleurs que vous maintenez les choses. Même les améliorations simples deviennent de plus en plus compliquées à compléter. Le développement ralentit et le nombre d'insectes augmente. Le serveur d'application devient maintenant un endroit idéal pour centraliser les efforts de conception sur la façon de faire assurez-vous un changement dans un secteur a les conséquences attendues (et les conséquences attendues) partout ailleurs.
à ses débuts, ce QU'est vraiment un SOA, alors, c'est de prendre ce serveur d'application (qui pourrait utiliser JSON sur http, mais qui pourrait aussi offrir une interface complètement différente ou même traduire automatiquement parmi plusieurs technologies de transport de données) et d'appliquer , pas seulement certains, l'accès à la base de données passe par ce serveur d'application: la couche de service.
une fois que cet accès est appliqué, et que plus rien d'autre ne parle directement à la base de données (du moins, rien qui n'est pas spécifiquement pris en compte), la couche devient également un excellent endroit pour commencer à appliquer les règles d'affaires et la logique du système. Il vous permet d'écrire le code de style d'application traditionnel ici qui est plus facile à utiliser avec le contrôle source que sql et sera automatiquement partagé entre toutes les applications utilisant le système. Le code vit à peu près dans le même il est donc plus facile de modéliser les changements et leurs effets à travers le système. En prime, cette couche est souvent très facile à étendre à plusieurs serveurs redondants, et donc cela peut devenir un moyen d'améliorer et de gérer les performances et la fiabilité d'une grande application. À l'arrière-plan, il peut aussi améliorer les performances en simplifiant et en centralisant les efforts pour utiliser des outils de mise en cache de bases de données comme redis, en facilitant l'implication d'un DBA dédié dans le réglage des performances, et en vous aidant à centraliser accès à des données qui vivent dans plusieurs endroits.
à ce stade, votre site Web MVC n'est qu'une application de plus qui se connecte au serveur d'application dans votre système SOA. Vous pouvez également avoir une ancienne application client-serveur installée sur certains ordinateurs de bureau, ou votre application MVC peut faire face aux ventes publiques tandis que les ventes réelles et les représentants de soutien utilisent quelque chose de complètement différent, la facturation utilise une application différente, et l'exécution des commandes ou l'approvisionnement ont encore une autre interface ... mais ils parlent tous de la même la couche de service. Un avantage supplémentaire ici est que cette couche de service rend plus facile de tirer des données à partir de sources multiples, donc si votre système de fabrication a besoin d'informations sur la disponibilité du matériel à partir d'un système extérieur, la couche de service peut savoir comment aller trouver que et le code front-end n'a pas besoin de savoir que ces données proviennent de n'importe où spécial.
Le point de tout cela est qu'il n'est pas le cas soit d'/ou ici. Si vous avez un OSS, vous pouvez utiliser MVC à un niveau du système, et l'interface fournie par la couche service de SOA va déterminer à quoi ressemble votre modèle MVC et comment se comporte le contrôleur. Si vous n'avez pas D'aos, MVC fonctionne tout simplement correctement lors de la construction de la pile entière, de la base de données à la présentation, et en fait fonctionne de telle sorte que le modèle devient un microcosme pour une couche de service plus grande.
la question, alors, de quand utiliser JSON vs quand utiliser ASP.Net MVC prend une nouvelle forme. ASP.Net MVC peut faire partie d'une architecture SOA, et les cadres de service qui offrent des données JSON sont souvent mis en œuvre à l'aide de bibliothèques MVC côté client. vous voulez vraiment savoir quand il est plus approprié de faire plus du côté du client vs plus du côté du serveur. honnêtement, je pense que c'est surtout une préférence personnelle, mais il y a des compromis que vous devriez connaître.
faire plus de travail côté client peut être excellent pour la performance et l'évolutivité, car il répartit la charge de travail de votre application parmi tous vos utilisateurs" systèmes informatiques, et il peut réduire la latence introduite en faisant des voyages aller-retour à un serveur web ou un serveur d'application.
d'un autre côté, faire plus de travail côté serveur est bon pour éviter la latence dans le transfert de plus grands ensembles de données sur des liens Internet publics plus lents, peut rendre plus facile de répondre aux exigences de conformité pour des choses comme les mandats d'accessibilité de L'American Disabilities Act, où trop javascript peut causer des problèmes avec les navigateurs accessibles ou poussant des données au client les systèmes peuvent constituer un risque d'atteinte à la vie privée ou à la sécurité et peuvent faciliter le développement, le déploiement et la mise à jour de nouveaux codes lorsqu'une plus grande partie du traitement est effectuée à l'intérieur d'une même couche.
côté Client MV* (MVC, MVP, MVVM etc.) architectures et architectures MV* côté serveur sont les mêmes en ce qui concerne la partie SOA de votre architecture.
le modèle est l'endroit où vous communiquez avec les services et récupérez les données des différents services. Le choix entre côté client MV* et côté serveur est orthogonal.