## 服務類[service]的封裝
由于本項目的業務需求,我們需要封裝大量的服務類來完成各種數據以及邏輯處理,我們在此以客戶端訂單管理操作為例。訂單管理要實現以下操作:
訂單報價(orderOffer)
訂單支付(orderPay)
訂單評價(orderComment)
按照傳統的寫法,我們會寫成這樣:
class orderAction
{
public function orderOffer()
{
//do something
}
public function orderPay()
{
//do something
}
public function orderComment()
{
//do something
}
}
這些寫,是可以實現業務需求,但是擴展性和靈活性太差。在我們的項目中,我們采用`call_user_func`這個函數來實現。
class orderAction
{
public function render($actionName)
{
call_user_func([self::class, $actionName]);
}
private function orderOffer()
{
//do something
}
private function orderPay()
{
//do something
}
private function orderComment()
{
//do something
}
public function __call($name, $arguments)
{
//do something
}
}
`orderAction`類只對外暴露一個`render`方法,在外部使用的時候,我們在通過容器注入的方式來實現訪問不同的訂單管理方法:
Container::get(OrderAction::class)->render('orderOffer');//訂單報價