Warum sollte ich Scala / Lift über Java / Spring verwenden? [geschlossen]


151

Ich weiß, dass diese Frage etwas offen ist, aber ich habe Scala / Lift als Alternative zu Java / Spring betrachtet und mich gefragt, was die wirklichen Vorteile von Scala / Lift gegenüber Scala / Lift sind. Aus meiner Sicht und Erfahrung minimieren Java Annotations und Spring den Codierungsaufwand für eine Anwendung erheblich. Verbessert Scala / Lift das?


Frage ist zu alt. Aber jetzt wäre die Frage "Warum sollte ich Scala / Play over XYX verwenden" und es gibt viele gute Gründe. Ich bin zu Play gewechselt und habe nie zurückgeschaut.
Jus12

Antworten:


113

Nehmen wir an, wir fühlen uns in Scala und Java gleichermaßen wohl und ignorieren die (großen) Sprachunterschiede, außer in Bezug auf Spring oder Lift.

Frühling und Lift sind in Bezug auf Reife und Ziele fast diametral entgegengesetzt.

  • Der Frühling ist ungefähr fünf Jahre älter als Lift
  • Der Aufzug ist monolithisch und zielt nur auf die Bahn ab. Spring ist modular aufgebaut und zielt sowohl auf Web- als auch auf "normale" Apps ab
  • Spring unterstützt eine Vielzahl von Java EE-Funktionen. Lift ignoriert das Zeug

In einem Satz ist Spring schwer und Lift leicht. Mit ausreichender Entschlossenheit und Ressourcen können Sie das auf den Kopf stellen, aber Sie würden viel von beidem brauchen .

Hier sind konkrete Unterschiede, die mir nach der Arbeit mit beiden Frameworks in den Sinn gekommen sind. Dies ist keine vollständige Liste, die ich sowieso nicht zusammenstellen kann. Genau das, was mir am interessantesten erschien ...

  1. Philosophie anzeigen

    Lift empfiehlt das Platzieren von Ansichtsmaterial in Snippet- / Aktionsmethoden. Insbesondere Snippet-Code wird mit programmgesteuert generierten Formularelementen, <div>s, <p>s usw. bestreut .

    Dies ist leistungsstark und nützlich, insbesondere da Scala über einen integrierten XML-Modus auf Sprachebene verfügt. Innerhalb von Scala-Methoden kann XML inline geschrieben werden, einschließlich variabler Bindungen in geschweiften Klammern. Dies kann für sehr einfache XML-Dienste oder Modelle von Diensten von Vorteil sein. Sie können eine Reihe von HTTP-Antwortaktionen in einer prächtig knappen Datei ohne Vorlagen oder viel zugehörige Konfiguration ausführen. Der Nachteil ist die Komplexität. Je nachdem, wie weit Sie gehen, gibt es entweder eine unscharfe Trennung von Bedenken zwischen Ansicht und Logik oder keine Trennung.

    Im Gegensatz dazu erzwingt die regelmäßige Verwendung von Spring für Webanwendungen eine starke Trennung zwischen der Ansicht und allem anderen. Ich denke, Spring unterstützt mehrere Template-Engines, aber ich habe JSP nur in ernsthaften Situationen verwendet. Ein von Lift inspiriertes "Fuzzy MVC" -Design mit JSP zu machen, wäre Wahnsinn. Dies ist eine gute Sache bei größeren Projekten, bei denen die Zeit zum Lesen und Verstehen überwältigend sein kann.

  2. Objektrelationale Mapper-Auswahlmöglichkeiten

    Das eingebaute ORM von Lift ist "Mapper". Es gibt eine bevorstehende Alternative namens "Record", aber ich denke, sie wird immer noch als Pre-Alpha betrachtet. Das LiftWeb-Buch enthält Abschnitte zur Verwendung von Mapper und JPA.

    Die coole CRUDify- Funktion von Lift funktioniert nur mit Mapper (und nicht mit JPA).

    Natürlich unterstützt Spring eine Vielzahl von Standard- und / oder ausgereiften Datenbanktechnologien . Das operative Wort dort ist "unterstützt". Theoretisch können Sie mit Lift jedes Java-ORM verwenden, da Sie von Scala aus beliebigen Java-Code aufrufen können. Aber Lift unterstützt nur Mapper und (in viel geringerem Maße) JPA wirklich. Außerdem ist die Arbeit mit nicht trivialem Java-Code in Scala derzeit nicht so nahtlos, wie man es gerne hätte. Wenn Sie ein Java-ORM verwenden, werden Sie wahrscheinlich entweder überall Java- und Scala-Sammlungen verwenden oder alle Sammlungen in und aus den Java-Komponenten konvertieren.

  3. Aufbau

    Lift-Apps werden so gut wie vollständig mithilfe einer anwendungsweiten "Boot" -Klasse konfiguriert. Mit anderen Worten, die Konfiguration erfolgt über Scala-Code. Dies ist perfekt für Projekte mit kurzen Konfigurationen und wenn die Person, die die Konfiguration vornimmt, mit der Bearbeitung von Scala vertraut ist.

    Der Frühling ist in Bezug auf die Konfiguration ziemlich flexibel. Viele conf-Optionen können entweder durch XML-Konfiguration oder durch Anmerkungen gesteuert werden.

  4. Dokumentation

    Die Dokumentation von Lift ist jung. Die Dokumente von Spring sind ziemlich ausgereift. Es gibt keinen Wettbewerb.

    Da die Dokumente von Spring bereits gut organisiert und leicht zu finden sind, werde ich die Dokumente überprüfen, die ich für Lift gefunden habe. Grundsätzlich gibt es 4 Quellen für die Lift-Dokumentation: das LiftWeb-Buch , die API- Dokumente, die Google-Gruppe von LiftWeb und " Erste Schritte ". Es gibt auch eine schöne Reihe von Codebeispielen, aber ich würde sie nicht per se "Dokumentation" nennen.

    Die API-Dokumente sind unvollständig. Das LiftWeb-Buch wurde auf Bäumen veröffentlicht, ist aber auch online frei verfügbar. Es ist wirklich nützlich, obwohl mich sein entschieden didaktischer Stil manchmal irritierte. Das Tutorial ist etwas lang und der Vertrag kurz. Spring hat ein richtiges Handbuch, das Lift fehlt.

    Aber Lift hat einige schöne Beispiele. Wenn Sie den Lift-Code und den Beispielcode gut lesen können (und Scala bereits gut kennen), können Sie die Dinge in relativ kurzer Zeit erledigen.

