Como Ruby, Python, PHP gerencia sem Spring?


13

Eu escrevo aplicativos Java corporativos e serviços da Web no trabalho ( Spring , Hibernate, Maven, RESTEasy) e PHP (CakePHP) e Python (Django) para meus projetos paralelos.

Embora eu veja o valor que a Inversão de controle, a programação orientada a aspectos, etc., que o Spring traz, não tenho certeza de como aplicativos Web massivos que não estão na pilha Java gerenciam sem uma estrutura como o Spring.

Então, os desenvolvedores precisam apenas "tolerar" componentes fortemente acoplados e outras queixas que o Spring elimina ou estou perdendo alguma coisa?

Para quem não conhece o Spring, os recursos que mais usamos são:

  • Inversão do contêiner de controle: configuração dos componentes do aplicativo e gerenciamento do ciclo de vida de objetos Java,

  • Programação orientada a aspectos: permite a implementação de rotinas transversais,

  • Gerenciamento de transações: unifica várias APIs de gerenciamento de transações e coordena transações para objetos Java.


3
Você provavelmente obterá melhores respostas se, pelo menos brevemente, explicar o que o Spring faz.
Per Johansson

4
Só porque os Pythonistas não usam os chavões de Java, não significa que os padrões de design são significativamente diferentes. Bem, talvez exceto perda menos inchaço.
vartec

6
Mesmo com sua definição, ainda não tenho absolutamente nenhuma idéia do que o Spring faz.
sevenseacat

E essa é uma das maiores queixas que tenho com a Spring. Antes de começar a desenvolver o desenvolvimento corporativo Java, não era necessário.
Rdaxy

Sou desenvolvedor Java, mas realmente não gosto da primavera por sua complexidade.
Mahmoud Hossam

Respostas:


15

Outras plataformas não precisam do Spring, porque essas linguagens não são nem de longe tão restritivas quanto o Java.

Vou dar um exemplo com node.js

  • Inversão do contêiner de controle: configuração dos componentes do aplicativo e gerenciamento do ciclo de vida de objetos Java

A configuração do servidor é feita no código ou em um simples arquivo json config. Quanto aos sistemas genéricos de IoC, simplesmente não precisamos deles, o Javascript é uma linguagem expressiva e dinâmica. Sim, você precisa de IoC, mas isso é simples, passe dependências para seus objetos como parâmetros de função.

  • Programação orientada a aspectos: permite a implementação de rotinas transversais

Simplesmente não acho que precisamos de algo assim, escrevemos código modular e simplesmente funciona.

  • Gerenciamento de transações: unifica várias APIs de gerenciamento de transações e coordena transações para objetos Java

noSQL é incrivelmente popular. Não há noção de transação.

Pessoalmente, eu diria que esses sistemas são inchados e super projetados e você simplesmente não precisa deles. Outros idiomas e plataformas simplesmente permanecem enxutos e ágeis.


8
Você também perdeu o quão simples é usar a digitação de patos e patches de macacos para injetar coisas no Python e Ruby.
Danny Staple

3
Certo, a razão de outras línguas não têm Primavera é porque ... eles não precisam da Primavera para ser realmente útil ;-)
Dean Harding

7
Dizer que você não precisa de IoC, AOP ou gerenciamento transacional é míope e errado. Muitas linguagens de alto nível permitem que você escreva facilmente códigos usando os princípios de design de AOP e / ou IoC. É que a maioria das linguagens de alto nível não precisa de uma classe ou contêiner explícito para fornecer esses recursos.
precisa saber é o seguinte

2
@ Raynos Quanto aos sistemas genéricos de IoC, simplesmente não precisamos deles, o javascript é uma linguagem expressiva e dinâmica. Isso é desinformação até certo ponto. Você não acha que precisa deles. coffeescripter.com/2010/08/…
Aaron McIver

4
@AaronMcIver você estava certo, precisamos de IoC.
Raynos

15

Na maioria das linguagens de alto nível, é trivial escrever usando os princípios de design de AOP e / ou IoC.

Tudo o que você precisa para implementar o AOP é que o idioma suporte funções de ordem superior. Por exemplo:

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)

Você também pode seguir os princípios gerais de IoC ou Injeção de Dependência ao programar. Você não precisa de um contêiner específico para fornecer esse recurso. Você pode simplesmente escrever o código dessa maneira.

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

9

Bem Python gosta da Primavera também Spring Python .

O framework Spring foi criado para facilitar o desenvolvimento Java e o que é verdadeiro para o desenvolvimento Java não é necessário para o desenvolvimento Ruby ou Python.

Ruby, por exemplo, possui recursos de metaprogramação, o que significa que você pode criar seu próprio AOP.

Ironicamente, as novas estruturas Java da Web estão tentando capturar as estruturas Django e Rails (consulte estruturas Grails e Play! Por exemplo).


4
Grails não é uma estrutura Java. É uma estrutura Groovy. O Groovy compila no código de bytes Java, mas não é Java.
kevin Cline

@kevincline Sim, eu sabia, mas no final do dia é uma estrutura da web da JVM (construída no Spring e Hibernate).
Quíron

1
Sim, o melhor de Grails é que você não precisa conhecer a Spring.
kevin Cline

1
@kevincline Não é necessariamente verdade. Às vezes você tem que cair de volta para Primavera e ajustar as coisas aqui e ali
Chiron

3

Para Python, o BlueBream (também conhecido como Zope 3) fornece o que o Spring faz e muito mais.

Complexidade e poder têm um custo, há momentos em que você não deseja pagar.

Muitos programadores acham o BlueBream assustador e exagerado para o que precisam fazer, preferindo kits de ferramentas menores e mais enxutos. A maioria das outras soluções (Django, etc.) é baseada no paradigma MVC.

Você também pode ver forças similares em ação no espaço Java, com coisas como o belo Playframework .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.