Windows DNA中最核心也是最基礎的就是對於商務邏輯層設計提供的架構性指導,而COM則是架構性指導的核心概念。COM技術由來已久,它是基於組件的設計思想在Microsoft的技術產物。它促進基於組件的開發和物件導向的程式設計,它促進代碼在二進位層面上的重用,它也為COM組件之間的相互連信提供了必要的機制。如果你希望對COM技術有一個全面的瞭解,有很多書可供參考,如COM本質論、COM技術內幕、ATL技術內幕等。
Windows DNA的目標是為網路應用系統提供架構性的指導。提到網路我們必然會想到分散式處理。如何讓本地啟動並執行進程內或進程外COM組件能夠被遠程調用,這是Windows DNA所要解決的問題。Microsoft的解決之道就是DCOM,即分布式的COM。DCOM是基於RPC的,它的作用就是將用戶端的方法調用序列化然後傳遞到服務端,如果有傳回值服務端將調用結果序列化返回給用戶端。但是我們知道網路應用系統的一般問題包括並發、事務、安全等,Microsoft的工作就是讓他們的開發人員更加地關注業務而不是技術。顯而易見DCOM無法做到這一點,它做的只是模仿本地調用來實現遠程調用,僅此而已,而且最初的DCOM只有進程外的COM組件(.exe)才可以實現遠程調用。
那麼Microsoft需要一種機制來實現他們的目標。這就是COM+。我們可以認為COM+是一組服務,它不但實現了進程內組件的遠程調用,而且附加了並發、事務、安全、非同步呼叫等服務。如果你編寫過COM+組件你就能體會到Microsoft在這個方面做了很多工作,這樣你才可能在你編寫的COM+對象中訪問到事務上下文、安全上下文、構建參數,同時你無需為程式的並發做太多的工作。你所要做的就是考慮清楚你的COM+對象需要什麼的事務支援,需要什麼樣的安全性原則,需要什麼可配置性的參數等等,還需要注意的一點是你的COM+組件最好要是無狀態的,因為windows DNA要求你的體繫結構是可伸縮的,而可伸縮的體繫結構的一個最大特點就是無狀態,這樣才可能在實現系統的橫向可伸縮。對於COM+組件的安裝和部署,Microsoft也做了很多工作。
上面有提到COM+是一組服務的集合,這其中就包括佇列服務和分散式交易處理。如果將你的COM+對象標記為可隊列化的,那麼對於COM+對象的每次調用都會放到一個特定的windows隊列中,通過MSMQ服務實現可靠的遠程方法調用。如果將你的的COM+對象標記為支援事務或請求新事務等,則在你的COM+對象中你可以獲得事務上下文,並實現事務的操作,如放棄事務、提交事務等,底層的COM+則通過MTS、資源處理器等組件來實現兩階段交易處理,從而保障的你的業務得到有效而正確地處理。
總而言之,當考慮商務邏輯層設計的時候,優先考慮COM+技術,考慮商務邏輯需要什麼樣的事務支援,需要什麼樣的安全性原則,而且還要讓你的COM+對象可配置,並通過無狀態邏輯來實現業務層的橫向可伸縮。