Wie kommt Ruby, Python, PHP ohne Spring aus?


13

Ich schreibe Enterprise Java-Anwendungen und Webservices bei der Arbeit ( Spring , Hibernate, Maven, RESTEasy) und PHP (CakePHP) und Python (Django) für meine Nebenprojekte.

Obwohl ich den Wert von Inversion of Control, aspektorientierter Programmierung usw., den Spring mit sich bringt, sehe, bin ich mir nicht sicher, wie massiv Webanwendungen, die sich nicht auf dem Java-Stack befinden, ohne ein Framework wie Spring auskommen.

Müssen sich die Entwickler mit eng gekoppelten Komponenten und anderen Beschwerden, die Spring beseitigt, abfinden oder vermisse ich etwas?

Für diejenigen, die mit Spring nicht vertraut sind, sind die Funktionen, die wir am häufigsten verwenden:

  • Inversion des Control-Containers: Konfiguration von Anwendungskomponenten und Lifecycle-Management von Java-Objekten,

  • Aspektorientierte Programmierung: ermöglicht die Implementierung von Querschnittsroutinen,

  • Transaktionsverwaltung: Vereinheitlicht mehrere Transaktionsverwaltungs-APIs und koordiniert Transaktionen für Java-Objekte.


3
Sie werden wahrscheinlich bessere Antworten erhalten, wenn Sie zumindest kurz erklären, was Spring tut.
Per Johansson

4
Nur weil Pythonisten nicht die Schlagworte von Java verwenden, heißt das nicht, dass sich die Designmuster erheblich unterscheiden. Na ja, vielleicht außer Verlust weniger aufblähen.
Vartec

6
Trotz Ihrer Definition habe ich absolut keine Ahnung, was Spring tut.
Sevenseacat

Und das ist einer der größten Missstände, die ich mit Spring habe. Bevor ich mit der Java-Unternehmensentwicklung anfing, hatte ich keine Notwendigkeit dafür.
Rdasxy

Ich bin ein Java-Entwickler, aber ich mag den Frühling wirklich nicht wegen seiner Komplexität.
Mahmoud Hossam

Antworten:


15

Andere Plattformen benötigen Spring nicht, da diese Sprachen nicht annähernd so restriktiv sind wie Java.

Ich werde ein Beispiel mit node.js geben

  • Inversion des Control-Containers: Konfiguration von Anwendungskomponenten und Lifecycle-Management von Java-Objekten

Die Serverkonfiguration erfolgt entweder im Code oder in einer einfachen JSON-Konfigurationsdatei. Generische IoC-Systeme brauchen wir einfach nicht, Javascript ist eine ausdrucksstarke und dynamische Sprache. Ja, Sie benötigen IoC, aber das ist ganz einfach. Übergeben Sie Abhängigkeiten an Ihre Objekte als Funktionsparameter.

  • Aspektorientierte Programmierung: Ermöglicht die Implementierung von Querschnittsroutinen

Ich glaube einfach nicht, dass wir so etwas brauchen, wir schreiben modularen Code und es funktioniert einfach.

  • Transaktionsverwaltung: Vereinheitlicht mehrere Transaktionsverwaltungs-APIs und koordiniert Transaktionen für Java-Objekte

noSQL ist unglaublich beliebt. Es gibt keine Vorstellung von einer Transaktion.

Persönlich würde ich sagen, dass solche Systeme aufgebläht und überentwickelt sind und man sie einfach nicht braucht. Andere Sprachen und Plattformen bleiben einfach schlank und agil.


8
Sie haben auch übersehen, wie einfach es ist, Enten zu tippen und Affen zu patchen, um Dinge in Python und Ruby zu injizieren.
Danny Staple

3
Richtig, der Grund, warum andere Sprachen Spring nicht haben, ist, dass ... sie Spring nicht brauchen, um wirklich nützlich zu sein ;-)
Dean Harding

7
Zu sagen, dass Sie IoC, AOP oder Transaktionsmanagement nicht benötigen, ist kurzsichtig und falsch. In vielen Hochsprachen können Sie problemlos Code unter Verwendung von AOP- und / oder IoC-Designprinzipien schreiben. Es ist nur so, dass die meisten Hochsprachen keine explizite Klasse oder Container benötigen, um diese Funktionen bereitzustellen.
Dietbuddha

2
@Raynos Generische IoC-Systeme werden einfach nicht benötigt. Javascript ist eine ausdrucksstarke und dynamische Sprache. Dies ist bis zu einem gewissen Grad eine Fehlinformation. Sie glauben nicht, dass Sie sie brauchen. coffeescripter.com/2010/08/…
Aaron McIver

4
@AaronMcWenn Sie recht hatten, brauchen wir IoC.
Raynos

15

In den meisten Hochsprachen ist es trivial, nach AOP- und / oder IoC-Designprinzipien zu schreiben.

Sie müssen AOP nur implementieren, damit die Sprache Funktionen höherer Ordnung unterstützt. Beispielsweise:

def log(fn):
  def wrapped_fn(*a, **kw):
    logger.log(fn_formatter(fn, a, kw))
    return fn(*a, **kw)
  return wrapped_fn

@log
def do_something(my_friend):
  return have_fun_with(my_friend)

Sie können beim Programmieren auch allgemeine IoC- oder Abhängigkeitsinjektionsprinzipien befolgen. Sie benötigen keinen bestimmten Container, um diese Funktion bereitzustellen. Sie können den Code einfach so schreiben.

def etl(iextract, transformations, iload):
  return iload(itertools.imap(compose(*transformations), iextract()))

9

Nun genießt Python den Frühling auch Spring Python .

Spring Framework wurde erstellt, um die Java-Entwicklung zu vereinfachen, und was für die Java-Entwicklung gilt, ist für die Ruby- oder Python-Entwicklung nicht erforderlich.

Ruby verfügt beispielsweise über Metaprogrammierfunktionen, mit denen Sie Ihr eigenes AOP erstellen können.

Ironischerweise versuchen neue Java-Webframeworks, Django und Rails-Frameworks zu erfassen (siehe Grails and Play! -Frameworks zum Beispiel).


4
Grails ist kein Java-Framework. Es ist ein Groovy-Framework. Groovy kompiliert in Java-Bytecode, ist jedoch kein Java.
Kevin Cline

@ kevincline Ja, ich wusste, aber am Ende des Tages ist es ein JVM-Webframework (das auf Spring und Hibernate basiert).
Chiron

1
Ja, das Tolle an Grails ist, dass Sie Spring nicht kennen müssen.
Kevin Cline

1
@ Kevincline Nicht unbedingt wahr. Manchmal muss man auf den Frühling zurückgreifen und hier und da etwas verändern
Chiron

3

Für Python bietet BlueBream (auch bekannt als Zope 3) die Funktionen von Spring und vieles mehr.

Komplexität und Leistung haben ihre Kosten. Manchmal möchten Sie sie nicht bezahlen.

Viele Programmierer empfinden BlueBream als entmutigend und viel zu viel für das, was sie tun müssen. Sie bevorzugen schlankere, kleinere Toolkits. Die meisten anderen Lösungen (Django usw.) basieren auf dem MVC-Paradigma.

Sie können ähnliche Kräfte auch im Java-Raum beobachten, zum Beispiel mit dem schönen Playframework .

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.