Jak radzi sobie Ruby, Python, PHP bez Springa?

13

Piszę aplikacje Java dla przedsiębiorstw i usługi sieciowe w pracy ( Spring , Hibernate, Maven, RESTEasy) oraz PHP (CakePHP) i Python (Django) dla moich pobocznych projektów.

Chociaż widzę wartość, jaką przynosi inwersja sterowania, programowanie zorientowane na aspekty itp., Które przynosi Spring, nie jestem pewien, jak potężne aplikacje internetowe, które nie znajdują się na stosie Java, radzą sobie bez frameworka takiego jak Spring.

Czy więc programiści muszą po prostu „pogodzić się” ze ściśle powiązanymi komponentami i innymi skargami, które Spring eliminuje, czy coś mi brakuje?

Dla tych, którzy nie znają wiosny, najczęściej używamy funkcji:

  • Inwersja kontenera Control: konfiguracja komponentów aplikacji i zarządzanie cyklem życia obiektów Java,

  • Programowanie zorientowane na aspekty: umożliwia wdrożenie procedur przekrojowych,

  • Zarządzanie transakcjami: ujednolica kilka interfejsów API do zarządzania transakcjami i koordynuje transakcje dla obiektów Java.

rdasxy
źródło
3
Prawdopodobnie otrzymasz lepsze odpowiedzi, jeśli przynajmniej krótko wyjaśnisz, co robi Wiosna.
Per Johansson,
4
To, że Pythonisty nie używają modnych słów Javy, nie oznacza, że ​​wzorce projektowe są znacząco różne. Cóż, może oprócz strat mniej wzdęć.
vartec,
6
Nawet z twoją definicją wciąż nie mam pojęcia, co robi Spring.
sevenseacat
I to jest jedna z największych skarg, jakie mam ze Springem. Zanim zacząłem tworzyć oprogramowanie Java dla przedsiębiorstw, nie było takiej potrzeby.
rdasxy
Jestem programistą Java, ale naprawdę nie lubię wiosny ze względu na jej złożoność.
Mahmoud Hossam,

Odpowiedzi:

15

Inne platformy nie potrzebują Springa, ponieważ te języki nie są tak restrykcyjne jak Java.

Podam przykład z node.js

  • Inwersja kontenera sterowania: konfiguracja komponentów aplikacji i zarządzanie cyklem życia obiektów Java

konfiguracja serwera odbywa się w kodzie lub w prostym pliku konfiguracyjnym json. Jeśli chodzi o ogólne systemy IoC, po prostu ich nie potrzebujemy, JavaScript to ekspresyjny i dynamiczny język. Tak, potrzebujesz IoC, ale to proste, przekaż zależności do obiektów jako parametry funkcji.

  • Programowanie zorientowane na aspekty: umożliwia wdrożenie procedur przekrojowych

Po prostu nie sądzę, że potrzebujemy czegoś takiego, piszemy modułowy kod i to po prostu działa.

  • Zarządzanie transakcjami: ujednolica kilka interfejsów API do zarządzania transakcjami i koordynuje transakcje dla obiektów Java

noSQL jest niezwykle popularny. Nie ma pojęcia transakcji.

Osobiście powiedziałbym, że takie systemy są nadęte i przerobione, a ty po prostu ich nie potrzebujesz. Inne języki i platformy są po prostu szczupłe i sprawne.

Raynos
źródło
8
Tęskniłeś także za tym, jak proste jest pisanie kaczek i łatanie małp do wstrzykiwania rzeczy w Pythonie i Ruby.
Danny Staple,
3
Racja, powodem, dla którego inne języki nie mają wiosny, jest to, że ... nie potrzebują one wiosny, żeby były przydatne ;-)
Dean Harding,
7
Mówienie, że nie potrzebujesz IoC, AOP lub zarządzania transakcjami, jest krótkowzroczne i błędne. Wiele języków wysokiego poziomu umożliwia łatwe pisanie kodu przy użyciu zasad projektowania AOP i / lub IoC. Po prostu większość języków wysokiego poziomu nie potrzebuje jawnej klasy ani kontenera, aby zapewnić te możliwości.
dietbuddha,
2
@Raynos Jeśli chodzi o ogólne systemy IoC, po prostu ich nie potrzebujemy, javascript to ekspresyjny i dynamiczny język. W pewnym stopniu jest to dezinformacja. Nie uważasz, że ich potrzebujesz. coffeescripter.com/2010/08/…
Aaron McIver,
4
@AaronMcJeśli miałeś rację, potrzebujemy IoC.
Raynos,
15

W większości języków wysokiego poziomu pisanie przy użyciu zasad projektowania AOP i / lub IoC jest banalne.

Wszystko, czego potrzebujesz, aby wdrożyć AOP, to język obsługujący funkcje wyższego rzędu. Na przykład:

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)

Podczas programowania możesz także przestrzegać ogólnych zasad IoC lub Injection Dependency. Nie potrzebujesz konkretnego kontenera, aby zapewnić taką możliwość. Możesz po prostu napisać kod w ten sposób.

def etl(iextract, transformations, iload):
  return iload(itertools.imap(compose(*transformations), iextract()))
dietbuddha
źródło
9

Cóż, Python cieszy się wiosną także Spring Python .

Framework Spring został stworzony w celu ułatwienia programowania w Javie, a to, co jest prawdziwe w przypadku programowania Java, nie jest konieczne w przypadku programowania Ruby lub Python.

Na przykład Ruby ma możliwości Metaprogramowania, co oznacza, że ​​możesz stworzyć swój własny AOP.

Jak na ironię, nowe frameworki Java próbują złapać frameworki Django i Rails (patrz na przykład frameworki Grails i Play!).

Chiron
źródło
4
Grails nie jest strukturą Java. Jest to framework Groovy. Groovy kompiluje się do kodu bajtowego Java, ale nie jest to Java.
kevin cline,
@kevincline Tak, wiem, ale pod koniec dnia jest to framework internetowy JVM (zbudowany na Spring i Hibernacji).
Chiron,
1
Tak, wielką zaletą Grails jest to, że nie musisz znać wiosny.
kevin cline,
1
@kevincline Niekoniecznie prawda. Czasami musisz wracać do wiosny i poprawiać tu i tam
Chiron,
3

W przypadku Pythona BlueBream (znany również jako Zope 3) zapewnia to, co robi Spring i nie tylko.

Złożoność i moc wiążą się z kosztami, są chwile, kiedy nie chcesz jej płacić.

Wielu programistów uważa BlueBream za zniechęcające i zdecydowanie za dużo w stosunku do tego, co muszą zrobić, wolą cieńsze, mniejsze zestawy narzędzi. Większość innych rozwiązań (Django itp.) Opiera się na paradygmacie MVC.

Podobne siły działają również w przestrzeni Java, z takimi rzeczami jak piękny Playframework .

Roberto Lupi
źródło