Comment Ruby, Python, PHP se débrouillent-ils sans Spring?

13

J'écris des applications Java d'entreprise et des services web au travail ( Spring , Hibernate, Maven, RESTEasy) et PHP (CakePHP) et Python (Django) pour mes projets annexes.

Bien que je vois la valeur qu'apporte l'inversion de contrôle, la programmation orientée aspect, etc. que Spring apporte, je ne sais pas comment les applications Web massives qui ne sont pas sur la pile Java gèrent sans un cadre comme Spring.

Alors, les développeurs doivent-ils simplement "supporter" des composants étroitement couplés et d'autres griefs que Spring élimine ou ai-je raté quelque chose?

Pour ceux qui ne connaissent pas Spring, les fonctionnalités que nous utilisons le plus sont:

  • Inversion du conteneur Control: configuration des composants applicatifs et gestion du cycle de vie des objets Java,

  • Programmation orientée aspect: permet la mise en œuvre de routines transversales,

  • Gestion des transactions: unifie plusieurs API de gestion des transactions et coordonne les transactions pour les objets Java.

rdasxy
la source
3
Vous obtiendrez probablement de meilleures réponses si vous expliquez au moins brièvement ce que fait Spring.
Per Johansson
4
Ce n'est pas parce que les pythonistes n'utilisent pas les mots à la mode de Java que les modèles de conception sont sensiblement différents. Eh bien, peut-être sauf perte moins de ballonnement.
vartec
6
Même avec votre définition, je n'ai absolument aucune idée de ce que fait Spring.
sevenseacat
Et c'est l'un des plus gros griefs que j'ai avec Spring. Avant de commencer le développement d'entreprise Java, je n'en avais pas besoin.
rdasxy
Je suis un développeur Java, mais je n'aime vraiment pas vraiment le printemps pour sa complexité.
Mahmoud Hossam

Réponses:

15

D'autres plates-formes n'ont pas besoin de Spring, car ces langages ne sont pas aussi restrictifs que Java.

Je vais donner un exemple avec node.js

  • Inversion du conteneur Control: configuration des composants applicatifs et gestion du cycle de vie des objets Java

la configuration du serveur se fait soit en code soit en un simple fichier de configuration json. Quant aux systèmes IoC génériques, nous n'en avons tout simplement pas besoin, Javascript est un langage expressif et dynamique. Oui, vous avez besoin d'IoC mais c'est simple, passez des dépendances à vos objets en tant que paramètres de fonction.

  • Programmation orientée aspect: permet la mise en œuvre de routines transversales

Je ne pense tout simplement pas que nous ayons besoin de quelque chose comme ça, nous écrivons du code modulaire et cela fonctionne.

  • Gestion des transactions: unifie plusieurs API de gestion des transactions et coordonne les transactions pour les objets Java

noSQL est incroyablement populaire. Il n'y a aucune notion de transaction.

Personnellement, je dirais que de tels systèmes sont gonflés et trop conçus et que vous n'en avez tout simplement pas besoin. D'autres langues et plates-formes restent simplement allégées et agiles.

Raynos
la source
8
Vous avez également manqué à quel point il est simple d'utiliser la frappe de canard et le patch de singe pour injecter des choses en Python et Ruby.
Danny Staple
3
C'est vrai, la raison pour laquelle les autres langues n'ont pas Spring est parce que ... elles n'ont pas besoin de Spring pour être réellement utiles ;-)
Dean Harding
7
Dire que vous n'avez pas besoin d'IoC, d'AOP ou de gestion transactionnelle est à courte vue et faux. De nombreux langages de haut niveau vous permettent d'écrire facilement du code en utilisant les principes de conception AOP et / ou IoC. C'est juste que la plupart des langages de haut niveau n'ont pas besoin d'une classe explicite ou d'un conteneur pour fournir ces capacités.
dietbuddha
2
@Raynos Quant aux systèmes IoC génériques, nous n'en avons tout simplement pas besoin, le javascript est un langage expressif et dynamique. C'est de la désinformation dans une certaine mesure. Vous ne pensez pas en avoir besoin. coffeescripter.com/2010/08/…
Aaron McIver
4
@AaronMcIver vous aviez raison, nous avons besoin d'IoC.
Raynos
15

Dans la plupart des langages de haut niveau, il est trivial d'écrire en utilisant les principes de conception AOP et / ou IoC.

Tout ce dont vous avez besoin pour implémenter AOP est que le langage prenne en charge des fonctions d'ordre supérieur. Par exemple:

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)

Vous pouvez également suivre les principes généraux de l'IoC ou de l'injection de dépendances lors de la programmation. Vous n'avez pas besoin d'un conteneur particulier pour fournir cette capacité. Vous pouvez simplement écrire le code de cette façon.

def etl(iextract, transformations, iload):
  return iload(itertools.imap(compose(*transformations), iextract()))
Dietbuddha
la source
9

Eh bien Python apprécie le printemps aussi Spring Python .

Le framework Spring a été créé pour faciliter le développement Java et ce qui est vrai pour le développement Java n'est pas nécessairement vrai pour le développement Ruby ou Python.

Ruby, par exemple, a des capacités de métaprogrammation, ce qui signifie que vous pouvez créer votre propre AOP.

Ironiquement, les nouveaux frameworks Web Java tentent d'attraper les frameworks Django et Rails (voir les frameworks Grails and Play! Par exemple).

Chiron
la source
4
Grails n'est pas un framework Java. C'est un framework Groovy. Groovy compile en code octet Java, mais ce n'est pas Java.
Kevin Cline
@kevincline Oui, je le savais, mais en fin de compte, c'est un framework Web JVM (construit sur Spring et Hibernate).
Chiron
1
Oui, la grande chose à propos de Grails est que vous n'avez pas à connaître le printemps.
Kevin Cline
1
@kevincline Pas nécessairement vrai. Parfois, vous devez vous replier sur le printemps et modifier les choses ici et là
Chiron
3

Pour Python, BlueBream (alias Zope 3) fournit ce que fait Spring et plus encore.

La complexité et la puissance ont un prix, il y a des moments où vous ne voulez pas les payer.

De nombreux programmeurs trouvent BlueBream intimidant et beaucoup trop pour ce qu'ils doivent faire, ils préfèrent des boîtes à outils plus légères et plus petites. La plupart des autres solutions (Django, etc.) sont basées sur le paradigme MVC.

Vous pouvez également voir des forces similaires en action dans l'espace Java, avec des choses comme le magnifique Playframework .

Roberto Lupi
la source