軟體元件
2015 年 9 月 13 日
從費力地編寫程式碼轉變為透過簡單地組裝元件來建構強大系統,一直是我進入這個專業領域以來的目標。這個目標有時會一瞥而過,但從未真正達成,儘管許多技術都曾懸掛著產業重用的胡蘿蔔。
當我們談論軟體元件時,通常最困難的步驟是討論它們是什麼。我最喜歡的定義仍然是這個
元件不是一種技術。技術人員似乎很難理解這一點。元件是關於客戶如何與軟體建立關係。他們希望能夠一次購買一部分軟體,並且能夠像升級音響一樣升級軟體。他們希望新元件能夠與舊元件無縫運作,並且能夠按照自己的時間表升級,而不是製造商的時間表。他們希望能夠混合和搭配來自不同製造商的元件。這是一個非常合理的要求。只是很難滿足
我將其總結為說軟體元件是可以獨立替換和升級的事物。
我將今日的元件視為兩種形式:函式庫和服務。函式庫包含一些在執行階段連結到程式的程式碼,成為客戶端程式的一部分。範例包括 Java 的 jar、C# 的組件、Ruby 的 gem 和 Javascript 的模組。要成為一個適當的元件,函式庫使用者應該保留何時以及是否升級供應商函式庫的決定權。因此,如果我選擇使用 6 個月前過時的函式庫版本,那是我的事。
服務是存在於其自身程序中的組件,[1]用戶端透過某些程序間通訊機制與它對話:RPC、透過 HTTP 的 RESTful 呼叫、訊息傳遞等。服務可以按照自己的時間表升級,而無需與用戶端協調,但為此,它們必須保留現有的用戶端合約,因此用戶端可以選擇何時升級其對服務的使用。對於服務來說,要成為組件,您永遠不需要協調一個服務與另一個服務的升級。
我認為組件是模組的一種特定形式。我將模組定義為軟體系統的區分,它允許我們僅透過了解其中一些定義良好的子集來修改系統,而模組就是那些定義良好的子集。組件是模組的一種形式,具有獨立替換的附加屬性。
修訂
2020-11-05:我正在翻閱我的檔案,發現了這篇 bliki 文章,我已經寫完了但從未發布。因此,我將其新增到我的 bliki 中,並附上我撰寫它的日期。
備註
1: 此脈絡中的服務不同於 Evans 分類 中的服務物件