介面在開發程式的“骨架”時非常有用。
在設計元件時,使用介面進行設計和討論都是對你的團隊有益處的。
比如定義一個BillingNotifierInterface,然後討論他有什麼方法。在寫任何實現程式碼前先用介面討論好一套好的API!
記住,介面實際上不真正做任何事情。它只是簡單的定義了類們必須實現的一系列方法。
介面就是約定。
介面不包含任何程式碼實現,只是定義了一個物件應該實現的一系列方法。
如果一個物件實現了一個介面,那麼我們就能確信這個介面所定義的一系列方法都能在這個物件上使用。因為有約定保證了特定方法的實現標準,透過多型也能使型別安全的語言變得更靈活。
一旦建立了約定,就算約定還沒實現,前端開發者也可以測試他的控制器了!
這樣應用中的不同元件就可以按不同的速度開發,並且單元測試也可以做。而且這種處理方法還可以使元件內部的改動不會影響到其他不相關元件。
要記著無知是福。我們寫的那些類們不用知道別的類如何實現的,只要知道它們能實現什麼。
//根據定義好的約定,再來寫控制器
class OrderController {
public function __construct(OrderRepositoryInterface $orders)
{
$this->orders = $orders;
}
public function getRecent()
{
$recent = $this->orders->getMostRecent(Auth::user());
return View::make('orders.recent', compact('recent'));
}
}
//前端開發者甚至可以為這介面寫個“假”實現,然後這個應用的檢視就可以用假資料填充了:
class DummyOrderRepository implements OrderRepositoryInterface {
public function getMostRecent(User $user)
{
return array('Order 1', 'Order 2', 'Order 3');
}
}
//一旦假實現寫好了,就可以被繫結到IoC容器裡,然後整個程式都可以呼叫他了:
App::bind('OrderRepositoryInterface', 'DummyOrderRepository');
本作品採用《CC 協議》,轉載必須註明作者和本文連結