Ich lese Laravel Facades 時(shí)想到了這句話,F(xiàn)acade 的主要危險(xiǎn)是類范圍 Creep
. Dies ist der zweite Absatz, hier ist der Link https://laravel.com/docs/6.x/facades#when-to-use-facades
Was bedeutet Class Scope Creep?
Ich kann keine Ressourcen finden, um die Ausweitung des Klassenumfangs zu verstehen.
你的問(wèn)題的答案實(shí)際上在下一句話中給出,但是,我承認(rèn)在開(kāi)始使用 Laravel 時(shí)我會(huì)非常困惑。所以基本上:
這意味著過(guò)多使用門面(不僅在 Laravel 中,而且在一般情況下)可能會(huì)使您的代碼更加臃腫且難以閱讀。 (擊敗了為什么你應(yīng)該使用外觀背后的要點(diǎn))
外觀還可以發(fā)展到超越其最初目的的許多事情,正如重構(gòu)大師 (沒(méi)有從屬關(guān)系)說(shuō)起來(lái),外墻——如果使用不當(dāng)——可以變成上帝對(duì)象。 p>
如果您要使用外觀并且仍然不清楚如何使用它們,我建議您閱讀單一職責(zé)原則和(前面的意見(jiàn))當(dāng)有疑問(wèn)時(shí),不要使用外觀。
這部分實(shí)際上是一個(gè)“不要這樣做”指南,對(duì)于快速閱讀《所以,不要這樣做!》的讀者來(lái)說(shuō),不要這樣做!
我編輯了我的答案,添加了一個(gè)以兩種不同方式過(guò)度使用門面的相當(dāng)荒謬的例子。
您意識(shí)到外觀確實(shí)解決了依賴注入模式的痛苦,誰(shuí)愿意擔(dān)心所有與范圍、靜態(tài)和特征有關(guān)的東西?所以你開(kāi)始在所有事情上使用立面。需要在之前的查詢中添加 where 嗎?簡(jiǎn)單的!為它創(chuàng)建一個(gè)外觀并將其命名為 Scope::where($model, $column, $equals)
,想要與數(shù)據(jù)庫(kù)對(duì)話,但 DB::query
剛剛開(kāi)始太長(zhǎng)? Facades 為您提供支持,將它們放入 DataModel::longQuery()
中并在任何地方使用它們。厭倦了一直調(diào)用 ProductResource::collection
嗎?將其放入名為 Resource::collection($model)
的新外觀中。
您添加了一個(gè)外觀來(lái)幫助您生成付款鏈接,因此您將其稱為 Payment
并最初將其與 Payment::generateLink()
一起使用,之后一段時(shí)間后,您會(huì)發(fā)現(xiàn)您還需要為網(wǎng)站內(nèi)支付小部件生成視圖,因此您添加了一個(gè) Payment::view()
,幾個(gè)月后,當(dāng)您需要與您的支付提供商討論您的發(fā)票歷史記錄,只需將其添加到 Payment::getReceipts
方法中即可。您的支付外觀現(xiàn)在是一個(gè)巨大的類,它在同一個(gè)地方處理太多不相關(guān)的事情。
在這兩個(gè)示例中,您可以通過(guò)常見(jiàn)的編碼錯(cuò)誤清楚地看到外觀的過(guò)度使用。雖然我的例子有點(diǎn)夸張,但我認(rèn)為很容易想象這些事情如何在幾個(gè)月的時(shí)間里發(fā)生在現(xiàn)實(shí)生活中。