Quelles sont les forces et les faiblesses de la de nombreux cadres basé sur backbone.js?
Espère que quelqu'un peut partager son expérience avec certains des plus récents backbone.js les variantes de là-bas.
J'ai une bonne expérience avec backbone/souligner/exiger dans plusieurs projets et j'aimerai prendre la prochaine étape vers des solutions les plus avancées pour les applications complexes de la structure.
Je sais que les cadres suivants sont disponibles:
- Marionnette
- Geppetto (basé sur la Marionnette)
- Chaplin, Chaplin - charlie chaplin-réutilisable
- Vertèbres
- LayoutManager
- Thorax
- Aura
- Luca
- Singool
- backstack
- Épine dorsale de l'INTERFACE utilisateur
-
BTW - excellent point de départ pour un projet de grande ampleur
Et probablement j'ai raté quelques.
Il y a une courte introduction sur les différences ici:
mais c'est très général. Je me demandais si quelqu'un peut partager son expérience avec la vie réelle des applications à l'aide de ces cadres.
Quel est l'avantage de choisir l'un plutôt que l'autre? Quand la marionnette être une meilleure solution, plus de chaplin, ou pourquoi est-vetebrae mieux pour certaines applications, par exemple.
Sûr, la réponse la plus évidente sera "utiliser quoi de mieux pour vos besoins", mais je manque d'expérience avec ces cadres de connaitre leur force/but/avantages ou privilégiées scénarios.
Merci!
Edit 1:
trouvé ce post:
De la colonne vertébrale.Marionnette vs épine Dorsale Standard
Edit 2:
Réponse par Mathias schafer (Chaplin) par mail:
En bref, la structure actuelle est proche de la version 1.0, puisqu'elle est déjà utilisée dans la production. Nous ne sommes pas l'intention d'ajouter de nouvelles fonctionnalité ou de la rupture de changements de l'API jusqu'à 1.0.
Marionnette est certainement le plus complet et stable de la bibliothèque là-bas. Il aborde plusieurs aspects de la JS développement d'une application avec la colonne vertébrale. Par exemple, il a une forte couche de la vue qui épine Dorsale elle-même se laisse complètement vide. Bien sûr, vous allez trouver que certains aspects ne seront pas répondre à vos demandes et vous pourriez vous sentir la nécessité de mettre en place une structure autour de la Marionnette.
En revanche, Chaplin met l'accent sur une assez petite, mais très important aspect de l'épine Dorsale apps, à savoir l'ensemble de l'application de la structure et du module du cycle de vie. À cet égard, Chaplin est très opionated et est plus comme un cadre qu'une bibliothèque (comme dans “votre code appelle une bibliothèque, d'un cadre d'appels de votre code”). Chaplin fournit certaines classes qui se situent au-dessus individuelle des modules de l'application et de contrôle de l'ensemble de l'état d'application. Ce qui donne à votre application une structure classique comme Ruby on Rails-t-il pour exemple.
Dans Chaplin, vous déclarez certaines routes de la carte pour les contrôleurs, et Chaplin commence le contrôleur une fois l'itinéraire de match. Il s'occupe aussi de l'élimination des anciens contrôleurs, et de le montrer et de cacher des principaux points de vue, un contrôleur est censé créer. C'est l'idée de base, mais Chaplin prend soin de le laid détails pour faire de cette course en douceur.
Il y a deux directeurs qui viennent avec cette structure:
- La modularisation, le découplage et le bac à sable
- Croix-module de communication à l'aide de Publier/Souscrire et de Médiateur(s)
Bien sûr, ces modèles ne sont pas nouvelles dans le développement de logiciels du monde, et Chaplin n'est pas la seule bibliothèque qui s'applique à Backbone.js apps.
Chaplin fournit également des améliorations pour la couche de la Vue, par exemple un très sophistiqué CollectionView, mais pas autant que la Marionnette avec ses Régions et de ses Mises en page. Mais il est relativement facile d'écrire de telles méta-classes, en utilisant les moyens Chaplin Vues.
- +1 à Votre question frappé la tache. Au cours de la dernière année ou deux, une sorte de cadre hype a gonflé le paysage avec d'innombrables architecture inspirée des projets qui sont vraiment difficiles à différencier les unes mise en œuvre d'un très propre et le plus souvent pléthorique approche pour faire les choses. Notez que ceci EST un commentaire 🙂
Vous devez vous connecter pour publier un commentaire.
La plupart (tous?) les cadres que vous êtes à la recherche à résoudre les mêmes problèmes, mais ils le font de façons légèrement différentes légèrement différents objectifs.
Je pense qu'il est juste de dire que tous ces projets permettrait de résoudre les problèmes de ces catégories:
De marionnettes, dont j'ai été la construction depuis décembre 2011, a quelques très distinctes les objectifs et les idéaux de l'esprit, ainsi:
Je ne dis pas qu'aucun des autres cadres de ces mêmes objectifs. Mais je pense que la Marionnette de l'originalité vient de la combinaison de ces objectifs.
Composite De L'Architecture De L'Application
J'ai passé plus de 5 ans de travail en client lourd, distribuée systèmes de logiciels à l'aide de WinForms et C#. J'ai construit des applications pour ordinateur de bureau, ordinateur portable (smart-client), les appareils mobiles et les applications web, partageant tous un noyau fonctionnel et de travail avec le même serveur back-end de nombreuses fois. En ce moment, j'ai appris la valeur de la modularisation et très rapidement déplacé vers le bas un chemin de composite de la conception de l'application.
L'idée de base est de "composer" de votre application d'exécution de l'expérience et le processus de beaucoup de petites pièces qui ne savent pas forcément les uns des autres. Ils s'inscrivent eux-mêmes avec l'ensemble de l'application composite système, puis ils communiquent par le biais de divers moyens de découplée des messages et des appels.
J'ai écrit un peu à ce sujet sur mon blog, l'introduction de la Marionnette comme un composite de l'architecture de l'application pour la colonne vertébrale:
Files D'Attente De Messages /Motifs
Même à grande échelle, les systèmes distribués également profité de message queuing, enterprise integration patterns (modèles de messagerie), et le service de bus pour gérer les messages. Cela, plus que tout autre, a eu une influence énorme sur mon approche découplée de développement de logiciels. J'ai commencé à voir un processus unique, en mémoire des applications WinForms de ce point de vue, et bientôt mon côté serveur et développement de l'application web a pris de l'influence de cette.
Cela s'est directement traduit lui-même à la façon dont je regarde épine Dorsale de la conception de l'application. - Je fournir un agrégateur d'événements dans la Marionnette, pour à la fois le haut niveau de l'objet Application, et pour chaque module que vous créez dans l'application.
Je pense que sur les messages que je peux envoyer entre mes modules: les messages de commande, les messages d'événements, et plus encore. Je pense aussi que sur le côté serveur de communication comme des messages avec ces mêmes modèles. Certains modèles ont fait leur chemin dans la Marionnette déjà, mais certains n'ont pas encore.
La modularisation
La modularisation du code est extrêmement important. La création de petites encapsulé les paquets qui ont un accent singulier avec bien défini d'entrée et de sortie est un must pour n'importe quel système d'une certaine taille et de la complexité.
Marionnette fournit la modularisation directement par le biais de
module
définitions. Mais je reconnais aussi que certaines personnes aiment RequireJS et souhaitez l'utiliser. J'ai donc fournir à la fois une version standard et une RequireJS compatible construire.(Pas de blog disponibles pour cela, encore)
Différentiels Utilisation
C'est l'une des philosophies de base que j'ai faites cuire dans chaque partie de la Marionnette que je peux: pas de "tout ou rien" pour l'utilisation de la Marionnette.
Épine dorsale prend elle-même un très progressive et modulaire approche avec l'ensemble de bloc de construction des objets. Vous êtes libre de choisir ceux que vous souhaitez utiliser, quand. Je crois fermement à ce principe et efforcera de faire en sorte de Marionnette fonctionne de la même manière.
À cette fin, la majorité des pièces que j'ai intégré à de Marionnettes sont construits pour résister à lui seul, à travailler avec les principaux morceaux de la colonne vertébrale, et à travailler ensemble, même mieux.
Par exemple, presque chaque épine Dorsale de l'application doit afficher dynamiquement un Squelette à afficher dans un certain endroit sur l'écran. Les applications doivent aussi gérer la fermeture de vues anciennes et de nettoyage de la mémoire quand un nouveau est mis en place. C'est là que la Marionnette de
Region
vient de jouer. Une région gère le code standard de la prise de vue, l'appel de rendu, et la farce de la suite dans les DOM pour vous. Alors ferme la vue et de la nettoyer pour vous, à condition que votre point de vue a un "proche" de la méthode.Mais vous n'êtes pas obligé d'utiliser des Marionnettes du point de vue afin d'utiliser une région. La seule exigence est que vous êtes s'étendant à partir de la colonne vertébrale.Vue à un certain point du prototype de l'objet de la chaîne. Si vous choisissez de fournir un
close
méthode, unonShow
méthode, ou d'autres, de la Marionnette de la Région vous appeler au bon moment.Pas de Serveur de Verrouillage
- Je construire Backbone /Marionnette applications sur une grande variété de technologies de serveur:
JavaScript JavaScript est-il, quand il s'agit de s'exécutant dans un navigateur. Côté serveur JavaScript est génial aussi, mais il n'a aucun effet ou une influence sur la façon dont j'écris mon navigateur basé sur le JavaScript.
En raison de la diversité des projets que j'ai construit et les technologies de mes clients, je ne peux pas et ne sera pas de verrouillage de la Marionnette dans un seul serveur côté pile de la technologie pour une raison quelconque. Je ne vais pas mettre un passe-partout de projet. Je ne vais pas mettre un rubis gemme ou d'un mécanisme de prévention de package. Je veux que les gens comprennent que la Marionnette n'a pas besoin d'un serveur de back-end. Il est basé sur un navigateur JavaScript, et le back-end n'a pas d'importance.
Bien sûr, je suis entièrement d'appuyer d'autres personnes fournissant des paquets pour leur langue et leur cadre. Je liste les paquets dans le Wiki, et j'espère que les gens de continuer à construire plus de paquets qu'ils voient un besoin. Mais qui est le soutien de la communauté, pas de soutien direct de la Marionnette.
Facilement Modifier Les Valeurs Par Défaut
Dans mes efforts pour réduire code réutilisable et de fournir des valeurs par défaut raisonnables (ce qui est une idée que j'ai directement "emprunté" de Tim Branyen de LayoutManager), je reconnais la nécessité pour les autres développeurs à utiliser légèrement différentes implémentations que je fais.
Je fournir rendu en fonction inline
<script>
balises pour les modèles, à l'aide de Underscore.js les templates par défaut. Mais vous pouvez le remplacer par la modification de laRenderer
et/ouTempalteCache
objets en de Marionnettes. Ces deux objets fournissent la base des capacités de rendu, et il y a des pages wiki qui montrent comment modifier ce pour différents gabarits pour les moteurs et les différentes façons de chargement de modèles.Avec v0.9 de la Marionnette, il devient encore plus facile. Par exemple, si vous souhaitez remplacer l'utilisation de inline modèle des blocs de script avec pré-compilé de modèles, vous n'avez qu'à remplacer une méthode sur le moteur de Rendu:
et maintenant, l'application de l'utilisation de pré-compilé les modèles que vous joignez à votre vue
template
attribut.J'ai même fournir une Marionnette.Async add-on avec v0.9 qui vous permet de soutenir de manière asynchrone rendre la vue. Je continue de s'efforcer de le rendre aussi facile que possible de remplacer le comportement par défaut de la Marionnette.
Code De Configuration
Je suis un fan de "convention over configuration" dans certains contextes. C'est un moyen puissant de faire les choses, et de Marionnettes fournit un petit peu - mais pas trop, honnêtement. De nombreux autres cadres - surtout LayoutManager - davantage de convention over configuration que la Marionnette n'.
C'est fait avec un but et une intention.
J'ai construit assez de plugins JavaScript, des cadres, des add-ons et des applications à connaître la douleur d'essayer d'obtenir des conventions de travailler sérieusement et rapidement. Il peut être fait avec de la vitesse, mais généralement au détriment d'être en mesure de le changer.
À cette fin, je prends un "code de configuration" dans l'approche de la Marionnette. Je n'ai pas fournir beaucoup de "configuration" Api où vous pouvez fournir un littéral d'objet avec des valeurs statiques qui changent une bande de comportements. Au lieu de cela, j'ai documenter les méthodes que chaque objet a, par l'intermédiaire du annotée du code source et de la réelle documentation de l'API - avec l'intention de vous dire comment changer de Marionnette à travailler comme vous le souhaitez.
En fournissant un environnement propre et claire de l'API pour la Marionnette des objets, j'ai créer une situation où, en remplaçant le comportement d'un objet spécifique ou la Marionnette dans son ensemble est relativement simple et très flexible. Je le sacrifice de la "simple" configuration des appels de l'API pour la flexibilité de fournir votre propre code pour faire fonctionner les choses de la manière que vous voulez.
Vous ne trouverez pas un "configurer" ou "options" de l'API dans la Marionnette. Mais vous trouverez un grand nombre de méthodes qui servent chacun un but très précis, propres signatures, qui font qu'il est facile de changer la façon de Marionnettes œuvres.
What is the benefit of choosing one over the other?
- cette réponse estMarionette [...] has a few very distinct goals and ideals in mind
, qui n'a pas une fois se comparer à un autre cadre. Si la question était de s'il vous Plaît expliquer ce que chacun de ces cadres peut faire, alors bien sûr, c'est une excellente réponse. Mais il n'était pas. Et il n'est pas.What are the strengths and weaknesses of...
....of the *many* frameworks based on backbone.js
. ;-pJe suis actuellement en utilisant la colonne vertébrale avec le gestionnaire de configuration de module et le guidon comme moteur de template et je l'ai trouvé vraiment facile à mettre en place une petite application à l'aide d'un déjà existant Graal backend. Avant de commencer à l'aide de gestionnaire de présentation que j'ai lu sur la Marionnette et Chaplin et les deux me semblait vraiment puissant, mais complexe. Puis je me suis souvenu pourquoi j'ai d'abord choisi backbone.js: la simplicité. Tous ces cadres sont l'ajout de ce squelette a laissé de côté par la conception. Je ne dis pas qu'un cadre est mauvais, mais si j'ai besoin de quelque chose de plus complexe, je vais essayer d'autres projets, comme ember.js ou sproutcore, car ils ont une base de code unique, écrit avec un but dans l'esprit de leurs concepteurs. Ici, nous avons des cadres sur le dessus de l'autre. Bien sûr, la charpente est l'ossature, non seulement pour les applications du bâtiment, mais aussi pour l'écriture de certains plus puissant de la bibliothèque, mais la seule chose que je pense est vraiment pauvre, c'est de la couche de la vue, car il manque un gestionnaire de mise en page et la possibilité de nidification des points de vue. Avec le gestionnaire de configuration qui n'est pas comblé assez bien.
Donc, ma réponse à votre question est: début de l'utilisation de la dorsale est, et demandez-vous quelle est manquant, et quelles sont vos attentes sur le cadre. Si vous trouvez qu'il y a trop de choses à gauche par colonne vertébrale, puis aller les chercher dans les autres cadres et de choisir celui qui est le plus proche de vos besoins. Et Si vous n'êtes toujours pas convaincu dans le choix, peut-être l'épine dorsale n'est pas pour vous et vous devez chercher une autre solution (ember.js, sproutcore, ExtJs, JavaScript MVC sont tous bons). Si vous avez de l'expérience dans l'écriture d'applications clients, vous n'avez pas vraiment besoin de l'expérience sur tout le framework là-bas pour choisir celui de droite (pour vous, bien sûr)
J'ai étudié les différents cadres de construire avec Backbone.js et construit les Vertèbres pour un projet à HauteLook. Les objectifs du projet sont inclus... dynamique script de chargement, AMD module de format, de gestion de la dépendance, de construire avec la plupart des bibliothèques open source, organiser le code en paquets, d'optimiser et de construire pour une ou plusieurs single page apps, hôte sur la pleine mise en cache du serveur, par exemple, pas de script côté serveur en utilisant seulement une API pour les données, et le plus amusant, pour moi, l'utilisation de comportement conduit au développement du projet. Il y a une description du projet : http://www.hautelooktech.com/2012/05/24/vertebrae-front-end-framework-built-with-backbone-js-and-requirejs-using-amd/
Notre Problème:
Sélectionné librairies (jQuery, Underscore.js, Backbone.js, RequireJS, Moustache) fournir le module de chargement, de la gestion de la dépendance, de la structure des applications (pour les modèles, des collections, des vues et des routes), asynchrone interactions avec les API, les différents services publics et des objets pour gérer les comportements asynchrones, par exemple (Promesses) Deferreds, les Callbacks. Le reste logique nécessaire pour compléter le cadre comprend:
Nos Solutions (mis en œuvre dans les Vertèbres):
L'État De L'Application Gestionnaire De -
Le gestionnaire de l'application stocke les données en mémoire et persiste également des données dans le navigateur de stockage pour fournir une ressource pour la commune de données/métadonnées. Fournit également des données (état) afin de reconstruire la page des vues basées sur les interactions (par exemple, l'onglet sélectionné, les filtres appliqués). L'état de l'application manager fournit une stratégie pour les ressources à récupérer de l'etat. Conçu pour agir comme une machine à état.
Layout Manager -
Le layout manager dispose d'un ou de plusieurs points de vue ainsi que le document (DOM) les destinations pour chaque (rendu) de la vue. Une page de transition entre le nombre de vues, de sorte que le gestionnaire de mise en page permet de suivre des états d'affichage, par exemple, rendu, pas-rendus, affiche, pas affichées. Vous pouvez utiliser le gestionnaire de présentation charge paresseux et render (détaché) qu'un visiteur du site est très probablement à la demande, par exemple, l'onglet modifications sur une page. La transition entre les états d'affichage est gérée par cet objet. Toute une mise en page peut être désactivée afin que la vue des objets et de leurs liaisons sont supprimés, la préparation de ces objets pour la collecte des déchets (prévention des fuites de mémoire). Le layout manager communique aussi de l'état d'affichage avec le contrôleur(s).
Contrôleur -
Un objet contrôleur est appelé par un itinéraire en fonction de gestionnaire, et est responsable de l'obtention de l'état concernés (modèles d'application) pour générer une page (layout), (également responsable de la mise en état lors de la modification de parcours). Le contrôleur transmet les données dépendantes (modèles/collections) et construit de visualiser les objets pour une demande de page à la disposition du gestionnaire. Comme un effet secondaire de l'utilisation de contrôleurs empêche les routes de l'objet de devenir pléthorique et emmêlés. Un itinéraire doit correspondre à un contrôleur qui intervient puis désactiver l'affichage de la page, en gardant la route des fonctions de gestion lean.
Todos application est hébergée à la fois en dev mode et optimisé sur Heroku...
De nombreux concepts dans les autres cadres sont empruntés, par exemple la nécessité de destory vues pour afficher l'aperçu des fuites de mémoire, comme l'a souligné Derick Bailey - http://lostechies.com/derickbailey/ ; le Layout Manager par Tim Branyen http://tbranyen.github.com/backbone.layoutmanager/
En résumé, Backbone.js est destiné à être un outil dans votre demande Backbone.js la bibliothèque ne fournissent pas toute l'architecture, vous aurez besoin de construire une application, mais ne fournissent de grandes interactions avec une API et une solide structure de code pour... Vues (loi comme les contrôleurs trop) et votre couche de données des Modèles et des Collections, et enfin les Routes. Nous avons construit des Vertèbres de la viande que les objectifs de notre projet, et a décidé d'extraire le code comme un cadre à utiliser pour les autres, d'apprendre, ou de quoi que ce soit.
La réponse à votre question, à mon avis, est d'apprendre de tous les cadres et utiliser ce que vous avez besoin pour atteindre vos objectifs, si vous trouvez que votre projet objectifs ajustement en étroite collaboration avec l'un des cadres construits avec l'épine Dorsale, puis une grande, sinon à construire votre propre cadre il y a de grands exemples partagé par la communauté. Ou si vous trouvez vous-même un peu perdu dans la direction de votre application, puis choisissez quelque chose de plus opiniâtre et structurée peut-être Ember.js. La grande chose est, il ya une bonne gamme de choix pour vous aider à code à l'aide d'un (MVX) comme le modèle MVC avec JavaScript.
J'ai développé le Luca cadre tout en travaillant à BenchPrep où nous l'avons utilisé pour développer plusieurs grandes single page apps sur le dessus de la backbone.js de la bibliothèque.
J'avais travaillé avec ExtJS pour plusieurs années auparavant et qui ont volé mon préféré des concepts à partir de ce cadre comme le composant driven architecture où vous développez votre point de vue comme composants autonomes et ensuite de se joindre à eux avec d'autres composants à l'aide de contenants points de vue. Et depuis, il est fortement basée sur la configuration, le développement d'une application de Luca se sent beaucoup comme décrivant un objet JSON.
Un avantage de cette approche est la possibilité de réutiliser des composants à travers plusieurs applications ou à des endroits différents dans votre application, avec seulement des modifications mineures à l'aide épine Dorsale de l'étendre. Il est également très facile d'expérimenter avec différentes mises en page /présentations de composants en faisant seulement quelques changements mineurs à l'JSON configuration.
En plus d'une large gamme de helper /fonctions de l'utilitaire, Luca est livré avec de nombreux niveau supérieur de la Dorsale de produits dérivés que vous pouvez regrouper en quelque sorte imagineable de construire une INTERFACE utilisateur complexe.
Points De Vue, Des Composants, Des Conteneurs
Twitter Bootstrap Styles et de Balisage Pour Gratuit
Des Composants De L'Application
De collecte et d'Améliorations apportées au Modèle
Des événements et des Crochets
Luca composants sont plus libéraux, les événements qu'ils émettent par rapport au stock épine Dorsale des composants. Ils émettent des événements comme avant:initialiser, après:initialiser, avant d':render, après:render, d'activation, d'abord:l'activation, la désactivation, la première:la désactivation, et cela vous permet de régler finement le comportement de vos composants. De Plus, par la définition d'un événement dans l' @crochets de propriété sur votre point de vue, il appelle automatiquement un même nom que la fonction pour vous si il existe. Cela empêche beaucoup de rappel style code, qui améliore la lisibilité.
Vous pouvez également configurer le Luca.Les événements de la classe de publier les événements mondiaux de la publication /abonnement canal, ce qui rend la construction d'une grande application plus facile et le sida dans les inter module de communication.
Le Ruby Gem
Luca a été développé spécifiquement tout en travaillant contre les Rails et Sinatra Api et de ce fait est actuellement optimisé pour une pile, mais en aucune manière, vous enferme dans un serveur spécifique.
Luca vient distribué dans le cadre d'un Rubis Gemme configuré pour fonctionner sur l'asset pipeline, ou de télécharger un fichier JS.
Vous ne sont pas nécessaires à l'utilisation de Rails ou de Sinatra. Mais si vous le faites, j'ai compris beaucoup de choses utiles:
Les Outils De Développement
Avec l'aide de la Gem Rails, et Luca est CodeMirror composant en fonction de l'éditeur, vous pouvez modifier le code source de l'Luca Cadre de l'application des composants spécifiques directement dans le navigateur, à l'aide de Coffeescript. Vous verrez une rétroaction immédiate en réponse à vos modifications, avec les instances de l'effectuées objets en cours d'actualisation avec la mise à jour de prototype, et vous pouvez enregistrer vos modifications sur le disque.
Le Composant Testeur est un bac à sable pour jouer avec les composants de votre application dans l'isolement. Il vous fournit des outils pour la modification de la composante du prototype, mise en place de ses dépendances, et la configuration du composant. Le composant va re-rendre immédiatement chaque fois que vous apportez une modification. Vous pouvez afficher et modifier le balisage que le composant génère, ainsi que le CSS directement dans le navigateur et de voir vos modifications immédiatement. Cela en fait un très précieux de l'expérimentation de l'outil.
Le Composant Testeur va bientôt intégrer avec le Jasmin, vous pouvez visualiser les résultats de votre composant des tests unitaires en temps réel à mesure que vous modifiez le code de leurs
Luca est un travail en cours, mais maintient une API stable ( pas encore 1.0 ) et a été utilisé dans plusieurs grandes production des applications. C'est certainement un très opiniâtre cadre, mais je suis en train de le rendre plus modulaire. Je travaille activement sur la documentation et des échantillons de composants.
Je suis un co-auteur de Chaplin et j'ai écrit une comparaison approfondie entre les Chaplin.js et Marionette.js:
http://9elements.com/io/index.php/comparison-of-marionette-and-chaplin/
Ce n'est pas un “échange de tirs”, mais tente d'expliquer les deux approches de façon équilibrée.