Spring, Ruby, Python, PHP는 어떻게 관리합니까?


13

필자는 부수 프로젝트를 위해 회사 Java 애플리케이션 및 웹 서비스 ( Spring , Hibernate, Maven, RESTEasy) 및 PHP (CakePHP) 및 Python (Django)을 작성합니다.

Spring이 가져 오는 Inversion of Control, Aspect Oriented Programming 등의 가치를 알지만 Java 스택에없는 대규모 웹 응용 프로그램이 Spring과 같은 프레임 워크없이 어떻게 관리되는지 확실하지 않습니다.

따라서 개발자는 Spring이 제거하거나 누락 된 것이있는 밀접하게 결합 된 구성 요소 및 기타 불만을 "만들어야"합니까?

Spring에 익숙하지 않은 사용자를 위해 가장 많이 사용하는 기능은 다음과 같습니다.

  • 제어 컨테이너 반전 : 응용 프로그램 구성 요소 구성 및 Java 객체의 수명주기 관리

  • 측면 지향 프로그래밍 : 교차 절단 루틴 구현,

  • 트랜잭션 관리 : 여러 트랜잭션 관리 API를 통합하고 Java 객체에 대한 트랜잭션을 조정합니다.


3
Spring이하는 일을 최소한 간략히 설명하면 더 나은 답변을 얻을 수 있습니다.
당 Johansson

4
Pythonista가 Java의 유행어를 사용하지 않는다고해서 디자인 패턴이 크게 다른 것은 아닙니다. 글쎄, 아마 덜 부풀어 손실을 제외하고.
vartec

6
당신의 정의에도 불구하고 나는 여전히 Spring이 무엇을하는지 전혀 모른다.
sevenseacat

그리고 그것은 내가 봄에 대해 가장 큰 불만 중 하나입니다. Java 엔터프라이즈 개발을 시작하기 전에는 그럴 필요가 없었습니다.
rdasxy의

저는 Java 개발자이지만 복잡성 때문에 봄을 정말로 싫어합니다.
Mahmoud Hossam

답변:


15

다른 플랫폼은 Spring이 필요하지 않습니다. 그 언어는 Java만큼 제한적이지 않기 때문입니다.

node.js를 예로 들어 보겠습니다.

  • 제어 컨테이너 반전 : 응용 프로그램 구성 요소 구성 및 Java 객체의 수명주기 관리

서버 구성은 코드 또는 간단한 json 구성 파일에서 수행됩니다. 일반적인 IoC 시스템은 단순히 필요하지 않습니다. Javascript는 표현적이고 역동적 인 언어입니다. 예, IoC가 필요하지만 간단합니다. 함수 매개 변수로 객체에 종속성을 전달하십시오.

  • 측면 지향 프로그래밍 : 교차 절단 루틴 구현 가능

나는 우리가 이와 같은 것을 필요로하지 않는다고 생각하고 모듈 형 코드를 작성하며 작동합니다.

  • 트랜잭션 관리 : 여러 트랜잭션 관리 API를 통합하고 Java 객체에 대한 트랜잭션을 조정

noSQL은 매우 인기가 있습니다. 거래 개념은 없습니다.

개인적으로 나는 그러한 시스템이 부풀어 오르고 과장되어 있다고 말하고 싶을뿐입니다. 다른 언어와 플랫폼은 단순하고 민첩합니다.


8
또한 오리 타이핑과 원숭이 패치를 사용하여 파이썬과 루비로 물건을 주입하는 것이 얼마나 간단한지를 놓쳤습니다.
Danny Staple

3
오른쪽, 다른 언어는 스프링이없는 이유는 ;-)가 봄을 필요로하지 않기 때문에 ... 실제로 도움이 될 것입니다
딘 하딩

7
IoC, AOP 또는 트랜잭션 관리가 필요하지 않다는 말은 시력이 좋지 않고 잘못되었습니다. 많은 고급 언어를 사용하면 AOP 및 / 또는 IoC 디자인 원칙을 사용하여 코드를 쉽게 작성할 수 있습니다. 대부분의 고급 언어에는 이러한 기능을 제공하기 위해 명시 적 클래스 또는 컨테이너가 필요하지 않습니다.
dietbuddha

2
@Raynos 일반적인 IoC 시스템은 단순히 필요하지 않습니다. 자바 스크립트는 표현적이고 역동적 인 언어입니다. 이것은 어느 정도 잘못된 정보입니다. 당신은 그들이 필요 하다고 생각 하지 않습니다 . coffeescripter.com/2010/08/…
Aaron McIver

4
@AaronMcI 당신이 옳았다면, 우리는 IoC가 필요합니다.
Raynos

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 또는 종속성 주입 원칙을 따를 수도 있습니다. 해당 기능을 제공하기 위해 특정 컨테이너가 필요하지 않습니다. 그런 식으로 코드를 작성할 수 있습니다.

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

9

Python은 Spring Python 도 좋아합니다 .

Spring 프레임 워크는 Java 개발을 용이하게하기 위해 만들어졌으며 Java 개발에 필요한 것은 Ruby 또는 Python 개발에 반드시 필요한 것은 아닙니다.

예를 들어 루비에는 메타 프로그래밍 기능이있어 자신 만의 AOP를 만들 수 있습니다.

아이러니하게도, 새로운 Java 웹 프레임 워크는 Django and Rails 프레임 워크를 포착하려고합니다 (예를 들어 Grails and Play! 프레임 워크 참조).


4
Grails는 Java 프레임 워크가 아닙니다. Groovy 프레임 워크입니다. Groovy는 Java 바이트 코드로 컴파일하지만 Java가 아닙니다.
케빈 클라인

@kevincline 예, 알고 있었지만 결국에는 JVM 웹 프레임 워크입니다 (Spring 및 Hibernate에 빌드 됨).
Chiron

1
그래, Grails의 가장 큰 장점은 Spring을 알 필요가 없다는 것입니다.
케빈 클라인

1
@kevincline 반드시 그런 것은 아닙니다. 때때로 당신은 봄으로 돌아가서 여기저기서 조정해야합니다
Chiron

3

Python의 경우 BlueBream (일명 Zope 3)은 Spring의 기능 등을 제공합니다.

복잡성과 힘은 비용이 들며, 지불하고 싶지 않은 경우가 있습니다.

많은 프로그래머들이 BlueBream이 어려워하고해야 할 일에 너무 많은 길을 찾게되면 더 작고 작은 툴킷을 선호합니다. 다른 솔루션 (Django 등)의 대부분은 MVC 패러다임을 기반으로합니다.

아름다운 Playframework 와 같은 것들로 자바 공간에서도 비슷한 힘이 작용하는 것을 볼 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.