Angularjs

Für sonstige Unterhaltungen, welche nicht direkt mit Lazarus zu tun haben
Benutzeravatar
theo
Beiträge: 8412
Registriert: Mo 11. Sep 2006, 19:01

Angularjs

Beitrag von theo »

carli hat geschrieben: (Und die RTTI-Komponenten funktionieren nicht, weshalb ich dann doch lieber 'ne Web-App mit Angular.js baue)


Kannst du mal ein bisschen was über Angularjs sagen?
Habe mir das mal angeschaut.
Mich würde hier weniger die Frage nach dem wie, sondern mehr wozu und allenfalls noch warum interessieren.

Ich sehe, dass es ein JS MVC Framework ist.
Sieht recht "magic" aus, obwohl ich noch nie ganz sicher war, ob mir persönlich der MVC Ansatz gefällt.

Mein Frage ist eigentlich, wann ich das praktisch einsetze.
Normalerweise benötige ich eher fertige, VCL ähnliche Controls ä la ExtJS oder YUI.
z.B. so:
http://yuilibrary.com/yui/docs/datatabl ... nator.html
http://yuilibrary.com/yui/docs/charts/c ... lines.html
etc.

Kannst du mir mal auf die Sprünge helfen, wo mir Angularjs in der Praxis Vorteile verschafft?

carli
Beiträge: 660
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Angularjs

Beitrag von carli »

Angular.js ist ein Model-View-View-Model-Framework und hat Data Binding.

Du änderst einen Wert im Modell (ein JSON-Dokument) und schon updaten sich alle Eingabefelder, Vorkommen in Texten, Grafiken etc. wo der Wert verwurstet ist. Tippst du in einem Eingabefeld, wird auch der Wert im Modell mit geändert.
Außerdem hast du tolle For-Loops, wo du für ein Array in der Programmiersprache z.B. automatisch pro Datensatz eine Zeile in der Tabelle generieren kannst. Löscht man Elemente im Array oder fügt welche hinzu, kümmert sich Angular.js darum, dass in der Tabelle ebenfalls die Werte hinzugefügt oder entfernt werden.

Ziemlich geiler Scheiß also.

Benutzeravatar
theo
Beiträge: 8412
Registriert: Mo 11. Sep 2006, 19:01

Re: Angularjs

Beitrag von theo »

Danke. So hatte ich das Ansatzweise auch verstanden, und das meinte ich auch mit "magic".
Dennoch fehlt mir ein wenig die Fantasie, um mir ein konkretes Einsaztgebiet vorzustellen.
Oder anders gesagt: Es sieht nach einer genialen Antwort aus, aber auf welche Frage?

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2285
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.8, FPC 3.0.4)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Angularjs

Beitrag von m.fuchs »

Ich kenne jetzt diese spezielle Framework nicht, aber es funktioniert ja im Grund nicht anders als andere MVC-Frameworks.

Wozu braucht man es? Für praktisch alle Anwendungen die Datenein- und ausgabe beinhalten. Die Bindung an die Modelklassen lässt sich damit einfach realisieren, es gibt eine gute Schichtentrennung, etc. Zusammen mit Validatoren spart man sich eine Menge Code.

Beispiel für eine Eingabemaske von Personen: Formular bauen für Name, Vorname, Adresse, Telefon, E-Mail. Auf die Felder E-Mail und Telefonnummer jeweils einen passenden Validator setzen, Modelklasse dranbinden. Fertig.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
theo
Beiträge: 8412
Registriert: Mo 11. Sep 2006, 19:01

Re: Angularjs

Beitrag von theo »

Danke. Das haut mich aber als Bsp. jetzt noch nicht wirklich um.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2285
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.8, FPC 3.0.4)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Angularjs

Beitrag von m.fuchs »

Naja, zum umhauen ist das alles auch eher nicht gedacht. MVC-Frameworks vereinfachen halt die Arbeit und verbesseren die Code-Trennung (und damit auch die Testbarkeit).
Sie haben aber kein Alleinstellungsmerkmal. Man kann das Ziel auch auf anderen Wegen erreichen. Den absoluten Oberburner, der nur mit MVC möglich ist, kann ich dir nicht nennen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
theo
Beiträge: 8412
Registriert: Mo 11. Sep 2006, 19:01

Re: Angularjs

Beitrag von theo »

OK, irgendwie erreicht mir der Funke nicht so richtig.
Die Code-Trennung, so sie denn nicht als Vererbung oder Libraries stattfindet, kann mich auch nicht direkt begeistern.
In mehreren Dateien lesen zu müssen, um eine Funktionalität zu verstehen finde ich nicht unbedingt praktisch.
Aber vielleicht komme ich ja noch auf den Geschmack.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2285
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.8, FPC 3.0.4)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Angularjs

Beitrag von m.fuchs »

Du hast ja dann nicht eine Funktionalität in mehreren Dateien. Nehmen wir mein Beispiel von der Adressverwaltung.
Das Model wäre dann für die Datenhaltung zuständig und enthält die Funktionalität zum Speichern für diesen Fall. Der View hingegen die für die Eingabe.
Auch wenn beide Funktionalitäten gemeinsam für das Anlegen einer neuen Adresse benötigt werden, sind es doch zwei unterschiedliche Sachen und können daher gut von einander getrennt entwickelt werden. Und damit auch gut einzeln getestet werden.