Beide Frameworks überzeugen. Es gibt eine breite Palette von Apps, bei denen Sie entweder auswählen und gut abschneiden können.


10
Eine gute Antwort, ein Punkt, dem ich jedoch nicht zustimmen würde, ist: Frühling ist Schwergewicht. Es verfügt über ein breites Spektrum an guten APIS und erfordert bestimmte strukturelle Arbeitsmethoden, um ein gutes Ergebnis zu erzielen. Im Vergleich zu den ursprünglich ersetzten J2EE-Produkten ist es jedoch eine viel leichtere Lösung. Natürlich liegt "Leichtigkeit" im Auge des Betrachters, daher ist dies definitiv ein subjektives Argument. Nur meine 2 Cent dann.
Brian

3
Gute Antwort, sehr objektiv. Lift macht zu viele scheinbar kluge Dinge, die sehr dumm sind. Verschieben der Seitenlogik in das Backend, Mischen von HTML mit Scala-Code, was schlechter ist als das Steuern von Tags in der Seitenvorlage. Ich weiß nicht, warum sie das getan haben, vielleicht denken sie, dass Scala XML erstaunlich schnell verarbeiten muss. "The Definitive Guide to Lift" ist das schlechteste Tech-Buch, das ich je gelesen habe.
Sawyer

Ich bin mit dem Aufzug nicht so vertraut, wie ich es gerne wäre. Wie schwierig wäre es Ihrer Meinung nach, einen Wrapper für das Boot-Objekt zu erstellen, der stattdessen Einstellungen aus einer XML-Datei einliest? Mein erster Eindruck ist, dass es nicht außergewöhnlich schwierig sein würde, da Scala XML so gut wie möglich verarbeitet.
Ape-inago

Sawyer, die Tatsache, dass Sie HTML mit Scala-Code mischen können, bedeutet nicht, dass Sie müssen. Durch die intelligente Verwendung von Snippets werden HTML- und Scala-Code getrennt. Aber hey, mach weiter mit deinen Kontroll-Tags;)
Alebon

1
@ Dan, gibt es jetzt Updates, da Lift doppelt so alt ist wie zu dem Zeitpunkt, als du das zum ersten Mal geschrieben hast?
Pacerier

229

