php解耦的三種境界

2021-09-11 11:16:18 字數 1503 閱讀 2672

我們有三個類,db,filesystem,session;實際業務需求要組合操作這三個類.

class db} 

class filesystem}

class session}

// 實際邏輯

class logic

public function handle($id)

}} $id = 11;

$client = new logic();

$client->handle($id);

缺點:

logic內部高度耦合了,db,filesystem,session

如果這三個類的初始化條件變化,則需要修改logic的構造方法.

修改logic**如下:

class logic

public function handle($id)

}} $id = 11;

$db = new db();

$file = new filesystem();

$session = new session();

$client = new logic($db, $file, $session);

$client->handle($id);

優點:

實現了解耦

缺點:業務變動,如果要更改db類到mysql類或初始化條件變動,**依然要改動.

ps:大部分的設計模式使用了該解耦方法.

1.希望db類,session類,filesystem類「拿來即用」,不用每次繁瑣的初始化,比如寫$db=new db(arg1,arg2);這類語句。

2.希望db等型別的物件是「全域性」,在整個程式執行期間,隨時可以呼叫。

3.呼叫db等型別的程式設計師不用知道這個類太多的細節,甚至可以用乙個字串的別名來建立這樣乙個物件。

能夠實現以上目標的就是ioc容器,可以把ioc容器簡單的看成乙個全域性變數,並用關聯陣列把字串和建構函式做繫結

// 容器

class container

public function make($abstract, $params = )

} // 繫結或註冊

$container = new container();

$container->bind('db', function () );

$container->bind('file', function () );

$container->bind('session', function () );

// 實際邏輯,容器依賴

class logic

public function handle($id)

}} $id = 11;

$logic = new logic($container);

$logic->handle($id);

本文參考自:

人生的三種境界

王國維曾經在 人間詞話 中說過人生奮鬥必然要經過的三種境界 第一種境界是 昨夜西風凋碧樹,獨上高樓,望斷天涯路 這是乙個人在孤獨之中尋找理想 尋找生命著落點的痛苦時刻 第二種境界是 為伊消得人憔悴,衣帶漸寬終不悔 這是乙個人找到了值得為之奮鬥的目標,全力以赴不惜一切代價而努力的過程 第三種境界是 驀...

測試的三種境界

最近偶然看到一篇 文章。裡面有一句話,很有意思。說,開發和 測試的關係,有三種不同的境界 第一 開發是開發,測試是測試 第二 開發不是開發,測試不是測試 第三 開發是開發,測試還是測試 乍一看,貌似廢話。細細琢磨,真是韻味無窮。測試其實是一門社會科學,我一直這樣認為著。關於 測試的三種境界 每個人的...

成功人士的三種境界

生活中有三種人 第一種 無心插柳柳成蔭 型,這種人比較單純,做事很專一,生活和工作都比較低調。在他們心中,只有大的努力方向,劃 大體則有,具體則無 每天幾乎都重複著同樣看似單調的生活節奏。但他們卻一直那樣努力著,雖不拼命,不算很勤奮,卻也從來沒怎麼放鬆過。他們喜歡寧靜,並樂在其中。大多偏淑女,紳士。...