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