scala und lift
DESCRIPTION
Slides of my first Tech Talk at adesso AG, Berlin.TRANSCRIPT
![Page 1: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/1.jpg)
09.04.2023
Scala und LiftFelix Müller
![Page 2: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/2.jpg)
09.04.2023 Scala und Lift2
Mein Background
► 7 Jahre Java, 2 Jahre C# und andere Sprachen
► 4 Monate Scala
► 3 Monate Lift
► Studentischer Mitarbeiter
► Bachelorarbeit bei adesso zum Thema: „Vergleich des Scala Web-Frameworks Lift mit dem Java EE Programmiermodell “
► Twitter: @fmueller_bln
► Mail: [email protected]
![Page 3: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/3.jpg)
09.04.2023 Scala und Lift3
Erwartungen und Ziele
Eure Erwartungen
► Scala sehen und verstehen
► Feeling für Scala entwickeln
► Ideen für die Anwendung von Scala bekommen
► Lift kennenlernen
► Einsatzszenarien für Lift erfahren
Meine Ziele
► eure Erwartungen erfüllen ;-)
► den Spaß an Scala vermitteln
► praktische Einführung in Scala geben
![Page 4: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/4.jpg)
09.04.2023 Scala und Lift4
Agenda
Scala
Lift
Ausblick
![Page 5: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/5.jpg)
09.04.2023
ScalaEine ausführliche Einführung
![Page 6: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/6.jpg)
09.04.2023 Scala und Lift6
Agenda – Scala
Was, warum und wo?
Einführung in die Sprache
Scala im Vergleich zu Java
Beispielanwendung
Tool Chain
Fazit
![Page 7: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/7.jpg)
09.04.2023 Scala und Lift7
Was ist Scala?
► eine objektfunktionale Programmiersprache
► Programmiersprache für die JVM (und .Net)
► 2003 in Version 1 veröffentlicht aktuell: 2.9
► ursprünglich akademischer Kontext: entwickelt an École polytechnique fédérale de Lausanne
► seit Version 2.9: Enterprise Kontext durch Typesafe (Martin Odersky, James Gosling, Doug Lea, Heiko Seeberger u.a.)
Martin Odersky,Scala Erfinder
Top Java Ambassador,JAX Innovation Awards 2011
![Page 8: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/8.jpg)
09.04.2023 Scala und Lift8
Was ist Scala?
Scala ist…
► vollständig objektorientiert, funktional und imperativ.
► eine Skript- sowie moderne Applikationssprache.
► interoperabel mit Java und ein aufgeräumtes Java.
► ein Toolkit zum Erstellen von eigenen Sprachen (DSLs).
► das was Java schon lange sein sollte, aber vielleicht erst in 10 Jahren ist.
![Page 9: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/9.jpg)
09.04.2023 Scala und Lift9
Was ist Scala?
Was kann man mit Scala?
► Beliebige Problemstellungen ausdrücken und per Typsystem prüfen
► Für jeden Anwendungsfall einen optimalen Kontext schaffen
► Vorhandenen Code zu jeder beliebigen Zeit flexibel und sicher erweitern
► Direkt auf der JVM aufsetzen und beliebige Java-Libraries nutzen
► Einfache Aufgaben erledigen, komplexe einfach machen
► Mit den Aufgaben und Anforderungen wachsen Scalable
![Page 10: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/10.jpg)
09.04.2023 Scala und Lift10
Warum Scala?
Entwicklersicht
► statisch typisierte Sprache mit vielen Vorteilen von dynamisch typisierten
► keine Java-Krücken, aber die reiche Spielwiese von Java (Libraries)
► „Jedes Jahr eine neue Sprache“ (Pragmatic Programmers)
► („Weil wir es können…“)
Managementsicht
► weniger Code weniger Fehler weniger Aufwand
► „Faster Time to Market“
► 100 % Java Kompatibilität Integration mit bestehender Codebasis
► Attract smarter programmer
![Page 11: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/11.jpg)
09.04.2023 Scala und Lift11
Warum Scala?
Java Scala Groovy JRuby Clojure
Typisierung statisch statisch dynamisch dynamisch dynamisch
Paradigma OO OO/FP OO OO FP
► Vergleich der wichtigsten JVM-Sprachen
![Page 12: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/12.jpg)
09.04.2023 Scala und Lift12
Warum Scala?
Java Scala Groovy JRuby Clojure
Typisierung statisch statisch dynamisch dynamisch dynamisch
Paradigma OO OO/FP OO OO FP
► Vergleich der wichtigsten JVM-Sprachen
![Page 13: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/13.jpg)
09.04.2023 Scala und Lift13
Warum Scala?
► Stackoverflow Rankings als Relevanzindikator (Stand: 5. Juli 2011)
Tag Anzahl Fragen mit dem Tag
java 136920
scala 4635
groovy 2388
clojure 1742
jruby 685
![Page 14: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/14.jpg)
09.04.2023 Scala und Lift14
Wo wird Scala eingesetzt?
![Page 15: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/15.jpg)
09.04.2023 Scala und Lift15
Hands on! Spracheinführung in Scala
► Deklaration und Definition von Werten, Variablen, Methoden und Funktionen
val meaningOfLife: Int = 42 // immutablevar maybeImportantNumber: Double = 3.14 // mutable
// Methodedef printNumber(number: Int) { println("Number: " + number)}
// Funktiondef incNumber(number: Int) : Int = { number + 1 // entspricht: number.+(1)}
printNumber(meaningOfLife)printNumber(incNumber(meaningOfLife))
![Page 16: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/16.jpg)
09.04.2023 Scala und Lift16
Typinferenz
► Viele Typangaben sind überflüssig. Der Compiler leitet sie eh selbst her!
val meaningOfLife: Int = 42 // immutablevar maybeImportantNumber: Double = 3.14 // mutable
// Methodedef printNumber(number: Int) { println("Number: " + number)}
// Funktiondef incNumber(number: Int) : Int = { number + 1 // entspricht: number.+(1)}
printNumber(meaningOfLife)printNumber(incNumber(meaningOfLife))
![Page 17: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/17.jpg)
09.04.2023 Scala und Lift17
Typinferenz
► In der Tat: die meisten Typangaben können entfallen.
val meaningOfLife = 42 // immutablevar maybeImportantNumber = 3.14 // mutable
// Methodedef printNumber(number: Int) { println("Number: " + number)}
// Funktiondef incNumber(number: Int) = { number + 1 // entspricht: number.+(1)}
printNumber(meaningOfLife)printNumber(incNumber(meaningOfLife))
![Page 18: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/18.jpg)
09.04.2023 Scala und Lift18
Klassen und Objekte
► Ihr kommt nicht drumrum: ein HelloWorld-Beispiel, aber ein schönes
// einfache Scala Klasse, ist immutable// Konstruktor und “Getter” werden automatisch generiertclass Person(val name: String, val surname: String)
// greeting ist ein privater Wert, kein Zugriff von außenclass HelloWorld(greeting: String) {
def sayHelloTo(p: Person) = println(greeting+p.name)}
// Ausgabe: Hallo Felixval felix = new Person("Felix", "Müller")new HelloWorld("Hallo ").sayHelloTo(felix)
![Page 19: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/19.jpg)
09.04.2023 Scala und Lift19
Klassen und Objekte
► Zur Übersicht: Umwandlung von Klasse HelloWorld zum Objekt
// einfache Scala Klasse, ist immutable// Konstruktor und “Getter” werden automatisch generiertclass Person(val name: String, val surname: String)
// greeting ist ein privater Wert, kein Zugriff von außenclass HelloWorld(greeting: String) {
def sayHelloTo(p: Person) = println(greeting+p.name)}
// Ausgabe: Hallo Felixval felix = new Person("Felix", "Müller")new HelloWorld("Hallo ").sayHelloTo(felix)
![Page 20: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/20.jpg)
09.04.2023 Scala und Lift20
Klassen und Objekte
► Jetzt ist HelloWorld ein Singleton Objekt Scalas Ersatz für Java‘s Statics
// einfache Scala Klasse, ist immutable// Konstruktor und “Getter” werden automatisch generiertclass Person(val name: String, val surname: String)
object HelloWorld {
// greeting ist public (Standard-Scope in Scala) val greeting = "Hallo " def sayHelloTo(p: Person) = println(greeting+p.name)}
// Ausgabe: Hallo Felixval felix = new Person("Felix", "Müller")HelloWorld.sayHelloTo(felix)
![Page 21: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/21.jpg)
09.04.2023 Scala und Lift21
Companion Objekte
► Klassen können einen Gefährten haben: Companion Objekte
// wird zu Person.apply(“Felix”, “Müller”) ergänztval felix = Person("Felix", "Müller")
class Person(val surname: String, val name: String, age: Int) { require(age >= 18, "age must not be less than 18")}
// beinhaltet alle Statics u. apply-Funktionen für Personobject Person {
def apply(name: String, surname: String) = { new Person(name, surname, 18) }}
![Page 22: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/22.jpg)
09.04.2023 Scala und Lift22
Traits
► Traits sind wie Java Interfaces, aber mit Implementierung
// Traits ermöglichen flache u. breite Klassenhierarchien// Beispiel: Zutaten für eine glückliche Persontrait Person { val name: String}
trait HasHobby { def myHobby: String}
trait HasFoundMeaningOfLife {
val meaningOfLife = "5" def calculateMeaningOfLife = 2 + 3}
![Page 23: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/23.jpg)
09.04.2023 Scala und Lift23
Traits
► Traits sind Mixins und gestatten eine sichere Mehrfachvererbung
// Konstruktor-Parameter name implementiert Person.nameclass HappyPerson(val name: String) extends Person with HasHobby with HasFoundMeaningOfLife {
// in Scala gibt es kein @Override, sondern ein // Schlüsselwort für das Überschreiben override val meaningOfLife = "42" override def calculateMeaningOfLife = 42
// hier ist override optional, da in HasHobby keine // Implementierung vorhanden ist def myHobby = "Programming in Scala"}
![Page 24: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/24.jpg)
09.04.2023 Scala und Lift24
Self-Type Annotationen
► ermöglichen weitere Modularisierung und einfache Dependency Injection
// this ist in Analyzer mit Backend typisierttrait Analyzer { this: Backend => // Analyzer hat Zugriff auf alle Member von Backend}
// Ergebnis:// Analyzer kann Backend erweitern um Funktionen// Analyzer definiert Abhängigkeit zu Backend
trait Backend extends Analyzer { // ...}
![Page 25: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/25.jpg)
09.04.2023 Scala und Lift25
Funktionen
► Funktionen sind in Scala First-Class Citizens
def dec(i: Int) = i – 1 // Signatur: Int => Int
// dec als Funktionsliteral(i: Int) => i – 1
// der Compiler macht daraus ein Objektnew Function[Int, Int]() { def apply(i: Int) = i - 1 }
// Zuweisung des Funktionsliterals zu einem Wertval decFunction = (i: Int) => i – 1
// macht beim Aufruf keinen Unterschiedprintln(dec(2)) // Ausgabe: 1println(decFunction(3)) // Ausgabe: 2
![Page 26: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/26.jpg)
09.04.2023 Scala und Lift26
Funktionen höherer Ordnung
► Funktionen, die andere Funktionen als Parameter oder Rückgabewert haben
def dec(i: Int) = i – 1 // Signatur: Int => Int
// wendet eine Funktion auf alle Listenelemente andef doWithListOfNumbers(list: List[Int], function: Int => Int) = { // map ist nur eine Funktion der reichhaltigen // Collection API von Scala list.map(function)}
// dec kann als Wert einfach übergeben werden// List(1, 2, 3) wird zu List.apply(1, 2, 3) Companionprintln(doWithListOfNumbers(List(1, 2, 3), dec))
// Ausgabe: List(0, 1, 2)
![Page 27: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/27.jpg)
09.04.2023 Scala und Lift27
Currying
► Mehr ist immer besser: Scala unterstützt mehrere Parameterlisten
def sub(x: Int)(y: Int) = x – y
println(sub(2)(3)) // Ausgabe: -1
// Das ist keine Magie! Anders definiert werden:def sub(x: Int) = (y: Int) => x – y
// Aber: Wozu?
![Page 28: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/28.jpg)
09.04.2023 Scala und Lift28
Eigene Kontrollstrukturen
► Currying + partiell angewandte Funktionen + Syntactic Sugar
def sub(x: Int)(y: Int) = x – y
def subTowWith = sub(2) _
// Ausgabe: -10println(subTowWith { val five = 5 val seven = 7 five + seven})
![Page 29: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/29.jpg)
09.04.2023 Scala und Lift29
Eigene Kontrollstrukturen deluxe
► Java 7 Auto-Closeable mit Scala nachgebaut
// Java 7: close() wird automatisch aufgerufentry (InputStream is = new FileInputStream("File.txt")) { // Daten vom Stream lesen und verarbeiten // z.B. is.read();}
// Wir wollen sowas auch in Scala haben!// try als Schlüsselwort ist schon besetzt,// also using wie in C# Das Ziel:using(new FileInputStream("File.txt")) { stream => // Daten vom Stream lesen und verarbeiten // z.B. stream.read()}
![Page 30: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/30.jpg)
09.04.2023 Scala und Lift30
Eigene Kontrollstrukturen deluxe
► Java 7 Auto-Closeable mit Scala nachgebaut
// Volle Scala Power:// Statisches Ducktyping mit strukturellen Typen// Currying// Funktionen höherer Ordnung
def using[T <: { def close() }](resource: T) (block: T => Unit) { try { block(resource) } finally { if (resource != null) resource.close() }}
![Page 31: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/31.jpg)
09.04.2023 Scala und Lift31
Case Klassen
► Abstrakte Datentypen durch Case Klassen
// Case Klassen haben automatisch ein Companion Objekt// mit passender apply-Funktion
// equals, hashCode und toString werden ebenfalls// automatisch generiert
abstract sealed class Fruchtcase class Apfel(sauer: Boolean) extends Fruchtcase class Birne(sorte: String) extends Frucht
// mit einer abstrakten, versiegelten Klasse kann der// Scala Compiler sichere Typchecks machen (z.B. beim// Pattern Matching)
![Page 32: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/32.jpg)
09.04.2023 Scala und Lift32
Pattern Matching
► Switch auf Steroiden
// Switch-ähnlich, aber mehr Möglichkeiten:// Mustervergleich nach Werten, Typen, Tupeln,// regulären Ausdrücken// Formulierung von Mustern, z.B: (1, _, x: Double)// Wildcard, der Unterstrich _
def welcheFrucht(frucht: Frucht) = frucht match {
case Apfel(true) => println("Saurer Apfel.") case Apfel(false) => println("Nicht saurer Apfel.") case Birne(sorte) => println("Birnensorte: " + sorte)}
![Page 33: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/33.jpg)
09.04.2023 Scala und Lift33
Implicit Conversions
► selbstdefinierte Typumwandlungen (ermöglichen das Pimp my Library Pattern)
// List wird um headOr Funktion erweitert („gepimpt“)class ListExtensions[A](list : List[A]) {
def headOr(f: => A): A = list match { case h :: _ => h case Nil => f }}
object ListExtensions {
implicit def listExtensions[A](list : List[A]) = new ListExtensions(list)}
![Page 34: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/34.jpg)
09.04.2023 Scala und Lift34
Implicit Conversions
► Anwendung der definierten Implicit Conversion
// Implicit Conversion wird in den Scope importiertimport ListExtensions._
// durch Implicit Conversion kann headOr auf List// aufgerufen werden
// Ausgabe: 1println(List(1,2,3).headOr(0))// println(new ListExtensions(List(1, 2, 3)).headOr(0))
// Ausgabe: 0println(Nil.asInstanceOf[List[Int]].headOr(0))
![Page 35: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/35.jpg)
09.04.2023 Scala und Lift35
Scala im Vergleich zu Java
Scala fügt hinzu… Scala entfernt…
Vollständige Objektorientierung Statics
Operator-Überladung Primitive Typen
Funktionen höherer Ordnung Kontrollstrukturen: switch, break, continue, do-while, ternärer Operator
Mixin Komposition durch Traits Wildcards
Abstrakte Datentypen Raw Typs
Pattern Matching Enums
► u.a. durch Scala Standardbibliothek implementiert: enums, break, continue
![Page 36: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/36.jpg)
09.04.2023 Scala und Lift36
Scala im Vergleich zu Java
► Scala’s Typsystem ist stark und statisch.
► Es sind viel mehr Ausdrücke prüfbar als in Java:> einfaches Refactoring
> ermöglicht guten IDE-Support
► Scala Code wirkt dynamisch> Typangaben entfallen meist
– Ausnahme: Schnittstellen
– Vorteil v.a. bei Typparametern (Generics)
> Implizite Konvertierungen
You've got the best of both worlds, don't you?
All our strengths, none of our weaknesses.
![Page 37: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/37.jpg)
Beispielanwendung
Rewrite einer Java Applikation in Scala
09.04.2023
![Page 38: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/38.jpg)
09.04.2023 Scala und Lift38
Tool Chain
► Maven Plugin für Scala
► alle Scala Libraries lassen sich mit Maven (und Ant) integrieren
► Scala hat eigenes Build- und Deployment Tool: SBT, Simple Build Tool
► SBT ist eine goldene Mischung aus Maven und Ant> deklarativ und imperativ zugleich (ähnlich zu Gradle)
> nutzt Scala für die Konfiguration viele Möglichkeiten für Anpassungen ohne XML-Hölle
► Scala Plugins für Eclipse, IDEA und Netbeans:
Scala Eclipse IDEA Netbeans
2.8
2.9 ?
![Page 39: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/39.jpg)
09.04.2023 Scala und Lift39
Fazit
Pro
► Scala unterstützt FP ohne dabei mit der OOP zu brechen.
► Scala ermöglicht verständlicheren Code als Java.
► Scala ist weniger komplex als Java.
► Scala ist besonders gut geeignet für:
> Datenverarbeitung
> Nebenläufige Programmierung
> Domain Specific Languages
Contra
► Tool Chain
> (schlechte) Integration mit Java Tooling
> im Vergleich zu Java schlechter IDE-Support
> jedoch positiver Trend zu erkennen
► viele Sprachfeatures sind für Library-Designer gedacht seltene Verwendung in Applikationsentwicklung
![Page 40: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/40.jpg)
09.04.2023
LiftVorstellung des funktionalen Scala Full-Stack
Web-Frameworks
![Page 41: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/41.jpg)
09.04.2023 Scala und Lift41
Agenda – Lift
Was, warum und wo?
View-First-Konzept
Snippets
Persistenz
Beispielanwendung
Fazit
![Page 42: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/42.jpg)
09.04.2023 Scala und Lift42
Was ist Lift?
► funktionales Web-Framework für Scala
► seit 2007 in Entwicklung, aktuell: Version 2.4-M1
► Full-Stack: deckt Frontend- und Backend-Belange ab
► unterstützte als eines der ersten Frameworks Comet (Ajax-Push, in HTML5: WebSocket)
David Pollak,Lift Initiator und Maintainer
![Page 43: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/43.jpg)
09.04.2023 Scala und Lift43
Was ist Lift?
Fu
ll-S
tack
W
eb-F
ram
ewo
rk
![Page 44: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/44.jpg)
09.04.2023 Scala und Lift44
Warum Lift?
► Standard für Web-Entwicklung mit Scala
► setzt auf der Java EE Plattform auf
► interessante Konzepte
► vereint viele Ideen anderer Frameworks
► wird in „richtigen“ Projekte eingesetzt läuft produktiv und skaliert gut
![Page 45: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/45.jpg)
09.04.2023 Scala und Lift45
Wo wird Lift eingesetzt?
![Page 46: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/46.jpg)
09.04.2023 Scala und Lift46
View-First-Konzept
► Seitenbeschreibungen in Standard XHTML-Tags
► Ziel:> Designer friendly Templates
> keine Logik im View
► kein MVC, eigenes Entwurfsmuster: View-ViewModel-Model
![Page 47: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/47.jpg)
09.04.2023 Scala und Lift47
Snippets
► Snippets sind das ViewModel
► Snippets sind Funktionen, die XML-Knoten transformieren:> NodeSeq => NodeSeq
> XML-Prozessoren, die das Markup direkt verändern
► Snippets sorgen für dynamische Seiteninhalte und Anbindung des Backends
► Snippets können zustandsbehaftet sein
![Page 48: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/48.jpg)
09.04.2023 Scala und Lift48
Persistenz
► 2 Persistenz-Bibliotheken: Mapper und Record
► Mapper baut auf JDBC auf und ist Quasi-Standard in Lift
► Record ist Abstraktionsschicht für andere ORM-Frameworks
![Page 49: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/49.jpg)
Beispielanwendung
Twitter nachgebaut mit Lift von Heiko Seeberger
09.04.2023
![Page 50: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/50.jpg)
09.04.2023 Scala und Lift50
Fazit
Pro
► Alleinstellungsmerkmale:
> Comet Support
> JavaScript und Ajax Abstraktion
► herausragende Community
► gut geeignet für:
> Echtzeit Web-Apps
> typische Web 2.0 Apps
> Social Networks
Contra
► Vermischung von Schichten
► enge Kopplung zwischen Komponenten
► keine Komponentenbibliothek (nur einige Widgets)
► kein Mehrwert für typische Enterprise-Anwendungen
![Page 51: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/51.jpg)
09.04.2023
AusblickWeitere interessante Themen
![Page 52: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/52.jpg)
09.04.2023 Scala und Lift52
Ausblick – What‘s next?
Scala
► (Advanced) Sprachfeatures:
> implizite Argumente und vieles mehr
> DSLs erstellen
► Akka als Middleware Framework
► Spring Integration Scala DSL
► Play Web-Framework mit Scala Modul
► CloudFoundry Integration
Lift
► Web-Services mit Lift
► BigTop als Lift Extension
► Komponentenbibliothek
► Squeryl Anbindung
![Page 53: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/53.jpg)
09.04.2023 Scala und Lift53
Ausblick – Buchtipps
Scala Lift
![Page 54: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/54.jpg)
09.04.2023 Scala und Lift54
Ausblick – Scala vs. Java
► Und wo ist jetzt der Java Rant?!
► Hier, aber in zivilisierter Form:
https://www.adesso.de/wiki/index.php/Datei:Scala%C3%9Cbersicht.pdf
![Page 55: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/55.jpg)
09.04.2023
Vielen Dank für eure Aufmerksamkeit.
Fragen?
![Page 56: Scala und Lift](https://reader033.vdocuments.site/reader033/viewer/2022061202/547b1bdab4af9f64248b4864/html5/thumbnails/56.jpg)
09.04.2023 Scala und Lift56
Quellen
► http://scala-boss.heroku.com
► http://www.slideshare.net/Odersky/fosdem-2009-1013261
► http://www.mate.it/en/component/content/article/84-perche-scala
► https://www.adesso.de/wiki/index.php/Datei:Scala_Pr%C3%A4sentation_Nightsession.ppt
► http://www.scala-lang.org/node/1658
► http://scala.sygneca.com/patterns/pimp-my-library