相關(guān)關(guān)鍵詞
關(guān)于我們
最新文章
- PHP中opcode緩存簡單用法分析
- thinkPHP控制器變量在模板中的顯示方法示例
- PHP move_uploaded_file() 函數(shù)(將上傳的文件移動(dòng)到新位置)
- dirname(__FILE__)的含義和應(yīng)用說明
- thinkPHP5框架實(shí)現(xiàn)分頁查詢功能的方法示例
- PHP中單雙號與變量
- PHP獲得當(dāng)日零點(diǎn)時(shí)間戳的方法分析
- Laravel ORM對Model::find方法進(jìn)行緩存示例詳解
- PHP讀寫文件高并發(fā)處理操作實(shí)例詳解
- 【CLI】利用Curl下載文件實(shí)時(shí)進(jìn)度條顯示的實(shí)現(xiàn)
PHP面向?qū)ο笪宕笤瓌t之單一職責(zé)原則(SRP)詳解
本文實(shí)例講述了PHP面向?qū)ο笪宕笤瓌t之單一職責(zé)原則(SRP)。分享給大家供大家參考,具體如下:
單一職責(zé)原則(Single Pesponsibility Principle, SRP)
單一職責(zé)有兩個(gè)含義: 一個(gè)是避免相同的職責(zé)分散到不同的類中, 別一個(gè)是避免一個(gè)類承擔(dān)太多職責(zé)
為什么要遵守SRP呢?
(1)可以減少類之間的耦合
如果減少類之間的耦合,當(dāng)需求變化時(shí),只修改一個(gè)類,從而也就隔離了變化;如果一個(gè)類有多個(gè)不同職責(zé),它們耦合在一起,當(dāng)一個(gè)職責(zé)發(fā)生變化時(shí),可能會(huì)影響到其他職責(zé)。
(2)提高類的復(fù)用性
修改電腦比修理電視機(jī)簡單多了。主要原因就在于電視機(jī)各個(gè)部件之間的耦合性太高,而電腦則不同,電腦的內(nèi)存、硬盤、聲卡、網(wǎng)卡、鍵盤燈等部件都可以很容易地單獨(dú)拆卸和組裝。某個(gè)部件壞了,換上新的即可。上面的例子就體現(xiàn)了單一職責(zé)的優(yōu)勢。由于使用了單一職責(zé),使得‘組件'可以方便地‘拆卸'和‘組裝'。
不遵守SRP會(huì)影響對類的復(fù)用性。當(dāng)只需要用該類的某一個(gè)職責(zé)時(shí),由于它和其他的職責(zé)耦合在一起,也就很難分離出。
遵守SRP在實(shí)際代碼開發(fā)中有沒有什么應(yīng)用?有的。以數(shù)據(jù)持久層為例,所謂的數(shù)據(jù)持久層主要指的是數(shù)據(jù)庫操作,當(dāng)然,還包括緩存管理等。這時(shí)就需要數(shù)據(jù)持久層支持多種數(shù)據(jù)庫。應(yīng)該怎么做?定義多個(gè)數(shù)據(jù)庫操作類?想法已經(jīng)很接近了,再進(jìn)一步,就是使用工廠模式。
工廠模式(Faction)允許你在代碼執(zhí)行時(shí)實(shí)例化對象。它之所以被稱為工廠模式是因?yàn)樗?fù)責(zé)‘生產(chǎn)對象'。以數(shù)據(jù)庫為例,工廠需要的就是根據(jù)不同的參數(shù),生成不同的實(shí)例化對象。最簡單的工廠就是根據(jù)傳入的類型名實(shí)例化對象,如傳入MySQL,就調(diào)用MySQL類并實(shí)例化,如果是SQLite,則調(diào)用 SQLite的類并實(shí)例化,甚至還可以處理TXT、Execl等‘類數(shù)據(jù)庫'。
工廠類也就是這樣的一個(gè)類,它只負(fù)責(zé)生產(chǎn)對象,而不負(fù)責(zé)對象的具體內(nèi)容。
以下是示例
定義一個(gè)適配器的接口
interface Db_Adpater { /** * 數(shù)據(jù)庫連接 * @param $config 數(shù)據(jù)庫配置 * @return mixed resource */ public function connect($config); /** * 執(zhí)行數(shù)據(jù)庫查詢 * @param $query 數(shù)據(jù)庫查詢的SQL字符串 * @param $handle 連接對象 * @return mixed */ public function query($query,$handle); }