151 votes

Pourquoi devrais-je utiliser Scala/Lift sur Java/printemps ?

Je sais que cette question est un peu ouverte mais j’ai été regarder Scala/Lift comme une alternative à Java/printemps et je me demande quels sont les avantages réels que Scala/Lift a au-dessus de lui. De mon point de vue et de l’expérience, les Annotations de Java et le printemps vraiment réduit au minimum la quantité de codage que vous avez à faire pour une application. Améliore-t-il la Scala/Lift sur qui ?

229voto

David Pollak Points 5756

Je dois dire que je suis en total désaccord avec Dan LaRocque réponse.

L'ascenseur n'est pas monolithique. Il est composé d'éléments discrets. Il n'ignore pas J/EE éléments, il en charge l'aime de JNDI, JTA, JPA, etc. Le fait que vous n'êtes pas forcé de utilise ces éléments de J/EE est une forte indication de l'Ascenseur est de conception modulaire.

  • Ascenseur de vue de la philosophie est de "permettre au développeur de décider." Ascenseur offre un mécanisme de template qui ne permet pas à la logique de code dans la vue, un point de vue mécanisme basé sur l'exécution de code Scala et de la Scala de littéraux XML, et d'un point de vue mécanisme basé sur Scalate. Si vous choisissez le XML template mécanisme, puis vous décidez combien, le cas échéant, de la majoration appartient dans une logique d'entreprise. L'ascenseur vue de séparation est plus forte que ce Printemps a à offrir, parce que vous ne pouvez pas exprimer toute la logique métier dans l'Ascenseur de modèles XML.
  • Soulevez l'Objet ↔ Persistance de la philosophie est de "permettre au développeur de décider." Ascenseur a Mappeur qui est un ActiveRecord style object relational mapper. Il fait le travail pour les petits projets. Support de levage JPA. Ascenseur a un Record d'abstraction qui prend en charge la navette des objets dans et hors de bases de données relationnelles et NoSQL magasins (Ascenseur comprend la prise en charge native pour CouchDB et MongoDB, mais l'adaptateur couches sont à quelques centaines de lignes de code, donc si vous voulez Cassandra ou quelque chose d'autre, ce n'est pas beaucoup de travail pour l'obtenir.) Fondamentalement, Soulevez le Framework Web n'a pas de dépendance sur la manière dont les objets sont matérialisées dans une session. En outre, la session et demande cycles sont ouverts tels que l'insertion de la transaction s'attache à la demande/réponse de cycle est simple.
  • Soulevez la philosophie est "le serveur de l'équipe a besoin de connaître une langue, et non pas plusieurs langues." Cela signifie que la configuration se fait via Scala. Cela signifie que nous n'avons pas eu à mettre en œuvre 40% de Java constructions de langage dans la syntaxe XML pour créer des options de configuration flexibles. Cela signifie que le compilateur de la syntaxe et vérifie les données de configuration afin de ne pas faire tout bizarre d'analyse XML ou des données incorrectes lors de l'exécution. Signifie que vous n'avez pas à avoir IDEs que de comprendre les particularités de les annotations que vous utilisez basé sur la bibliothèque que vous utilisez.
  • Yep, Soulevez la documentation n'est pas son point fort.

Avec le ci-dessus étant dit, permettez-moi de vous parler un peu de l'Ascenseur de la philosophie de design.

J'ai écrit Framework Web Manifeste avant j'ai commencé à écrire Ascenseur. À un grand degré, et à un degré plus élevé que ce qui est vrai pour n'importe quel autre framework web que je connais, Ascenseur répond à ces objectifs.

Ascenseur, à sa base, cherche à s'abstraire de la requête/réponse HTTP cycle plutôt que de placer l'objet wrappers autour de la Requête HTTP. Au niveau pratique, cela signifie que la plupart de toute action que l'utilisateur peut prendre (et soumettre des éléments de formulaire, de faire de l'Ajax, etc.) est représenté par un GUID dans le navigateur et d'une fonction sur le serveur. Lorsque le GUID est présenté dans le cadre d'une requête HTTP, la fonction est appliquée (appelé) avec les paramètres fournis. Parce que les Guid sont difficiles à prévoir et à la session de l', les attaques de relecture et de nombreux paramètre de falsification sont beaucoup plus difficile avec Ascenseur que la plupart des autres frameworks web, y compris de Printemps. Il signifie également que les développeurs sont plus productifs, car ils se concentrent sur les actions de l'utilisateur et la logique d'entreprise associés aux actions de l'utilisateur plutôt que de la plomberie, de l'emballage et le déballage d'une requête HTTP. Par exemple, le code pour l'acceptation ou le rejet d'une FourSquare demande d'ami:

ajaxButton("Accept", () => {request.accept.save; 
                            SetHtml("acceptrejectspan", <span/>}) ++ 
ajaxButton("Reject", () => {request.reject.save; 
                            SetHtml("acceptrejectspan", <span/>})

C'est aussi simple que cela. Parce que le friendRequest est dans le champ d'application lors de la création de la fonction, la fonction se ferme sur le champ... il n'y a pas besoin d'exposer la clé primaire de la demande d'ami, ou faire autre chose... il suffit de définir le texte du bouton (il peut être localisée ou il peut être tiré à partir d'un modèle XHTML ou il peut être tiré à partir d'un localisée modèle) et la fonction à exécuter lorsque le bouton est enfoncé. Ascenseur prend en charge l'attribution du GUID, la configuration de l'appel Ajax (via jQuery ou YUI, et oui, vous pouvez ajouter vos propres favoris de la bibliothèque JavaScript), en faisant des tentatives automatiques avec en arrière-offs, en évitant de connexion de la famine mise en file d'attente des requêtes Ajax, etc.

Ainsi, une grande différence entre l'Ascenseur et le Printemps est que l'Ascenseur de la philosophie de GUID associé avec la fonction qui a le double avantage de beaucoup plus de sécurité et de beaucoup améliorer la productivité des développeurs. GUID> Function association s'est révélée être très durable... même construire des ouvrages pour les formes normales, ajax, comète, multi-page assistants, etc.

Le prochain morceau de l'Ascenseur, est de conserver le haut niveau des abstractions autour depuis aussi longtemps que possible. Sur la page de génération de côté, cela signifie que la construction de la page XHTML éléments et de garder la page XHTML jusqu'à ce que juste avant la diffusion de la réponse. Les avantages sont la résistance à la cross site scripting erreurs, la possibilité de déplacer CSS des balises pour la tête et les scripts en bas de la page après la page a été composée, et la possibilité de réécrire la page basée sur le navigateur cible. Sur le côté de l'entrée, l'Url peut être ré-écrit pour extraire les paramètres (de la requête et du chemin de paramètres) dans un type de la sécurité, de haut niveau, objet de contrôles de sécurité des données sont disponibles pour le traitement très tôt dans le cycle de la demande. Par exemple, voici comment définir l'entretien d'un RESTE de demande:

  serve {
    case "api" :: "user" :: AsUser(user) :: _ XmlGet _ => <b>{user.name}</b>
    case "api" :: "user" :: AsUser(user) :: _ JsonGet _ => JStr(user.name)
  }

Utilisation de Scala intégré de correspondance, nous match la réception d'une demande, extrait de la troisième partie du chemin et obtenir de l'Utilisateur qui correspond à cette valeur, et même appliquer le contrôle d'accès de contrôle (la session en cours ou une demande de droits d'accès de l'Utilisateur enregistrement). Donc, au moment où l'instance Utilisateur frappe la logique de l'application, il est passés au crible.

Avec ces deux pièces, Ascenseur dispose d'un énorme avantage en termes de sécurité. Pour vous donner une idée de l'ampleur de l'Ascenseur de sécurité que ne pas obtenir de la manière de fonctionnalités, Rasmus Lerdorg qui a fait de la sécurité de Yahoo! avait ceci à dire au sujet de FourSquare (l'un de l'Ascenseur-affiche les sites enfants):

Quatre étoiles pour @foursquare - 1er site d'un moment, j'ai pris un bon coup d'oeil à qui n'a pas eu un seul problème de sécurité (que j'ai pu trouver) -- http://twitter.com/rasmus/status/5929904263

À l'époque, FourSquare a un ingénieur qui travaille sur le code (pas que @harryh n'est pas un super-génie) et son principal objectif était de ré-écriture de la version de PHP de FourSquare tout en faisant face à l'hebdomadaire trafic doublé.

La dernière partie de l'Ascenseur de sécurité accent est mis SiteMap. C'est un système unifié de contrôle d'accès, la navigation sur le site, et le système de menu. Le développeur définit les règles de contrôle d'accès pour chaque page à l'aide de la Scala de code (par exemple, If(User.loggedIn _) ou If(User.superUser _)) et ceux règles de contrôle d'accès sont appliquées avant tout le rendu de la page commence. C'est un peu comme le Printemps de Sécurité, sauf que c'est cuit dès le début du projet et les règles de contrôle d'accès sont unifiés avec le reste de l'application, de sorte que vous n'avez pas besoin de processus de mise à jour des règles de sécurité en XML lors de l'Url de modifier ou les méthodes permettant de calculer le changement de contrôle d'accès.

Pour résumer jusqu'à présent, l'Ascenseur de la philosophie de design vous donne les avantages de la boulangerie dans le contrôle d'accès, la résistance à l'OWASP top 10 des vulnérabilités de sécurité, beaucoup mieux l'Ajax et beaucoup plus élevé de la productivité du développeur que de Printemps.

Mais l'Ascenseur vous offre également le meilleur de la Comète de support de cadre autour. C'est pourquoi Novell a choisi de Levage à la puissance de leurs Impulsions produit et voici ce que Novell a à dire à propos de l'Ascenseur:

L'ascenseur est le genre de framework web qui vous avez la possibilité en tant que développeur de se concentrer sur la grande image. Fort, expressif de frappe et niveau supérieur fonctionnalités comme la construit-dans la Comète de soutien vous permettent de l'accent sur l'innovation au lieu de la la plomberie. La construction d'un riche, en temps réel application web comme Novell Impulsion besoin d'un cadre, avec la puissance de Ascenseur sous les couvertures.

Donc, l'Ascenseur n'est pas juste un autre moi-trop framework MVC. C'est un cadre qui a des principes de base de la conception derrière qui ont mûri très bien. C'est un cadre qui donne le double des avantages de la sécurité et de la productivité du développeur. L'ascenseur est un cadre qui est construit en couches et permet au développeur de le bon choix en fonction de leurs besoins... choix pour afficher génération, les choix de la persistance, etc.

Scala et Ascenseur de donner aux développeurs une bien meilleure expérience que le mélange de XML, les annotations et les autres idiomes qui composent le Printemps.

113voto

Dan LaRocque Points 2923

Supposons que nous sommes aussi à l'aise en Scala et Java, et d'ignorer les (énormes) différences de langue, sauf qu'elles se rapportent au Printemps ou à l'Ascenseur.

Le printemps et l'Ascenseur sont presque diamétralement opposées en termes de maturité et d'objectifs.

  • Printemps est d'environ cinq ans de plus que Ascenseur
  • L'ascenseur est monolithique et ne cible que le web; le Printemps est modulaire et s'adresse à la fois web et "régulière" apps
  • Le printemps prend en charge une multitude de Java EE; Ascenseur ignore ce genre de choses

Dans une phrase, le Printemps est lourd et l'Ascenseur est léger. Avec suffisamment de détermination et de ressources, vous pouvez vous tourner que sur sa tête, mais vous auriez besoin d'un lot de deux.

Voici béton différences coincé dans mon esprit après avoir travaillé avec les deux cadres. Cette liste n'est pas exhaustive, je ne peux pas compiler de toute façon. Juste ce qui semblait le plus intéressant pour moi...

  1. Vue de la philosophie

    Ascenseur encourage la passation de certains matériaux dans l'extrait de code/les méthodes d'action. Extrait de code va surtout être arrosé avec de l'généré par programmation les éléments de formulaire, <div>s, <p>s, etc.

    C'est puissant et utile, surtout depuis Scala a un builtin langage XML de niveau mode. On peut écrire du XML inline dans Scala méthodes, y compris la variable liaisons entre accolades. Cela peut être agréable pour XML très simple des services ou des maquettes de services, vous pouvez vous énervez une suite de la réponse HTTP actions tout en un magnifiquement laconique fichier, sans modèles ou bien la configuration du standard. L'inconvénient est la complexité. En fonction de la distance à parcourir, il y a soit un floue la séparation des préoccupations entre la vue et la logique, ou pas de séparation.

    En revanche, l'utilisation régulière de Printemps pour les webapps applique une forte séparation entre la vue et tout le reste. Je pense que le Printemps prend en charge plusieurs moteurs de template, mais je ne l'ai utilisé JSP dans quelque chose de sérieux. Faire un Ascenseur inspiré de "flou MVC" avec JSP serait de la folie. C'est une bonne chose sur les grands projets de, où le temps de lire et de comprendre peut être écrasante.

  2. Object-Relational Mapper Choix

    L'ascenseur builtin ORM est "Mapper". Il y a une prochaine alternative appelée "Enregistrement", mais je pense que c'est encore considéré comme pré-alpha. Le LiftWeb Livre contient des sections sur l'utilisation de deux Mappeur et JPA.

    L'ascenseur CRUDify caractéristique, fraîche comme il est, ne fonctionne qu'avec Mappeur (et pas JPA).

    Bien sûr, le Printemps prend en charge une panoplie de la norme et/ou de maturité technologies de base de données. Le mot clé est "soutiens". En théorie, vous pouvez utiliser n'importe quel Java ORM avec Ascenseur, puisque vous pouvez appeler arbitraire de code Java à partir de la Scala. Mais Soulevez seulement supporte vraiment Mappeur et (dans une moindre mesure) JPA. Aussi, travailler avec des non-triviale de code Java dans la Scala est pas aussi homogène qu'on le souhaiterait; à l'aide d'un Java ORM, vous trouverez probablement vous-même, soit à l'aide de Java et Scala collections partout ou la conversion de toutes les collections dans et hors de l'composants Java.

  3. Configuration

    Soulevez les applications sont configurées assez bien entièrement à travers une méthode d'une application à l'échelle de "Boot" de la classe. En d'autres termes, la config se fait par le biais de la Scala de code. C'est parfait pour les projets avec une brève configurations, et lorsque la personne chargée de la configuration est à l'aise édition Scala.

    Le printemps est assez souple en termes de configuration. Beaucoup de conf options peut être actionné soit par le biais de configuration XML ou des annotations.

  4. La Documentation

    L'ascenseur de la documentation est jeune. Le printemps docs sont assez matures. Il n'y a pas de concours.

    Depuis le Printemps docs sont déjà bien organisé et facile à trouver, je vais examiner les docs que j'ai trouvé pour l'Ascenseur. Il y a essentiellement 4 sources de l'Ascenseur de la documentation: la LiftWeb Livre, l' API Docs, LiftWeb du groupe Google, et de "prise en main". Il y a aussi une belle suite d'exemples de code, mais je ne les appelez pas "documentation" en soi.

    L'API docs sont incomplètes. Le LiftWeb Livre a été publié sur les arbres, mais il est aussi disponible gratuitement en ligne. Il est vraiment utile, bien que son résolument didactique m'énervait à la fois. C'est un peu long sur tutoriel et court sur le contrat. Le printemps est un bon manuel, qui lèvent manque.

    Mais Soulevez une belle série d'exemples. Si vous êtes à l'aise à la lecture de l'Ascenseur code et un exemple de code (et vous savez Scala bien déjà), vous pouvez travailler en assez peu de temps.

Les deux cadres sont irrésistibles. Il y a une large gamme d'applications où vous pouvez choisir et de bien faire.

11voto

IPC Points 134

Je recommande que vous vérifiiez jouez cadre, il a des idées très intéressantes et appuie le développement en Java et Scala

10voto

Roman Points 21807

Juste pour le plaisir. Et dans un souci d’apprentissage de nouvel approches de programmation.

10voto

mguymon Points 4527

Je vous regardé dans l'aide de l'Ascenseur d'un récent projet web, n'étant pas un grand fan de Spring MVC. Je n'ai pas utilisé les dernières versions, mais les versions antérieures de Spring MVC, faites-vous passer à travers beaucoup de cerceaux pour obtenir une application web en cours d'exécution. J'ai presque vendu sur l'Ascenseur jusqu'à ce que j'ai vu que l'Ascenseur peut être très dépendante de la session et aurait besoin d'un pense-bête sessions de " travailler correctement. Extrait de http://exploring.liftweb.net/master/index-9.html#sec:Session-Management

Jusqu'à il y a une session standard de la technologie de réplication, vous pouvez toujours cluster vous demande de l'aide "collante session". Cette ame que tous les les demandes relatives à une session HTTP doit être traitée par le même nœud de cluster

Pour une fois qu'une Session est nécessaire, l'utilisateur devrait être broches vers ce nœud. Cela crée le besoin pour l'intelligent d'équilibrage de la charge et de la touche de mise à l'échelle, ce qui a empêché Ascenseur d'être une solution dans mon cas. J'ai fini la sélection http://www.playframework.org/ et ont été très heureux. Le jeu a été stable et fiable jusqu'à présent et il est très facile de travailler avec.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X