設計是一種思想,而軟體設計模式是人們在長期的軟體開發經驗中提取出來
的通用方法並被實踐證明是確切可行的,把模式應用到設計之中,會讓我們的軟
件更加強健,讓我們的開發更加高效。
現在我們可以開始來**業務邏輯層的設計方法。在本文中說的是利用介面
來封裝賬戶管理實現的變化。
在設計中,我們常常會遇到同一功能被要求用不同方法進行實現的問
題。比如說在乙個軟體的業務邏輯層設計中,使用者的使用者管理(註冊、登入、注
銷、修改)模組部分首先實現的是本地賬戶的登入功能,賬戶用乙個本地檔案進
行儲存操作。但客戶這時卻說將來他們希望該軟體能夠實行遠端登入,用乙個服
務器來儲存使用者資料。這意味著要改變已經編寫好的**來滿足客戶的要求,考
慮到使用者管理是乙個常用的操作,且它實現的業務邏輯是通用的,介面也是相同
的。我們可以把它做成乙個介面,那麼以後需要編寫使用者管理時直接使用這個介面
便可。乙個軟體設計思想是,把變化的部分封裝起來,即提取它們的共同功能
用介面或抽象類封裝起來,之所以說變化是因為這些共同功能有不同的實現。
根據這種思想,我們可以設計乙個介面類
useroperate
,再用兩個類分別實
現這個介面,其中本地使用者管理類為
localuserop
,而遠端使用者管理類為
netuserop
。實現的類圖如下:
在介面中定義的函式提供了註冊、登入、登出、修改和檢查登入等統一接
口。而實現的兩個子類可以對這些功能有不同的實現方法。比如
register
函式的註冊功能,本地賬戶
localuseop
類在register
中呼叫資料訪問層的函式
把該賬戶寫進本地檔案中。而
netuserop
則可能呼叫
函式sendregistercommand(user)
將賬戶傳給遠端伺服器請求註冊。儘管它
們的實現有天和地一般的差別,但是因為介面的封裝,在整個系統中會帶來極大
的便利。比如說要實現網路功能,只需要寫上
useroperate userop = new netuserop( serverip,serverport);
在表示層中使用者需要註冊新賬號時,只需要簡單呼叫
userop.register(user)
即可。如果使用者又希望轉變為本地使用者管理,僅需
new那段**改為
useroperate userop = new localuserop( filename);
即可,其它地方的**完全不需要更改!
由上面我們也可以看到乙個流程,即表示層呼叫業務邏輯層,業務邏輯層調
用資料訪問層處理邏輯並返回資料給表示層。在這設計之中我們使用了介面來封
裝,使得表示層可以很容易的使用業務邏輯層的功能,也減弱了層與層之間的耦
合度。
有點累了,改天再更新另外乙個很實用的觀察者模式。
封裝變化(三)
設想這樣乙個需求,我們需要為自己的框架提供乙個負責排序的元件。目前需要實現的是氣泡排序演算法和快速排序演算法,根據 面向介面程式設計 的思想,我們可以為這些排序演算法提供乙個統一的介面isort,在這個介面中有乙個方法sort 它能接受乙個object陣列引數。對陣列進行排序後,返回該陣列。介面的定...
封裝變化 Part Three
filed under design pattern bruce zhang 6 35 pm 設想這樣乙個需求,我們需要為自己的框架提供乙個負責排序的元件。目前需要實現的是氣泡排序演算法和快速排序演算法,根據 面向介面程式設計 的思想,我們可以為這些排序演算法提供乙個統一的介面isort,在這個介面...
封裝變化(三)
設想這樣乙個需求,我們需要為自己的框架提供乙個負責排序的元件。目前需要實現的是氣泡排序演算法和快速排序演算法,根據 面向介面程式設計 的思想,我們可以為這些排序演算法提供乙個統一的介面isort,在這個介面中有乙個方法sort 它能接受乙個object陣列引數。對陣列進行排序後,返回該陣列。介面的定...