Come gestisce Ruby, Python, PHP senza Spring?


13

Scrivo applicazioni Java aziendali e servizi web al lavoro ( Spring , Hibernate, Maven, RESTEasy) e PHP (CakePHP) e Python (Django) per i miei progetti secondari.

Mentre vedo il valore che Inversion of Control, Aspect Oriented Programming, ecc. Che porta in Spring, non sono sicuro di come gestiscono enormi applicazioni Web che non si trovano nello stack Java senza un framework come Spring.

Quindi, gli sviluppatori devono semplicemente "sopportare" componenti strettamente accoppiati e altri reclami che Spring elimina o mi sto perdendo qualcosa?

Per chi non ha familiarità con Spring, le funzionalità che utilizziamo di più sono:

  • Inversione del contenitore di controllo: configurazione dei componenti dell'applicazione e gestione del ciclo di vita degli oggetti Java,

  • Programmazione orientata all'aspetto: consente l'implementazione di routine trasversali,

  • Gestione delle transazioni: unifica diverse API di gestione delle transazioni e coordina le transazioni per gli oggetti Java.


3
Probabilmente otterrai risposte migliori se almeno spiegherai brevemente cosa fa Spring.
Per Johansson,

4
Solo perché Pythonistas non usa le parole d'ordine di Java, non significa che i modelli di progettazione siano significativamente diversi. Bene, forse tranne la perdita meno gonfia.
vartec,

6
Anche con la tua definizione, non ho ancora idea di cosa faccia Spring.
sevenseacat,

E questo è uno dei più grandi reclami che ho con Spring. Prima di iniziare a fare lo sviluppo aziendale Java, non ne avevo bisogno.
rdasxy,

Sono uno sviluppatore Java, ma non mi piace molto la primavera per la sua complessità.
Mahmoud Hossam,

Risposte:


15

Altre piattaforme non hanno bisogno di Spring perché quelle lingue non sono così restrittive come Java.

Faccio un esempio con node.js

  • Inversione del contenitore di controllo: configurazione dei componenti dell'applicazione e gestione del ciclo di vita degli oggetti Java

la configurazione del server viene eseguita in codice o in un semplice file di configurazione json. Per quanto riguarda i sistemi IoC generici, semplicemente non ne abbiamo bisogno, Javascript è un linguaggio espressivo e dinamico. Sì, hai bisogno dell'IoC, ma è semplice, passa dipendenze ai tuoi oggetti come parametri di funzione.

  • Programmazione orientata all'aspetto: consente l'implementazione di routine trasversali

Semplicemente non penso che abbiamo bisogno di qualcosa del genere, scriviamo codice modulare e funziona.

  • Gestione delle transazioni: unifica diverse API di gestione delle transazioni e coordina le transazioni per gli oggetti Java

noSQL è incredibilmente popolare. Non esiste alcuna nozione di transazione.

Personalmente direi che tali sistemi sono gonfiati e ingegnerizzati e non ne hai bisogno. Altre lingue e piattaforme restano semplicemente snelle e agili.


8
Ti sei anche perso quanto sia semplice usare la tipizzazione delle anatre e le patch delle scimmie per iniettare cose in Python e Ruby.
Danny Staple,

3
Giusto, il motivo per cui altre lingue non hanno la primavera è perché ... non hanno bisogno della primavera per essere effettivamente utili ;-)
Dean Harding,

7
Dire che non hai bisogno di IoC, AOP o gestione transazionale è miope e sbagliato. Molte lingue di alto livello consentono di scrivere facilmente il codice utilizzando i principi di progettazione AOP e / o IoC. È solo che la maggior parte delle lingue di alto livello non hanno bisogno di una classe o di un contenitore espliciti per fornire tali funzionalità.
dietbuddha,

2
@Raynos Per quanto riguarda i sistemi IoC generici, semplicemente non ne abbiamo bisogno, javascript è un linguaggio espressivo e dinamico. Questa è disinformazione in una certa misura. Non pensi di averne bisogno. coffeescripter.com/2010/08/…
Aaron McIver il

4
@AaronMcSe avevi ragione, abbiamo bisogno dell'IoC.
Raynos,

15

Nella maggior parte dei linguaggi di alto livello è banale scrivere usando i principi di progettazione AOP e / o IoC.

Tutto ciò che serve per implementare AOP è che la lingua supporti le funzioni di ordine superiore. Per esempio:

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)

È inoltre possibile seguire i principi generali dell'IoC o dell'iniezione delle dipendenze durante la programmazione. Non è necessario un contenitore particolare per fornire tale funzionalità. Puoi semplicemente scrivere il codice in questo modo.

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

9

Bene Python gode della primavera anche Spring Python .

Il framework Spring è stato creato per facilitare lo sviluppo Java e ciò che è vero per lo sviluppo Java non è necessario per lo sviluppo di Ruby o Python.

Ruby, ad esempio, ha capacità di metaprogrammazione, il che significa che puoi creare il tuo AOP.

Ironia della sorte, tuttavia, i nuovi framework Web Java stanno cercando di catturare i framework Django e Rails (vedere ad esempio i framework Grails and Play!).


4
Grails non è un framework Java. È un framework Groovy. Groovy si compila in codice byte Java, ma non è Java.
Kevin Cline,

@kevincline Sì, lo sapevo, ma alla fine è un framework web JVM (costruito su Spring e Hibernate).
Chirone,

1
Sì, la cosa grandiosa di Grails è che non devi conoscere la primavera.
Kevin Cline,

1
@kevincline Non necessariamente vero. A volte devi tornare alla primavera e modificare le cose qua e là
Chirone,

3

Per Python, BlueBream (aka Zope 3) fornisce ciò che fa Spring e altro.

Complessità e potere hanno un costo, ci sono momenti in cui non vuoi pagarlo.

Molti programmatori trovano BlueBream scoraggiante e troppo impegnativo per ciò che devono fare, preferiscono toolkit più snelli e più piccoli. La maggior parte delle altre soluzioni (Django, ecc.) Si basano sul paradigma MVC.

Puoi vedere forze simili in azione anche nello spazio Java, con cose come il bellissimo Playframework .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.