Wenn da zufälligerweise zum nächsten Forumstreffen im Sommer kommst (darüber würden sich auch sicher viele freuen), dann kann ich gerne dazu mal was erzählen. MVC ist bestimmt auch für andere Entwickler interessant.
Zuletzt geändert von m.fuchs am Mo 23. Dez 2013, 14:34, insgesamt 1-mal geändert.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
theo
Beiträge: 8412
Registriert: Mo 11. Sep 2006, 19:01

Re: Angularjs

Beitrag von theo »

Ich schaue mir das Ganze nochmal genauer an. Vielleicht macht es ja doch noch "Klick".
Schauen wir mal.
Danke.

carli
Beiträge: 660
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Angularjs

Beitrag von carli »

m.fuchs hat geschrieben:Ich kenne jetzt diese spezielle Framework nicht, aber es funktioniert ja im Grund nicht anders als andere MVC-Frameworks.

Doch. Angular.js ändert das Dokument live und nicht erst beim nächsten Request. Das ist noch mal schärfer als nur eine simple Template-Engine.

carli
Beiträge: 660
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Angularjs

Beitrag von carli »

theo hat geschrieben:OK, irgendwie erreicht mir der Funke nicht so richtig.
Die Code-Trennung, so sie denn nicht als Vererbung oder Libraries stattfindet, kann mich auch nicht direkt begeistern.
In mehreren Dateien lesen zu müssen, um eine Funktionalität zu verstehen finde ich nicht unbedingt praktisch.
Aber vielleicht komme ich ja noch auf den Geschmack.


Du hast viel aufgeräumteren Code:
- Du hast in der Model-Klasse alle Datenstrukturen, sowie die Datenmanipulationsprozeduren auf einen Haufen und kannst allein durch Durchlesen des Codes herausfinden, ob dein Code die Daten richtig verarbeitet.
- Du hast alle Aktionen, die der Nutzer tun kann im Controller. Dadurch hast du dort allen Code auf einen Haufen, der Eingaben überprüfen muss. Du schreibst dort im Prinzip nur Code, der die Eingabe prüft und dann eine Funktion des Modells aufruft.
- Du hast alles, was das Aussehen der Daten beim Nutzer angeht im View konzentriert. Wenn die Ausgabe der Daten doof ist, kannst du betreffenden Teil neu schreiben, ohne dass sich die Funktionen des Programms ändern oder du diese überhaupt zu Gesicht bekommst.

Ich hoffe, die Vorteile daraus erschließen sich dir einigermaßen. Du kannst den Code ja trotzdem noch lesen und verstehst alles, auch wenn du nur eine Datei liest! (Nämlich die, dessen relevanten Teilaspekt des Programms du gerade betrachten willst)

Weitere Anwendungsszenarien:
- Wenn ein Bug in der Berechnung ist, musst du eben nicht durch seitenweise Code scrollen, der Sachen Anzeigt, Ereignisse verarbeitet etc., sondern öffnest direkt das Model.
- Wenn du das Programm plötzlich auf eine andere Datenbank umstellen willst, musst du nur die Model-Sourcen anpacken. Der Rest des Programms funktioniert trotzdem wie gehabt.
- Wenn du eine neue Funktion einbaust, die ebenfalls Dinge anzeigen soll (z.B. eine REST-API), kannst du bereits vorhandene Funktionen des Models aufrufen.

Benutzeravatar
theo
Beiträge: 8412
Registriert: Mo 11. Sep 2006, 19:01

Re: Angularjs

Beitrag von theo »

OK, Danke!
Ich werde mir das bei Gelegenheit noch einmal mit Augenmerk auf die genannten Aspekte anschauen.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2285
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.8, FPC 3.0.4)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Angularjs

Beitrag von m.fuchs »

carli hat geschrieben:
m.fuchs hat geschrieben:Ich kenne jetzt diese spezielle Framework nicht, aber es funktioniert ja im Grund nicht anders als andere MVC-Frameworks.

Doch. Angular.js ändert das Dokument live und nicht erst beim nächsten Request. Das ist noch mal schärfer als nur eine simple Template-Engine.

Hm, das ist jetzt kein Alleinstellungsmerkmal. Ajax-Formulare (mit Reaktion auf Eingabeevents) habe ich auch in anderen Frameworks.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Christian
Lazarusforum e. V.
Beiträge: 6092
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Angularjs

Beitrag von Christian »

Das machen meines Wissens alle nicht Web basierten MVC Frameworks eh so.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

carli
Beiträge: 660
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Angularjs

Beitrag von carli »

m.fuchs hat geschrieben:
carli hat geschrieben:
m.fuchs hat geschrieben:Ich kenne jetzt diese spezielle Framework nicht, aber es funktioniert ja im Grund nicht anders als andere MVC-Frameworks.

Doch. Angular.js ändert das Dokument live und nicht erst beim nächsten Request. Das ist noch mal schärfer als nur eine simple Template-Engine.

Hm, das ist jetzt kein Alleinstellungsmerkmal. Ajax-Formulare (mit Reaktion auf Eingabeevents) habe ich auch in anderen Frameworks.


Bei Angular.js musst du aber die Funktion hinter den "Eingabeevents" nicht manuell coden, sondern du verknüpfst sie mit dem Modell. Ich wüsste nicht, welches andere Framework das hätte. Nenn' doch mal ein Beispiel! (Hinweis: Zend, Wordpress, jQuery und sonst alle Frameworks, die ich kenne, haben es nicht)

Antworten