BPP 相关——02
BPP項目 HT 部分完成小結:
1、Action 類怎么寫?
?? ? ?現在的做法是Action 層直接與 dao 層耦合,所有的功能都在 Action 類中完成。
?? ? ?缺點:如果 Action1 與 Action2 兩個類有部分功能重復,在“避免重復代碼”這樣的原則下, Action2 類會實例化一個 Action1 類然后調用其方法。這樣就要求 Action1 的該方法為public 修飾,這就與action 的方法是相同的修飾,會使得該Action 類的功能(提供的action)混亂。這樣顯然不好!而且所有的功能都在 Action 類中,這樣 public、private 的方法必然混在一起,混亂不清!
?? ? ?建議修改:增加一個service 層。
?? ? ?Action 類的 public 方法全部為 action(這樣一眼就知道該 Action 類有哪些具體的action),其內部實現細節交給 service。當然Action 類也是有一些私有方法——處理 field 域與頁面間的參數傳遞。(如 ManualInputWeightAction 的 initFirstManualInputParams( )方法, initContinueManualInputParams( ) 方法)對于重復的功能,重復使用service,而不是Action。
注意:這里的dao層不時 iBatis提供的dao 層,而是和業務具體相關的操作。
優點:方便測試 business 層的類,因為可以很容易的 Mock 一個dao 類對象的操作。
建議:如果 Action 類有多個action,那么就不要使用默認的 execute( )方法。而是每個方法指明其功能(好的方法名)。
2、action 怎么配置?
?? ? ?不要將所有的action 配置在一個<package/>里,要根據不同的“功能模塊”配置不同的<package namespace="/?功能模塊名" />。這樣容易查找,也可以避免命名沖突。“功能模塊”的名稱要盡早取,也要與 Action類的包名保持一致。
3、怎么寫與DB相關的測試?
?? ? ?如果是直接構造數據,然后插入DB。第一操作肯定是可以,但是第二次呢?這樣做顯然不適合單元測試。
?? ? ?如果采用每次測試前構造DB數據(static 方式),測試完后即清空。這樣適合單元測試,不過就是效率問題。
?? ? ?再則采用EasyMock 的方式。
4、怎么傳遞參數?
階段1,獲取jsp頁面參數,action 提供set方法;添加如下注釋:
// from jsp params階段2,action提供參數給jsp頁面顯示,action提供get方法。添加如下注釋:
// show to jsp params階段1-2,action提供get / set 方法。添加如下注釋:
// from jsp to jsp params?? ? ?注意:如果Action 類有太多的field 供jsp頁面顯示,那就封裝一個JavaBean,避免Action 類太混亂。
5、查詢數據部分(注意效率)
?? ? ?a、不要將全部數據都取出在計算或顯示,一定要縮小范圍,只取當前有用的最小集合。
?? ? ?b、能用select 語句完成的,盡量用select 語句完成(如,SUM、MAX、MIN、AVG....)
6、多用戶數據操作,數據不一致問題
例如:用戶A 和用戶B 同時對某條記錄的
(A)修改-(B)修改 操作 ? ?用戶B沒看到用戶A 的修改操作,可能導致數據不一致
(A)修改-(B)刪除 操作 ? 安全
(A)刪除-(B)刪除 操作 ? 安全
(A)刪除-(B)修改 操作 ? 一定錯誤(應該給錯誤提示)
7、action 與 business 的對應關系
多個action 對應一個business(如下圖)。
優點:明確參數的傳遞——哪個action需要哪些參數(傳遞進來的或返回出去的)
strut2框架下對應的 get / set 方法就會少。
8、緩存 sqlMapClient 時應注意的問題
BPP 項目中,為了優化性能緩存了 sqlMapClient 對象(根據 companyId 對應一個DB 的 schema)。
但是這樣存在一個隱藏的風險:
1、當修改了 schema 鏈接用的用戶名或密碼,使用緩存的 sqlMapClient 顯然會出錯。
2、刪除了該 schema 但是又為該 companyId新建了一個對應的 schema,使用緩存的 sqlMapClient 也錯誤。
解決辦法:使用緩存的 sqlMapClient 對象之前,測試其有效性。有效,就使用;無效,新建一個再使用。
總結
以上是生活随笔為你收集整理的BPP 相关——02的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信支付PKIX path buildi
- 下一篇: 上传图片和音频到DB