Ich muss sagen, dass ich der Antwort von Dan LaRocque überhaupt nicht zustimme.

Der Aufzug ist nicht monolithisch. Es besteht aus diskreten Elementen. J / EE-Elemente werden nicht ignoriert, es werden beispielsweise JNDI, JTA, JPA usw. unterstützt. Die Tatsache, dass Sie nicht gezwungen sind, diese Elemente von J / EE zu verwenden, ist ein starkes Indiz für den modularen Aufbau von Lift.

  • Die Ansichtsphilosophie von Lift lautet: "Lassen Sie den Entwickler entscheiden." Lift bietet einen Vorlagenmechanismus, der keinen Logikcode in der Ansicht zulässt, einen Ansichtsmechanismus, der auf der Ausführung von Scala-Code und den XML-Literalen von Scala basiert, und einen Ansichtsmechanismus, der auf Scalate basiert . Wenn Sie den XML-Vorlagenmechanismus auswählen, legen Sie fest, wie viel Markup gegebenenfalls in Ihre Geschäftslogik gehört. Die Ansichtstrennung von Lift ist stärker als alles, was Spring zu bieten hat, da Sie in den XML-Vorlagen von Lift keine Geschäftslogik ausdrücken können.
  • Lifts Ziel ↔ Die Persistenzphilosophie lautet "Lassen Sie den Entwickler entscheiden". Lift verfügt über Mapper, einen relationalen Objekt-Mapper im ActiveRecord-Stil. Es erledigt die Arbeit für kleine Projekte. Heben Sie die Unterstützung JPA an. Lift verfügt über eine Datensatzabstraktion, die das Shutteln von Objekten in und aus relationalen Datenbanken in und aus NoSQL-Speichern unterstützt (Lift bietet native Unterstützung für CouchDB und MongoDB, die Adapterebenen bestehen jedoch aus einigen hundert Codezeilen, wenn Sie also Cassandra oder möchten etwas anderes, es ist nicht viel Arbeit, es zu bekommen.) Grundsätzlich hat Lift the Web Framework keine Abhängigkeit davon, wie Objekte in einer Sitzung materialisiert werden. Ferner sind die Sitzungs- und Anforderungszyklen offen, so dass das Einfügen von Transaktions-Hooks in den Anforderungs- / Antwortzyklus einfach ist.
  • Die Philosophie von Lift lautet: "Das Serverteam muss eine Sprache kennen, nicht mehrere Sprachen." Dies bedeutet, dass die Konfiguration über Scala erfolgt. Dies bedeutet, dass wir nicht 40% der Java-Sprachkonstrukte in XML-Syntax implementieren mussten, um flexible Konfigurationsoptionen zu erstellen. Dies bedeutet, dass die Compilersyntax und der Typ die Konfigurationsdaten typüberprüft, damit Sie zur Laufzeit keine seltsamen XML-Analysen oder falsche Daten erhalten. Dies bedeutet, dass Sie keine IDEs benötigen, die die Details der von Ihnen verwendeten Anmerkungen basierend auf der von Ihnen verwendeten Bibliothek verstehen.
  • Ja, die Dokumentation von Lift ist nicht seine Stärke.

Lassen Sie mich vor diesem Hintergrund etwas über die Designphilosophie von Lift sprechen.

Ich habe Web Framework Manifesto geschrieben, bevor ich anfing, Lift zu schreiben. Lift erfüllt diese Ziele in hohem Maße und in größerem Maße als bei jedem anderen mir bekannten Webframework.

Im Kern versucht Lift, den HTTP-Anforderungs- / Antwortzyklus zu abstrahieren, anstatt Objekt-Wrapper um die HTTP-Anforderung zu platzieren. Auf praktischer Ebene bedeutet dies, dass die meisten Aktionen, die ein Benutzer ausführen kann (Senden von Formularelementen, Ausführen von Ajax usw.), durch eine GUID im Browser und eine Funktion auf dem Server dargestellt werden. Wenn die GUID als Teil einer HTTP-Anforderung angezeigt wird, wird die Funktion mit den angegebenen Parametern angewendet (aufgerufen). Da die GUIDs schwer vorherzusagen und sitzungsspezifisch sind, sind Wiederholungsangriffe und viele Parametermanipulationsangriffe mit Lift weitaus schwieriger als die meisten anderen Webframeworks, einschließlich Spring. Dies bedeutet auch, dass Entwickler produktiver sind, da sie sich auf Benutzeraktionen und die mit Benutzeraktionen verbundene Geschäftslogik konzentrieren und nicht auf das Installieren und Entpacken einer HTTP-Anforderung.

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

