有關(guān)公用代碼的幾個(gè)概念】
? ? ? ? ? 助手類(lèi)(Helper class):我覺(jué)得首先這個(gè)類(lèi)產(chǎn)生的目的是為特定模塊或者特定功能服務(wù)的(助手嗎~_~),不是全局的。而且完全可以隱藏在特定模塊內(nèi)部庶灿,很多時(shí)候不需要暴露饲鄙。Helper類(lèi)的命名要有針對(duì)性勺届,不能搞成一個(gè)麻辣燙,里面的靜態(tài)操作既為這種功能服務(wù)歹垫,又為那種功能服務(wù),盡量做個(gè)忠臣颠放,不要同時(shí)當(dāng)多個(gè)主子的助手排惨。
? ? ? ? ? 工具類(lèi)(Utility class):一般是全局的,往往有一定普世價(jià)值碰凶,也就是說(shuō)往往是全局通用的暮芭。
? ? ? ? ? ? 例如你在做一個(gè)模塊,這個(gè)模塊功能是處理表單痒留,則關(guān)于處理表單的一些公用靜態(tài)操作就應(yīng)該放置到該模塊的一個(gè)助手類(lèi)中谴麦,名稱(chēng)類(lèi)似于FormProcesserHelper。再有一個(gè)導(dǎo)出報(bào)表的功能伸头,則對(duì)應(yīng)的助手類(lèi)可以稱(chēng)之為ExportReportHelper匾效,建議這兩個(gè)helper不要混在一起。 有人可能會(huì)說(shuō)恤磷,這樣會(huì)不會(huì)導(dǎo)致大量的助手類(lèi)呢面哼?這邊有個(gè)粒度把握的問(wèn)題(經(jīng)驗(yàn)會(huì)發(fā)生作用~_~),但是只要是助手類(lèi)命名規(guī)范扫步,則一個(gè)助手類(lèi)的名字就基本上可以告訴用戶(hù)你提供什么樣的服務(wù)了魔策。
? ? ? ? ? ? 假如你現(xiàn)在處理的是有關(guān)IO操作的重復(fù)代碼,則需要遷移到全局的工具類(lèi)中河胎,因?yàn)檫@樣的操作往往適應(yīng)于全局的闯袒。
? ? ? ? ? ? Facade class(門(mén)面類(lèi)):這個(gè)乍看起來(lái)和助手類(lèi)有點(diǎn)像,往往是綁定于特定模塊游岳。但是政敢,要搞清楚,門(mén)面類(lèi)是用來(lái)封裝子系統(tǒng)的胚迫,代理對(duì)模塊常用核心功能的訪問(wèn)的喷户,針對(duì)用戶(hù)需要的常用場(chǎng)景提供一些輔助操作,幫助用戶(hù)更好的使用此模塊的主要功能访锻。面向客戶(hù)端或者其他子系統(tǒng)或模塊的褪尝,不是用來(lái)處理對(duì)應(yīng)模塊中重復(fù)代碼的!F谌河哑!有關(guān)詳細(xì)信息,請(qǐng)參加Facade設(shè)計(jì)模式的文檔龟虎。
? ? ? ? 【注意】Helper class璃谨、Utility class、Facade class一般都不需要生實(shí)例遣总,暴露的都是靜態(tài)操作睬罗,更不需要誤寫(xiě)成單態(tài),別濫用單態(tài)P癯狻H荽铩!