構建高效的企業級Java應用系列(一)架構篇——3
3:區分邏輯層(layer)和物理層(tier)
不同邏輯層(layer)之間才是企業應用所關心的功能職責,軟件代碼基(codebase)的不同部分各自承擔著一項關鍵職責。物理層(tier),則是網絡拓撲中的物理機器。通常邏輯層都會映射到給定的物理層,比如數據層(layer)和數據庫層(tier),直接假設這種映射是一對一的話,可以消除考慮其他架構的可能性。雖然這種架構可能是最好的,但是這種假設應該是我們有意識的決定,而不是靠習慣做出的選擇。在有些場合可能需要我們變換這種一對一的映射關系。例如便利連鎖店的售貨系統,我們會這樣設計系統:把表示層、域邏輯層以及部分數據管理層都放置在客層,數據管理層的其它部分從客戶層、中間層(通過某種第3類型的JDBC網絡驅動程序),一直延伸到服務器層。每個便利店的終端在網絡連接斷開的時候一樣能夠運行應用程序,數據被緩存在本地機器,當網絡恢復的時候,就能夠用其更新中央數據庫。當我們把消息中介放置在客戶層時,就可以把消息存儲在本地,等網絡連接恢復的時候在傳遞出去,這是這種方法尤其有用。
考慮應用程序架構的時候,為了在集中化管理和通信成本之間找到最好的“平衡點”,要確保描繪出的系統的各個邏輯層次(表示層、域邏輯層、數據管理層)和網絡拓撲中的物理層次(客戶端、中間層、服務器層)。更重要的是,一定不能認定表示層就在客戶端,域邏輯層總在中間層,數據管理層總是在服務器上。