So einfach ist das. Da sich die friendRequest beim Erstellen der Funktion im Bereich befindet, wird die Funktion über dem Bereich geschlossen. Es ist nicht erforderlich, den Primärschlüssel der Freundschaftsanforderung verfügbar zu machen oder etwas anderes zu tun. Definieren Sie einfach den Text der Schaltfläche (it kann lokalisiert werden oder es kann aus einer XHTML-Vorlage gezogen werden oder es kann aus einer lokalisierten Vorlage gezogen werden) und die Funktion, die ausgeführt werden soll, wenn die Taste gedrückt wird. Lift kümmert sich um das Zuweisen der GUID, das Einrichten des Ajax-Aufrufs (über jQuery oder YUI, und ja, Sie können Ihre eigene bevorzugte JavaScript-Bibliothek hinzufügen), das automatische Wiederholen mit Back-Offs, das Vermeiden von Verbindungsmangel durch das Einreihen von Ajax-Anforderungen usw.

Ein großer Unterschied zwischen Lift und Spring besteht darin, dass die mit der Funktion verbundene GUID-Philosophie von Lift den doppelten Vorteil einer viel besseren Sicherheit und einer viel besseren Entwicklerproduktivität bietet. Die GUID -> Funktionszuordnung hat sich als sehr dauerhaft erwiesen. Das gleiche Konstrukt funktioniert für normale Formen, Ajax, Kometen, mehrseitige Assistenten usw.

Das nächste Kernstück von Lift besteht darin, die Abstraktionen auf hoher Ebene so lange wie möglich beizubehalten. Auf der Seite der Seitengenerierung bedeutet dies, dass die Seite als XHTML-Elemente erstellt und bis kurz vor dem Streaming der Antwort als XHTML beibehalten wird. Die Vorteile sind die Beständigkeit gegen Cross-Site-Scripting-Fehler, die Möglichkeit, CSS-Tags in den Kopf und Skripte an den unteren Rand der Seite zu verschieben, nachdem die Seite erstellt wurde, und die Möglichkeit, die Seite basierend auf dem Zielbrowser neu zu schreiben. Auf der Eingabeseite können URLs neu geschrieben werden, um Parameter (sowohl Abfrage- als auch Pfadparameter) typsicher zu extrahieren. Hochwertige, sicherheitsgeprüfte Daten können sehr früh im Anforderungszyklus verarbeitet werden. So definieren Sie beispielsweise die Wartung einer REST-Anforderung:

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

Mithilfe des in Scala integrierten Mustervergleichs stimmen wir eine eingehende Anforderung ab, extrahieren den dritten Teil des Pfads und ermitteln den Benutzer, der diesem Wert entspricht, und wenden sogar Zugriffssteuerungsprüfungen an (verfügt die aktuelle Sitzung oder Anforderung über Berechtigungen für den Zugriff auf die angegebene Anforderung? Benutzerdatensatz). Wenn die Benutzerinstanz die Anwendungslogik erreicht, wird sie überprüft.

Mit diesen beiden Kernstücken hat Lift einen enormen Sicherheitsvorteil. Um Ihnen eine Vorstellung von der Größe der Sicherheit von Lift zu geben, die den Funktionen nicht im Wege steht, hat Rasmus Lerdorg, der die Sicherheit für Yahoo! hatte folgendes über FourSquare (eine der Lift-Poster-Child-Sites) zu sagen:

Vier Sterne für @foursquare - 1. Site in einer Weile Ich habe mir genau angesehen, dass es kein einziges Sicherheitsproblem gab (das ich finden konnte) - http://twitter.com/rasmus/status/5929904263

Zu dieser Zeit hatte FourSquare einen Ingenieur, der an dem Code arbeitete (nicht, dass @harryh kein Supergenie ist), und sein Hauptaugenmerk lag darauf, die PHP-Version von FourSquare neu zu schreiben, während er mit der wöchentlichen Verdoppelung des Datenverkehrs fertig wurde.

