2009-06-02 9 views
8

私は、Spring Framework for Javaの熱心なファンです(Rod Johnsonによる)。 私はPythonを学習しており、Spring for Pythonを見つけたことに興奮していました。 私は、 のこれらの2つの春の比較に関するコミュニティの意見を聞くことに興味があります。それはPythonのパラダイムにどれくらいうまく収まるのですか。Python for PythonとSpring for Javaとの比較方法

答えて

12

開示:私は春のPythonのプロジェクトリードしていますので、あなたは私の意見に偏りを検討することができます。

私は、Spring Pythonによって提供されるいくつかのオプションが有用であることを発見しました:aspect oriented programmingdependency injection, remoting, security, and easy database access

アスペクト指向プログラミングは、彼らが言うように、JavaよりもPythonで袖口を実装する方が簡単です。しかし、Spring Pythonは、ソースコードを編集することなく、既存のPythonモジュールに追加するのに十分簡単です。他のソリューションでは、メタプログラミングや元のソースコードの変更が必要です。私は既にPyGameアプリケーションにインターセプタを追加する方法を尋ねるフォーラムを1人の人が訪れたので、コードを邪魔にならずに「タップ」することができました。

すぐに多くの人々assume "dependency injection" or "IoC" instantly means "XML configuration files"。そうではありません。私たちはXML設定をサポートしていますが、Pythonデコレータを使用するだけで直接的に飛躍します。

私はすでに、Spring Pythonをシステムの重要な部分として使用している会社について知っています。彼らは改善を行い、新しい機能を追加し、一般的にはそれをソリューションの一部として使用することに興味があります。彼らはまた、あなたの興味をそそらせるために、ジャイモンの中で実行することを実験しました。

私の提案は、すべての機能を調べて、いずれかがあなたのニーズに合っているかどうかを確認することです。これが不必要な複雑さまたは補助剤の価値を追加するかどうかは、あなただけが決定することができます。すべてを使う必要はありません。あなたが必要とするものだけ。利用可能なものについてさらに詳しい情報を得るために、私はSpringOne Americas 2008カンファレンスで発表したIntroduction to Spring Pythonをご覧ください。

+0

Spring Python入門リンクが壊れています。最新のライブリンクを追加するリクエスト – gansub

+0

https://www.slideshare.net/gturnquist/intro-to-spring-python – gregturn

+0

ちなみに、書籍=> https://www.packtpub.com/application -development/spring-python-11 – gregturn

22

依存性注入フレームワークは、動的型指定言語とほとんど同じくらい有用ではありません。たとえば、プレゼンテーションを参照してくださいDependency Injection: Vitally important or totally irrelevant? 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() 
+0

6年後... :)ネストされた依存関係をどのように扱いますか(b(c(d)))? コンストラクタでさらに別のパラメータを追加しなければ、未知数の依存関係をどのように処理できますか? – dakt

0

良いもの。私はSpring Java、Spring Dot Netを使い、今はSpring Pythonから始めました。 Pythonは、プログラマにとって常に使いやすいものでした。特に書くのは簡単だからだと思います。私はSpring Dot Netがちょっと混乱していると感じましたが、Spring JavaとPythonの両方が似ているようです。彼らは違いがあると確信していますが、今のところ少なくとも私はPythonのSpring実装と混同しているわけではありません。