Dispatcher Pattern
出自VFP Wiki
Dispatcher Pattern
的原始碼
跳轉到:
導航
,
搜尋
根據以下的原因,您並無權限去做編輯這個頁面:
你所請求執行的操作被禁止。
你可以檢視並複製本頁面的原始碼。
====Dispatcher Pattern==== 看完 RUN!PC 六月號由李維先生所寫的"由軟體品質檢驗談Design Pattern的應用"一文,我覺得用 VFP 就可以很簡單的作到,所以就以 VFP 實作. 該文以計算牌照稅為引子 計算牌照稅的時候,會需要依照汽缸的cc數以及私人/營業用車來判定收費的標準,照一般的寫法,很自然就會用到很多 If...Then...Else 或 do case...endcase, 可是這樣子程式碼就會變得很長很長,而難以維護. 像是這樣: <pre> If cc < 500 money=900 else if cc < 600 money=1200 && ..... 略 endif endif </pre> 用 do case 的話則是這樣 <pre> do case case between( 0, 500 ) money=900 case between( 501, 599 ) money=1200 && ... 略 endcase </pre> 李先生以一個 Dispatcher pattern 解決此一問題. 在 VFP 裡面可以直接結合資料庫作更好的解法 <pre> * * ITax.prg * DEFINE CLASS ITax as custom PROCEDURE Init() create cursor crTax( cc_lo I, cc_hi I, PrivateTax Y, BusinesTax Y ) insert into crTax values ( 0, 500, $ 1620, $ 900 ) insert into crTax values ( 501, 599, $ 2160, $ 1200 ) insert into crTax values ( 600, 1199, $ 4320, $ 2160 ) insert into crTax values ( 1200, 1799, $ 7120, $ 3060 ) insert into crTax values ( 1800, 2399, $11230, $ 6480 ) insert into crTax values ( 2400, 2999, $15210, $ 9900 ) insert into crTax values ( 3000, 4199, $28220, $16380 ) insert into crTax values ( 4200, 5399, $46170, $24300 ) insert into crTax values ( 5400, 6599, $69690, $33660 ) insert into crTax values ( 6600, 7799, $117000, $44460 ) insert into crTax values ( 7800, 9999999, $117000, $44460 ) ENDPROC PROCEDURE Destroy() use in crTax ENDPROC PROCEDURE GetTax( cc, theKind ) local ly_result local lc_oldalias lc_oldalias=alias() select("crTax") go top locate for between( cc, crTax.cc_lo, crTax.cc_hi ) if found() ly_result=crTax.&theKind else ly_result=0 endif select( lc_oldalias ) return ly_result ENDPROC PROCEDURE GetPrivateTax( cc ) return this.GetTax( cc, "PrivateTax" ) ENDPROC PROCEDURE GetBusinessTax( cc ) return this.GetTax( cc, "BusinesTax" ) ENDPROC ENDDEFINE </pre> <pre> * * test_itax.prg * LOCAL lo_obj set procedure to itax.prg lo_obj=createobject("ITax") ? lo_obj.GetPrivateTax( 1000 ) ? lo_obj.GetBusinessTax( 2000 ) </pre> 瞧,這樣不是簡單多了嗎?? 在這裡拋磚引玉一下,希望大家如果有更好的解法 也 post 上來,讓大家觀摩一下 ^_^ [[category:以VFP介紹Design Pattern]]
返回到
Dispatcher Pattern
。
檢視
頁面
討論
原始碼
歷史
個人工具
登入/建立新帳號 選單
導航
首頁
社群入口
現時事件
近期變動
隨機頁面
使用說明
搜尋
工具箱
鏈入頁面
相關頁面修訂記錄
所有特殊頁面