Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich beschäftige mich gerade etwas mit Spring und bin jetzt erst mal einigermaßen verwirrt, ob der vielen Möglichkeiten. Andererseits habe ich auch das unbestimmte Gefühl, dass manche der Möglichkeiten guten Programmierpraktiken entgegen stehen. So sollen z. B. für die DI ein öffentlicher, parameterloser Konstruktor sowie Getter/Setter bereitgestellt werden. Für simple Datenobjekte in Ordnung, aber DI soll ja auch in der Geschäftslogik zum Einsatz kommen. Oder Repositories, die direkten DB-Zugriff ermöglichen, was ja eigentlich ebenfalls in die Geschäftslogik sollte.
Da es Spring allerdings schon eine Weile gibt, gibt es natürlich viele, auch bereits ältere Beiträge, so dass ich nicht weiß, ob das alles noch aktuell ist, bzw. soll im Beispiel auch eine tolle Gästebuch-App mit möglichst wenig Zeilen Code herauskommen.
Irgendwie habe ich noch nicht verstanden, wie die vielen vielen Komponenten des Frameworks zusammenhängen, wie Spring Boot da hineinspielt und wann es überhaupt sinnvoll ist Spring einzusetzen. Spring Boot ist ja offenbar das "neue" fancy convention-over-configuration Ding, das alles einfacher macht.
Anscheinend ist es möglich auch nur Teile davon zu verwenden, z. B. eine einfache Konsolenanwendung zu schreiben und nur Spring-Data zu verwenden.
Oder habe ich das falsch verstanden, bzw. ist das sinnvoll?
Wann ist es sinnvoll Spring (Boot) zu verwenden?
Mal als Beispielprojekt etwas in der Art von git. Es gibt eine Serveranwendung mit der Geschäftslogik und eine Clientanwendung auf Konsolenbasis, mit der man Dateien ein- und auschecken kann. Weiterhin soll es noch ein Webfrontend geben, mit dem man über den Browser Dateien ein- und auschecken kann. Könnte man alles "von Hand" machen oder mit Spring?
Sorry für die vielleicht dummen Fragen, aber als Hobbyprogrammierer seit Ihr meine einzigen Ansprechpartner
Also zu dem "Wann ist es sinnvoll" wäre meine Antwort so wie bei jedem Framework:
- Wie tief greift das Framework in Deine Applikation ein? Je tiefer etwas eingreift, desto kritischer ist es.
- Was nutzt Du von dem Framework, was für Alternativen gibt es? (Bei Dir wäre die Frage: Was genau nutzt Du? Reichen evtl. die Libraries, auf die Spring zugreift?) -> ggf. ist es zwingend, eine Library einzusetzen. Gewisse sicherheitsrelevante Dinge werde ich nicht selbst schreiben!
- Wie komplex ist das, was Du nutzen willst?
Konkrete Beispiele: Ich musste eine Grafik rendern. Also ich habe ein Bild in Größe x, y Pixel und ich musste es in einen Bereich packen, der die Größe xneu, yneu haben muss. Da hatte ich einige tolle Libs gefunden, die sonst was alles konnten. Aber ich brauchte nur einen minimalen Bruchteil der auch nicht wirklich komplex war. Also habe ich auf die Libs verzeichtet und habe da eine kleine Klasse selbst geschrieben um eben die Komplexität gering zu halten.
Spring Boot habe ich auch schon in Kommandozeilen-Tools verwendet. Das funktioniert super. War damals einfach, um DI zu nutzen und Spring Boot kannte ich so dass ich das benutzt habe. Aber ich habe es dann wieder raus geschmissen. Es war einfach massiver Overhead für eine Funktionalität, die es nicht rechtfertigt. Aber ja: Es funktionierte super!
Also wann ist es sinnvoll, Spring Boot zu nutzen?
Aus meiner Sicht, wenn du die Funktionalität wirklich brauchst und es nicht nur einen zu großen Overhead mitbringt.
Da erkennst Du also auch direkt eine Problematik, die man sehen muss: Mit jeder Abhängigkeit bringst Du eine gewisse Komplexität mit rein und die musst Du beherrschen. Und das kann auch kritisch für die Sicherheit sein. Das will ja aktualisiert werden so da entsprechende Funktionalitäten mit betroffen sind (Spring Boot hat ja spring Security und so. Wenn Teile von außen angesprochen werden können, dann ist das eh kritisch!). Da kann so ein Framework gesetzt sein (Sicherheitsrelevante Dinge schreibe ich nicht selbst! Da kommen Komponenten, denen ich vertraue). Aber diese muss ich beherrschen und sicher sein, dass ich diese richtig einsetze!
Das wäre so meine Sichtweise darauf. Vielleicht hilft es ja ein bisschen.
Vielleicht noch eine kurze Frage vorher: Was macht Spring Boot eigentlich?
Das Spring-Framework gab es ja bereits vor Spring Boot und konnte auch so genutzt werden. Ist Spring Boot also nur eine Art "Aufsatz" darüber?
Dann erst mal vielen Dank für deine Ausführungen. So in dieser Art hatte ich es mir auch schon gedacht. Es ist einfach eine Abwägung von pro und contra mit darauf folgender Entscheidung, die man treffen muss.
Bezüglich des Beispiels und des Einsatzes von Spring:
Für die Webapplication würde Spring ja durchaus einiges an Erleichterung mitbringen. Ich hab da ein kurzes Tutorial mit Spring Boot und Vaadin ausprobiert, das ging ganz fix.
Gleiches gilt auch für den eigentlichen Server, der dann einem Microservice entsprechen würde.
Spring Boot ist ein Aufsatz auf dem Spring Framework um in erster Linie:
- die Konfiguration zu vereinfachen (Es gibt viele default Einstellungen, die schon direkt sinn machen. Änderungen können einfach gegeben werden.)
- Integration eines Servers - Es muss also nicht mehr in einen Application Server deployed werden.
- Starter Dependencies um ein Projekt einfacher aufbauen zu können
Ich beschäftige mich gerade etwas mit Spring und bin jetzt erst mal einigermaßen verwirrt, ob der vielen Möglichkeiten. Andererseits habe ich auch das unbestimmte Gefühl, dass manche der Möglichkeiten guten Programmierpraktiken entgegen stehen. So sollen z. B. für die DI ein öffentlicher, parameterloser Konstruktor sowie Getter/Setter bereitgestellt werden. Für simple Datenobjekte in Ordnung, aber DI soll ja auch in der Geschäftslogik zum Einsatz kommen. Oder Repositories, die direkten DB-Zugriff ermöglichen, was ja eigentlich ebenfalls in die Geschäftslogik sollte.
Ein Parameterloser Konstruktor ist (Gott Sei Dank) nicht mehr nötig. Einfach die Autowired Annotation an den Konstruktor mit Parametern packen, fertig. Ist auch die deutlich bessere Variante, weil es Tests unglaublich erleichert.
Ich persönlich hab bei meiner Spiel-Spring Boot Anwendungen die Repositories noch verschalt mit einem Service. Also das XYRepository Interface von Spring und dann einen XYService, der das Repository nutzt, aber die fachlichen Methoden zur Verfügung stellt.
Ich persönlich hab bei meiner Spiel-Spring Boot Anwendungen die Repositories noch verschalt mit einem Service. Also das XYRepository Interface von Spring und dann einen XYService, der das Repository nutzt, aber die fachlichen Methoden zur Verfügung stellt.
Mal als Beispielprojekt etwas in der Art von git. Es gibt eine Serveranwendung mit der Geschäftslogik und eine Clientanwendung auf Konsolenbasis, mit der man Dateien ein- und auschecken kann. Weiterhin soll es noch ein Webfrontend geben, mit dem man über den Browser Dateien ein- und auschecken kann. Könnte man alles "von Hand" machen oder mit Spring?
Zum Ein- und Auschecken von Dateien gibt es GIT, WebDAV, etc., das würde ich jetzt gar nicht selbst programmieren. Das bekommt man nicht so gut und sicher hin, wie es z.B. bewährte Open Source Lösungen können.
Spring und andere Frameworks oder Bibliotheken setzt man ein, um mit komplexen Anwendung fertig zu werden. Im Job programmiert man ja nicht, um einfach zu programmieren. Man will so schnell und so gut wie möglich fertig werden um einen Wert zu generieren und dann mit dem nächsten Projekt fertig zu werden usw. Man kann mit Frameworks mit kleinem Aufwand die Arbeitsleistung und das Know-how vieler Entwickler in das eigene Projekt integrieren. Dabei spielt es auch keine Rolle ob 3 oder 9 Funktionen einer Bibliothek nicht benutzt werden, das sind dann eben ein paar KB Speicherplatz, heute kostet das fast nichts mehr. Die zunehmende Komplexität ist meist kein Problem. Es ist oft einfacher effizienter und billiger Teile einer Anwendung mit modernen Techniken neu zu schreiben, als ewig an einer selbst geschrieben Anwendung herum zu laborieren. Dadurch verschwinden auch immer wieder veraltete Frameworks und Bibliotheken aus der Pipeline.
Also wenn man ein Spiel Projekt hat, dann ist es egal, was das Thema ist. Hauptsache man kann an der Technik rumspielen um diese zu begreifen.
Und ich sehe sehr wohl ein großes Problem darin, Komplexitäten ins Boot zu nehmen, die man eben nicht überblickt. Und so Frameworks wie Spring Boot sind enorme Kracher. Das zu nutzen in einer Software, die man verantworten muss, bedeutet, dass man das Framework auch gut überblickt.
Ein Beispiel, was mir hier in den Sinn kommt: Xerox "Scannergate". Man verwende eine super Image-Kompression. Echt geil, wenn dann Scans verfälscht sind.
Ich denke, es geht einfach darum ein gesundes Maß zu finden. Man muss nicht auf jedes kleine Problem immer mit dem größten Framework losgehen, sondern sich eine Lösung suchen, welche die Anforderungen gut abdeckt.