2009-08-10 23 views
0

實現極其鬆散耦合的最佳方法是什麼?如何實現軟件項目的模塊化

如果您想將軟件模塊化到極端程度,以至於沒有任何部件依賴系統中的任何其他部件,但他們仍然能夠進行通信,這意味着我們必須使用(技術不可知)來實現這一目標,那麼

建議請,認爲這是一個腦力激盪... :)

回答

1

數據。

如果你想鬆耦合,答案是數據。您的程序或組件不會相互「執行功能」,它們會將數據傳遞給對方。 (在內部,這可能會通過調用一個方法來完成 - 但是除了機制之外,它應該在概念上傳遞數據)。

如果您的流程中的數據被視爲不可變的,甚至更好。

這給出了清晰的組件邊界,並在很大程度上保護了對你的改變(因爲你可以相對容易地將一種形式的數據轉換成另一種形式)。它還可以輕鬆地轉移到多進程或聯網應用程序,因爲數據傳遞的語義無處不在 - 沒有傳遞一些新的數據,就不會假設神奇的隱藏狀態更改。

定義良好的接口傳遞數據,你是金。我的意思是數據 - 不是知道如何做各種魔法事物的「對象」。只是簡單的純數據。順便說一下 - 這並不是說對象在程序中沒有位置 - 它們是對您的數據採取行動的事情。

此外,請確保您的程序中處理數據的部分與程序中負責實際穿梭的部分以及將其顯示給用戶的部分分開。我知道,這就是整個'保持你的業務邏輯與持久性和UI層'分開的東西。

+0

相當輝煌其實:) – 2009-08-13 01:34:22

+0

我不知道這是多麼重要之前我開始走下這條道路,我只是想讓你知道這是我見過的最重要也是最好的建議。 '輝煌*...! – 2009-09-19 10:15:05

2

使用一些域名獨立式數據格式,以使模塊之間的通信或交換信息,如XML,RPC,HTTP等。

讓不同的團隊開發不同的模塊而不讓他們與每個模塊交談或者協調他們的努力。爲他們設定一個目標,即設計一個統一的模塊和一個通用接口,以便以後在各種角色的系統(當然,在模塊的功能範圍內)使用。

1

使用控制反轉框架,以便組件不必知道如何加載它們的依賴關係。

+0

不錯的。非常酷的想法;) – 2009-08-10 22:06:04

0

我認爲做到這一點的唯一方法是採用某種形式的「白板」系統,其中組件在一些可訪問的區域記下事實並觀察記錄事實的其他組件。這種體系結構被用於分佈式AI系統,但我從來沒有聽說過使用它們的真實世界的分佈式系統。您的組件顯然需要同意「白板」消息的格式和實際的實現,例如共享內存。

1

我認爲你提到的內容不能實現,或者即使可以實現,實現起來也很難,而且它沒有什麼優勢。

模塊化可以很好,但是有限制。當然,你可以設計你的系統,以便某些部分依賴於API,但不是特定的實現,我鼓勵這樣做,但「絕對沒有依賴」是幻想。 「溝通」很可能會產生依賴關係。

嘗試模塊化軟件是一件好事,但你太過分了。

+0

+1爲「通信很可能會創建依賴關係」,但我不同意......;) – 2009-08-10 22:08:21

1

讓每個系統都將其功能作爲REST或WS- *接口公開。

但是,更有趣的問題是您何時想要這樣做?您需要從您選擇的技術中擠出儘可能多的生產力/性能,這意味着使用技術特定的解決方案。

0

要100%模塊化可能很困難,不值得付出努力。對於應用程序中的類,可以使用依賴注入和控制反轉來鬆散耦合。

如果您正在討論更分散的系統方法,您可以使用SOAP或REST(REST是技術最中性的),以便每個模塊都提供合同,但在這種情況下,您將需要某種類型的集中式消息傳遞/路由系統,它知道模塊在哪裏和他們的合同,這樣他們就可以被調用,並實現某種標準的通信來報告成功/失敗,除非你的模塊溝通,你希望它進入黑洞永不再次聽到:)

只記得你越一般化,調試,維護,理解越困難,如果你的應用程序需要任何性能的表現,這些方法將是一些最慢的事情,你可以很有可能。