Der letzte Teil des Sicherheitsfokus von Lift ist SiteMap. Es ist eine einheitliche Zugriffskontrolle, Site-Navigation und ein Menüsystem. Der Entwickler definiert die Zugriffssteuerungsregeln für jede Seite mithilfe von Scala-Code (z. B. If(User.loggedIn _)oder If(User.superUser _)). Diese Zugriffssteuerungsregeln werden angewendet, bevor mit dem Rendern einer Seite begonnen wird. Dies ähnelt Spring Security, mit der Ausnahme, dass es vom Beginn des Projekts an eingebunden ist und die Zugriffssteuerungsregeln mit dem Rest der Anwendung vereinheitlicht werden, sodass Sie keinen Prozess zum Aktualisieren der Sicherheitsregeln in XML benötigen, wenn die URLs verwendet werden Änderung oder die Methoden, die die Zugriffssteuerung berechnen, ändern sich.

Zusammenfassend lässt sich sagen, dass die Designphilosophie von Lift Ihnen die Vorteile einer integrierten Zugriffskontrolle, Widerstand gegen die Top-10-Sicherheitslücken von OWASP, eine viel bessere Ajax-Unterstützung und eine viel höhere Entwicklerproduktivität als Spring bietet.

Lift bietet Ihnen aber auch die beste Comet-Unterstützung für jedes Webframework. Aus diesem Grund hat sich Novell für Lift entschieden, um sein Pulse-Produkt mit Strom zu versorgen. Novell sagt Folgendes zu Lift:

Lift ist eine Art Web-Framework, mit dem Sie sich als Entwickler auf das Gesamtbild konzentrieren können. Starke, ausdrucksstarke Eingaben und übergeordnete Funktionen wie die integrierte Comet-Unterstützung ermöglichen es Ihnen, sich auf Innovationen anstatt auf die Installation zu konzentrieren. Das Erstellen einer umfangreichen Echtzeit-Webanwendung wie Novell Pulse erfordert ein Framework mit der Leistung von Lift unter der Decke.

Lift ist also nicht nur ein weiteres MVC-Framework für mich. Es ist ein Framework, das einige grundlegende Designprinzipien enthält, die sehr gut ausgereift sind. Es ist ein Framework, das die doppelten Vorteile von Sicherheit und Entwicklerproduktivität bietet. Lift ist ein Framework, das in Ebenen aufgebaut ist und dem Entwickler die richtigen Auswahlmöglichkeiten basierend auf seinen Anforderungen bietet ... Auswahlmöglichkeiten für die Ansichtsgenerierung, Auswahlmöglichkeiten für die Persistenz usw.

Scala und Lift bieten Entwicklern eine viel bessere Erfahrung als die Mischung aus XML, Anmerkungen und anderen Redewendungen, aus denen Spring besteht.


2
Eine archivierte Version von blog.lostlake.org/index.php?/archives/16-Web-Framework-Manifesto.html ist abrufbar unter replay.web.archive.org/20070220231839/http://blog.lostlake.org/...
Alan Hecht

1
Sie hatten mich bei MongoDB native Unterstützung ... Ich bin in
Eran Medan

8
Ich schreibe seit Mitte der 90er Jahre Webapps. Ich habe Perl, Java, Seam, JSP und viele andere verwendet. Jeder, den ich kenne, der Spring verwendet, beklagt sich über die Schwierigkeit, die richtigen Konfigurationen und Abhängigkeiten zu finden, über Albträume usw. Ich habe vor einigen Wochen angefangen, Lift für ein Projekt zu verwenden, und bin absolut erstaunt. Es ist das allererste Framework (und die erste Sprache), die ich verwendet habe, wenn die Dinge fast ohne Aufwand funktionieren. Ich habe bisher Dutzende von Funktionen in meine App geschrieben und bin immer wieder erstaunt, wie schnell ich es richtig mache ... selbst mit blöden Dokumenten und einem begrenzten Verständnis von Scala. Sehen heißt glauben.
Tony K.

@TonyK.: Spring ist sicherlich schwer, aber es zahlt sich aus, wenn die Web-App viel später geändert wird, da es viel einfacher ist, Spring zu überarbeiten / zu erweitern. IMHO, es kommt darauf an. Ich habe einige andere Frameworks wie Grails für kleine Projekte verwendet und ich denke, es ist perfekt dafür - aber für etwas, das sich viel später ändern wird, würde ich mich für Spring entscheiden.
Hoàng Long

7
@ HoàngLong Es gibt viele Ansätze für die Schwierigkeit der Softwareentwicklung. Ich sage nur meine Erfahrung: Java zeigt sein Alter als Sprache, ebenso wie die darauf aufbauenden Frameworks. Es ist Zeit, sich zu Dingen zu entwickeln, die ausdrucksvoller und kraftvoller sind, ohne den Wahnsinn von Boilerplate und Konfiguration.
Tony K.

11

Ich würde Ihnen empfehlen, das Play Framework zu überprüfen. Es enthält einige sehr interessante Ideen und unterstützt die Entwicklung in Java und Scala


2
Ich habe Play ausgecheckt. Ich habe nichts außer dem eingebauten Nachladen der Klasse gesehen, um es zu empfehlen, und mit der kostenlosen Scala JRebel-Lizenz erhalten Sie das mit Lift.
Tony K.

10

Nur zum Spaß. Und um neue Programmieransätze zu erlernen.


10

Ich habe mich intensiv mit der Verwendung von Lift für ein aktuelles Webprojekt befasst und war kein großer Fan von Spring MVC. Ich habe nicht die neuesten Versionen verwendet, aber die früheren Versionen von Spring MVC haben Sie dazu gebracht, durch viele Rahmen zu springen, um eine Webanwendung zum Laufen zu bringen. Ich war fast mit Lift verkauft, bis ich sah, dass Lift sehr sitzungsabhängig sein kann und "Sticky Sessions" erfordern würde, um richtig zu funktionieren. Auszug aus http://exploring.liftweb.net/master/index-9.html#sec:Session-Management

Bis es eine Standard-Sitzungsreplikationstechnologie gibt, können Sie Ihre Anwendung weiterhin mit „Sticky Session“ gruppieren. Dies bedeutet, dass alle Anforderungen, die sich auf eine HTTP-Sitzung beziehen, von demselben Clusterknoten verarbeitet werden müssen

Sobald eine Sitzung erforderlich ist, muss der Benutzer an diesen Knoten gebunden sein. Dies schafft die Notwendigkeit eines intelligenten Lastausgleichs und wirkt sich auf die Skalierung aus, wodurch verhindert wurde, dass Lift in meinem Fall eine Lösung darstellt. Am Ende habe ich http://www.playframework.org/ ausgewählt und war sehr zufrieden. Das Spiel war bisher stabil und zuverlässig und es war sehr einfach, damit zu arbeiten.


7

Ich bin nicht aus Java zu Lift und Scala gekommen, daher ist dies keine persönliche Erfahrung, aber ich weiß, dass viele Lift-Entwickler Scala als eine viel präzisere und effizientere Sprache als Java betrachten.


3

Das Erweitern Ihres Wissens ist immer ein lohnendes Unterfangen :) Ich habe gerade angefangen, Scala zu lernen. Es beeinflusst, wie ich normales Java schreibe, und ich kann sagen, dass es bisher sehr nützlich war.


3

Ich hasse es, deine Welt komplett für eine Schleife zu werfen. Aber Sie können Scala, Java, Lift, Spring in einer Anwendung verwenden und es ist kein Problem.


0

Meiner bescheidenen Meinung nach kommt es auf die Vorstellungskraft an.

Angenommen, Sie möchten eine App schreiben. Wenn Sie ein anständiger Entwickler sind, sollte die App bereits in Ihrem Kopf erstellt werden. Der nächste Schritt besteht darin, herauszufinden, wie es durch Code funktioniert. Dazu müssen Sie die imaginäre App durch eine Funktion führen, die sie in eine reale App übersetzt. Diese Funktion ist eine Programmiersprache. So

Real app = programming language (imagined app)

Die Wahl der Sprache ist also wichtig. So ist der Rahmen. Es gibt hier eine Menge kluger Leute, die Sie beraten, was Sie wählen sollen, aber letztendlich sollte die Sprache / der Rahmen, der Ihre Vorstellungskraft am besten übersetzt, Ihre Wahl sein. Also Prototyp mit beiden und treffen Sie Ihre Wahl.

Ich lerne langsam Scala und Lift und liebe es.


0

Das Hauptproblem ist jedoch, dass wir die Feder nicht mit dem Auftrieb vergleichen können. Lift wird grundsätzlich als UI-Framework und Spring als DI-Framework verwendet.
Wenn Sie eine Web-App entwickeln, die über so viel Backend verfügt, können Sie Lift verwenden.
Aber wenn Ihre sich entwickelnde Web-App ein Serien-Backend hat und Sie definitiv zum Frühling müssen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.