Как Spring для Python сравнивается с Spring для Java? - PullRequest
11 голосов
/ 02 июня 2009

Я заядлый поклонник среды Spring для Java (Род Джонсон). Я изучаю Python и был очень рад узнать о Spring for Python. Мне было бы интересно услышать мнение сообщества по сравнению эти два аромата весны. Насколько это соответствует парадигмам Python и т. Д.

Ответы [ 3 ]

23 голосов
/ 02 июня 2009

Фреймворки внедрения зависимостей не так полезны в динамически типизированном языке. См., Например, презентацию Внедрение зависимостей: жизненно важно или совершенно неактуально? В Java гибкость, обеспечиваемая инфраструктурой внедрения зависимостей, жизненно необходима, в то время как в Python это обычно приводит к ненужной сложности.

Это не значит, что принципы неверны. Посмотрите в этом примере, как добиться слабой связи между классами с помощью простых идиом:

# A concrete class implementing the greeting provider interface
class EnglishGreetingProvider(object):
    def get_greeting(self, who):
        return "Hello %s!" % who

# A class that takes a greeting provider factory as a parameter
class ConsoleGreeter(object):
    def __init__(self, who, provider=EnglishGreetingProvider):
        self.who = who
        self.provider = provider()
    def greet(self):
        print(self.provider.get_greeting(self.who))

# Default wiring
greeter = ConsoleGreeter(who="World")
greeter.greet()

# Alternative implementation
class FrenchGreetingProvider(object):
    def get_greeting(self, who):
        return "Bonjour %s!" % who
greeter = ConsoleGreeter(who="World", provider=FrenchGreetingProvider)
greeter.greet()
14 голосов
/ 03 июня 2009

РАСКРЫТИЕ ИНФОРМАЦИИ: Я руководитель проекта Spring Python, так что вы можете считать мое мнение предвзятым.

Я считаю, что некоторые опции, предоставляемые Spring Python, полезны, включая: аспектно-ориентированное программирование , внедрение зависимостей, удаленное взаимодействие, безопасность и простой доступ к базе данных .

Аспектно-ориентированное программирование, как говорится, легче реализовать без поддержки Python, чем Java. Но Spring Python позволяет легко добавлять существующие модули Python без редактирования их исходного кода. Другие решения требуют метапрограммирования или изменения исходного кода. У меня уже был один человек, который посещал наши форумы и спрашивал, как добавить перехватчик в приложение PyGame, чтобы он мог незаметно «нажать» на некоторый код.

Многие люди быстро предполагают, что «внедрение зависимостей» или «IoC» мгновенно означает «файлы конфигурации XML» . Не тот случай. Хотя мы поддерживаем конфигурацию XML, просто перейдем непосредственно к использованию декораторов Python.

Я уже знаю об одной компании, которая использует Spring Python в качестве ключевого элемента своей системы. Они заинтересованы в улучшении, добавлении новых функций и, как правило, использовании его как части своего решения. Они также экспериментировали с его запуском в jython, на случай, если это заинтересует вас.

В конце дня я предлагаю изучить все функции и посмотреть, соответствует ли какая-либо из них вашим потребностям. Добавляет ли это ненужную сложность или ценность сукцинта, зависит только от вас. Вам не нужно все использовать; только то, что тебе нужно. Чтобы получить больше информации о том, что доступно, я приглашаю вас посмотреть Введение в Spring Python , которое я представил на конференции SpringOne Americas 2008.

0 голосов
/ 08 мая 2012

Хорошие вещи. Я использовал Spring Java, Spring Dot Net и теперь начинаю с Spring Python. Python всегда был довольно прост в использовании для программистов; Я думаю, тем более, что это легко написать. Я обнаружил, что Spring Dot Net немного сбивает с толку, но Spring Java и Python кажутся похожими. Я уверен, что у них есть свои различия, но пока, по крайней мере, я не так запутался в реализации Spring на Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...