Как Ruby, Python, PHP обходятся без Spring?

13

Я пишу корпоративные Java-приложения и веб-сервисы на работе ( Spring , Hibernate, Maven, RESTEasy) и PHP (CakePHP) и Python (Django) для своих сторонних проектов.

Хотя я вижу ценность, которую привносит Spring в Inversion of Control, Aspect Oriented Programming и т. Д., Я не уверен, как массивные веб-приложения, не входящие в стек Java, обходятся без такой среды, как Spring.

Итак, нужно ли разработчикам просто «мириться» с тесно связанными компонентами и другими обидами, которые устраняет Spring, или я что-то упускаю?

Для тех, кто не знаком с Spring, мы чаще всего используем следующие функции:

  • Контейнер «Инверсия»: настройка компонентов приложения и управление жизненным циклом объектов Java,

  • Аспектно-ориентированное программирование: позволяет реализовать сквозные процедуры,

  • Управление транзакциями: объединяет несколько API-интерфейсов управления транзакциями и координирует транзакции для объектов Java.

rdasxy
источник
3
Вы, вероятно, получите лучшие ответы, если хотя бы кратко объясните, что делает Spring.
Пер Йоханссон
4
Тот факт, что Pythonistas не используют модные слова Java, не означает, что шаблоны проектирования существенно отличаются. Ну, может быть, кроме потери меньше раздувать.
vartec
6
Даже с вашим определением я до сих пор не имею ни малейшего представления о том, что делает Spring.
Seseseacat
И это одна из самых больших претензий, которые я испытываю к весне. До того, как я начал заниматься корпоративной Java-разработкой, она мне не понадобилась.
rdasxy
Я Java-разработчик, но мне очень, очень не нравится весна из-за ее сложности.
Махмуд Хоссам

Ответы:

15

Другие платформы не нуждаются в Spring, потому что эти языки не так строги, как Java.

Я приведу пример с node.js

  • Контейнер «Инверсия»: настройка компонентов приложения и управление жизненным циклом объектов Java

Конфигурация сервера выполняется либо в коде, либо в простом конфигурационном файле json. Что касается универсальных систем IoC, они нам просто не нужны, Javascript - это выразительный и динамичный язык. Да, вам нужен IoC, но это просто, передавайте зависимости своим объектам в качестве параметров функции.

  • Аспектно-ориентированное программирование: позволяет реализовать сквозные процедуры

Я просто не думаю, что нам нужно что-то подобное, мы пишем модульный код, и он просто работает.

  • Управление транзакциями: объединяет несколько API-интерфейсов управления транзакциями и координирует транзакции для объектов Java

noSQL невероятно популярен. Там нет понятия транзакции.

Лично я бы сказал, что такие системы раздуты и чрезмерно спроектированы, и они вам просто не нужны. Другие языки и платформы просто остаются стройными и проворными.

Raynos
источник
8
Вы также пропустили, как просто использовать Duck Typing и Monkey Patching для внедрения чего-либо в Python и Ruby.
Дэнни Стейпл
3
Правильно, причина, по которой другие языки не имеют Spring, заключается в том, что ... им не нужен Spring, чтобы на самом деле быть полезным ;-)
Дин Хардинг
7
Сказать, что вам не нужен IoC, AOP или управление транзакциями, недальновидно и неправильно. Многие языки высокого уровня позволяют легко писать код, используя принципы проектирования AOP и / или IoC. Просто большинство языков высокого уровня не нуждаются в явном классе или контейнере для предоставления этих возможностей.
Dietbuddha
2
@Raynos Что касается универсальных систем IoC, они нам просто не нужны, javascript - это выразительный и динамичный язык. Это в некоторой степени дезинформация. Вы не думаете, что они вам нужны. coffeescripter.com/2010/08/…
Аарон Макивер
4
@AaronMc Если ты был прав, нам нужен IoC.
Рейнос
15

На большинстве языков высокого уровня писать тривиально, используя принципы проектирования AOP и / или IoC.

Все, что вам нужно для реализации AOP - это чтобы язык поддерживал функции более высокого порядка. Например:

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)

Вы также можете следовать общим принципам IoC или Dependency Injection при программировании. Вам не нужен конкретный контейнер, чтобы обеспечить эту возможность. Вы можете просто написать код таким образом.

def etl(iextract, transformations, iload):
  return iload(itertools.imap(compose(*transformations), iextract()))
dietbuddha
источник
9

Ну, Python наслаждается весной и Spring Python .

Spring Framework был создан для облегчения разработки Java, и то, что верно для разработки Java, не обязательно верно для разработки на Ruby или Python.

Например, в Ruby есть возможности метапрограммирования, что означает, что вы можете создать свой собственный АОП.

По иронии судьбы, новые веб-фреймворки Java пытаются поймать фреймворки Django и Rails (см., Например, фреймворки Grails и Play!).

Chiron
источник
4
Grails не является фреймворком Java. Это Groovy рамки. Groovy компилируется в байт-код Java, но это не Java.
Кевин Клайн
@kevincline Да, я знаю, но в конце концов это веб-фреймворк JVM (построенный на Spring и Hibernate).
Хирон
1
Да, самое замечательное в Grails - то, что тебе не нужно знать Spring.
Кевин Клайн
1
@kevincline Не обязательно правда. Иногда приходится возвращаться к весне и кое-где настраивать
Chiron
3

Для Python BlueBream (он же Zope 3) предоставляет то, что делает Spring и многое другое.

Сложность и мощь обходятся дорого, бывают моменты, когда вы не хотите их платить.

Многие программисты находят BlueBream пугающим и слишком много для того, что им нужно делать, они предпочитают более узкие, меньшие наборы инструментов. Большинство других решений (Django и т. Д.) Основаны на парадигме MVC.

Вы можете увидеть аналогичные силы в действии и в пространстве Java, с такими вещами, как красивая Playframework .

Роберто Люпи
источник