簡體   English   中英

Spring for Python 與 Spring for Java 相比如何

[英]How does Spring for Python compare with Spring for Java

我是 Java 的 Spring 框架的狂熱粉絲(由 Rod Johnson)。 我正在學習 Python 並且很高興找到 Spring for Python。 我很想聽聽社區對這兩種 Spring 的比較的看法。 它如何適合 Python 的范式等。

依賴注入框架在動態類型語言中幾乎沒有那么有用。 例如,請參閱演示文稿依賴注入:至關重要還是完全不相關? 在 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()

披露:我是 Spring Python 的項目負責人,所以你可以認為我的觀點有偏見。

我發現 Spring Python 提供的幾個選項很有用,包括:面向方面的編程、依賴注入、遠程處理、安全性和輕松的數據庫訪問。

正如他們所說,面向方面的編程比 java 更容易用 python 實現。 但是 Spring Python 可以很容易地添加到現有的 Python 模塊中,而無需編輯它們的源代碼。 其他解決方案需要元編程或修改原始源代碼。 我已經有一個人訪問我們的論壇,詢問如何向 PyGame 應用程序添加攔截器,以便他可以不顯眼地“點擊”一些代碼。

許多人很快就認為“依賴注入”或“IoC”的意思是“XML 配置文件”。 不是這樣。 雖然我們支持 XML 配置,但直接使用 python 裝飾器即可。

我已經知道一家公司正在使用 Spring Python 作為其系統的關鍵部分。 他們有興趣進行改進,添加新功能,並通常將其用作解決方案的一部分。 他們還嘗試在 jython 中運行它,以防引起您的興趣。

歸根結底,我的建議是檢查所有功能,看看是否有任何功能適合您的需求。 這是否增加了不必要的復雜性或簡潔的價值只能由您來決定。 您不必使用所有東西; 只有你需要的。 要獲得有關可用內容的更多信息,我邀請您查看我在 SpringOne Americas 2008 會議上介紹的 Spring Python 簡介

好東西。 我使用過 Spring Java、Spring Dot Net,現在開始使用 Spring Python。 對於程序員來說,Python 一直很容易使用。 我認為,特別是因為它很容易寫。 我發現 Spring Dot Net 有點令人困惑,但 Spring Java 和 Python 似乎很相似。 我確信它們有區別,但至少到目前為止,我對 Spring 的 Python 實現並不那么困惑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM