核心概念
# 1、依賴注入篇
~~~
關注點分離:每一個類都應該是單一職責的,并且這個職責應該完全被這個類封裝
~~~
「Web控制器」的職責就是真實應用的傳輸層:僅負責收集用戶請求數據,然后將其傳遞給處理方。
因此,以后開發代碼就別再將控制器和 ORM 耦合在一起了
【實現方式】IOC 控制反轉:先定義接口,然后,把接口實例,注入導類中。
~~~
首先,我們來定義一個接口,然后實現該接口。
interface UserRepositoryInterface
{
public function all(): array;
}
class DbUserRepository implements UserRepositoryInterface
{
public function all(): array
{
return User::all()->toArray();
}
}
然后,我們將該接口的實現注入到我們的控制器。
class UserController extends BaseController
{
public function __construct(UserRepositoryInterface $users)
{
$this->users = $users;
}
public function getIndex()
{
$users=$this->users->all();
return View::make('users.index', compact('users'));
}
}
~~~
~~~
嚴守邊界:始終牢記保持明確的責任邊界,控制器和路由是作為 HTTP 和應用程序之間的中介者來提供服務的(用戶瀏覽應用的時候,路由/控制器作為中介將其引導到對應的服務)。當編寫大型應用程序時,不要將你的領域邏輯混雜在控制器或路由中。
~~~
# 2、# 服務容器篇
IoC 容器:控制反轉容器讓依賴注入更方便,它負責在整個應用生命周期內解析和注入那些定義在容器中的類和接口。
你可以把服務容器看作 IoC 容器在 Laravel 框架中的方言別名,兩者等價。
這個服務容器就是個用來注冊各種接口與實現綁定的地方。
Laravel 服務容器中最強大的功能之一就是通過反射來自動解析類的依賴。反射是一種在運行時檢查類和方法的能力。
當 Laravel 的服務容器中沒有某個顯式綁定類的解析器時(即沒有注冊接口與對應實現的綁定),將會嘗試使用反射來解析。程序流程類似于下面這樣:
1. 已經有一個`StripBiller`的解析器了嗎?
2. 沒有?那用反射來檢查一下`StripBiller`吧,看看它有沒有依賴。
3. 解析`StripBiller`需要的所有依賴(遞歸處理)。
4. 使用`ReflectionClass->newInstanceArgs()`來創建一個新的`StripBiller`實例。
# 3、# 接口篇
接口實際上并不做任何事情。它只是簡單的定義了實現類必須擁有的一系列方法。
接口即綱領:接口有助于開發應用所提供的、已定義好的功能「框架」。 在組件的設計階段,團隊里使用接口進行討論是很方便的,例如,定義一個`接口,然后討論它提供哪些方法。在編寫任何實現代碼前,最好先通過接口討論達成一致,這是構建一套好 API 的必要前提!
# 4、# 服務提供者篇
Laravel 服務提供者主要用來進行注冊服務容器綁定(即注冊接口及其實現類的綁定
#5 、#「SOLID」的設計原則,指面向對象編程和面向對象設計的五個基本原則:
* 單一職責原則(Single Responsibility Principle)
* 開放封閉原則(Open Closed Principle)
* 里氏替換原則(Liskov Substitution Principle)
* 接口隔離原則(Interface Segregation Principle)
* 依賴反轉原則(Dependency Inversion Principle)
單一職責原則規定一個類有且僅有一個理由使其改變。換句話說,一個類的邊界和職責應當是十分狹窄且集中的。我們之前就提到過,在類的職責問題上,無知是福。一個類應當做它該做的事,并且不應當被它的任何依賴的變化所影響
開放封閉原則,又稱開閉原則,規定代碼對擴展是開放的,對修改是封閉的
要小心那些泄露實現細節的依賴。當一個依賴的實現需要改變時,不應該要求它的調用者做任何修改。如果需要調用者進行修改的話,往往意味著該依賴「泄露」了實現的細節。當你的抽象泄露時,開放封閉原則就不管用了。
一個抽象的任意實現都可以在聲明該抽象的地方替換它。讀起來有點繞口,通俗點說就是個:如果一個類使用了某個接口的實現,那么一定可以通過該接口的其它實現來替換它,不用做出任何修改。里氏替換原則規定對象可以被其子類的實例所替換,并且不會影響到程序的正確性
依賴反轉原則,它規定高層次的代碼不應該依賴低層級的代碼。換句話說,高層次的代碼應該依賴抽象接口,抽象接口就像是「中間人」一樣,負責連接著高層次和低層次代碼。這個原則的另一層意思是,抽象接口不應該依賴具體實現,但具體實現應該依賴抽象接口
- 前言
- php
- 設計模式
- 代碼安全
- 性能測試
- 自動化測試
- 項目質量
- 自動化部署
- 掌握框架
- laravel5.8
- laravel聲明周期
- mysql
- 物理文件組成
- 存儲引擎和優化
- 權限和安全
- 備份和恢復
- 查詢優化
- 索引優化
- 主從架構
- 監測工具
- redis
- redis簡介
- redis存儲
- windows下 php7.3+redis3 安裝
- 參數配置說明
- redis 數據類型
- 緩存穿透和緩存雪崩問題
- redis并發競爭key問題
- thinkphp5+redis+mysql搶票示例
- apache
- nginx
- Nginx服務器的安裝部署
- Nginx服務器架構
- Nginx服務器的高級配置
- Nginx服務器的Rewrite功能
- Nginx服務器的代理服務
- Nginx服務器的緩存機制
- Nginx源碼結構
- Nginx基本數據結構
- 微服務
- 分布式
- 前后端分離解決方案
- 服務端實現
- thinkphp5
- laravel5
- 客戶端實現H5
- vue.js
- element-ui
- vue-cli
- 客戶端APP
- 客戶端小程序
- 代碼自動生成
- 商城項目實戰
- 系統架構