Як Ruby, Python, PHP обходиться без весни?


13

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

Хоча я бачу цінність інверсії управління, орієнтованого на аспекти програмування тощо, яку приносить Spring, я не впевнений, як масивні веб-додатки, які не знаходяться на стеці Java, обробляють без такої рамки, як Spring.

Тож чи повинні розробники просто "миритися" з щільно з'єднаними компонентами та іншими скаргами, які Spring усуває або я щось пропускаю?

Для тих, хто не знайомий з Spring, особливості, які ми використовуємо найбільше:

  • Інверсія контейнера Control: конфігурація компонентів програми та управління життєвим циклом об'єктів Java,

  • Програмно-орієнтоване програмування: забезпечує реалізацію наскрізних процедур,

  • Управління транзакціями: об'єднує кілька API управління транзакціями та координує транзакції для об’єктів Java.


3
Напевно ви отримаєте кращі відповіді, якщо ви хоч коротко поясните, що робить Весна.
Пер Йоханссон

4
Тільки тому, що Pythonistas не використовують мовні слова Java, це не означає, що моделі дизайну суттєво відрізняються. Ну, може, крім втрати менше набряку.
vartec

6
Навіть з вашим визначенням я все ще абсолютно не маю уявлення, чим займається Весна.
sevenseacat

І це одна з найбільших скарг у мене із Весною. Перш ніж я почав займатися розробкою Java Java, я не мав потреби в цьому.
rdasxy

Я розробник Java, але мені дуже не подобається весна за її складність.
Махмуд Хоссам

Відповіді:


15

Іншим платформам Spring не потрібна, оскільки ці мови не є десь такими обмежувальними, як Java.

Наведу приклад з node.js

  • Інверсія контейнера Control: конфігурація компонентів програми та управління життєвим циклом об'єктів Java

конфігурація сервера здійснюється або в коді, або у простому файлі конфігурації json. Що стосується загальних систем IoC, вони нам просто не потрібні, Javascript - це виразна та динамічна мова. Так, вам потрібен IoC, але це просто, передайте залежності вашим об'єктам як функціональні параметри.

  • Програмно-орієнтоване програмування: дозволяє реалізувати наскрізні процедури

Я просто не думаю, що нам потрібно щось подібне, ми пишемо модульний код, і він просто працює.

  • Управління транзакціями: об'єднує кілька API управління транзакціями та координує транзакції для об’єктів Java

noSQL неймовірно популярний. Поняття про транзакцію не існує.

Особисто я б сказав, що такі системи роздуті і перероблені, і вони вам просто не потрібні. Інші мови та платформи просто залишаються худорлявими та спритними.


8
Ви також пропустили, як просто вводити качок та патч мавп, щоб вставити речі в Python та Ruby.
Danny Staple

3
Правильно, причина, що інших мов не має весни, полягає в тому, що ... їм весна не потрібна, щоб весна була корисною ;-)
Дін Хардінг

7
Скажімо, що вам не потрібно IoC, AOP або управління транзакціями, це короткозорість і неправильність. Багато мов високого рівня дозволяють легко писати код, використовуючи принципи дизайну AOP та / або IoC. Просто для більшості мов високого рівня не потрібен явний клас чи контейнер для надання цих можливостей.
дієтабудда

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()))

9

Добре Python насолоджується весною також Spring Python .

Весняний фреймворк був створений для полегшення розробки Java, і те, що справедливо для розробки Java, не обов'язково і для Ruby або Python.

Наприклад, Ruby має можливості метапрограмування, що означає, що ви можете створити свій власний AOP.

За іронією долі, нові веб-рамки Java намагаються зловити рамки Django та Rails (див., Наприклад, кадри Grails and Play!).


4
Грааль - не рамка Java. Це рамка Groovy. Groovy компілює в байт код Java, але це не Java.
кевін клайн

@kevincline Так, я знав, але наприкінці дня це веб-структура JVM (побудована на весну та сплячку).
Хірон

1
Так, чудова річ у Граалі полягає в тому, що вам не потрібно знати Весну.
Кевін Клайн

1
@kevincline Не обов'язково правда. Іноді вам доводиться повертатися до Весни та налаштовувати речі тут і там
Хірон

3

Для Python BlueBream (він же Zope 3) забезпечує те, що робить Spring та багато іншого.

Складність та потужність приносять свою ціну, бувають випадки, коли ви не хочете платити за це.

Багато програмістів вважають BlueBream грізним і надто багато для того, що їм потрібно зробити, вони віддають перевагу більш дрібним, меншим наборам інструментів. Більшість інших рішень (Django та ін.) Базуються на парадигмі MVC.

Ви можете бачити подібні сили в дії і в просторі Java з такими речами, як прекрасний Playframework .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.