殺手級提升Laravel開發速度的組件:Sight!

今天,給大家推存一個Laravel的專用組件:Sight!

Laravel開發速度可以算是最快的了。但是,現在如果加上Sight,那麼,你的開發速度會更加快。

Sight做了什麼呢?

Sight是在Server Side實現了一個Presenter層。從而讓你把從服務器中查出的數據輕鬆轉換爲可展示的數據。自從有了Sight,Laravel成了唯一支持Server Side的MVP模式的框架。

爲什麼要用Sight呢?

一、是加快開發速度。

二、國內的Phper都瞭解,大廠是禁止SQL聯表三個表以上的。

遇到初學者,會在FOR循環中查詢數據庫。如果你禁止了,則還有可能是,他們把相關ID PLUCK出來。查出結果,然後,再FOR循環中嵌套FOR循環去查相關的關聯數據。
Sight則是提供了很好的Pluck函數,查出ID後,請求到相關數據交給Sight,Sight會爲你拼接好數據。它的做法是通過關聯ID爲KEY把數據整理好。從而大大提升了程序效率。

三、Sight的使用相當簡單。

比如以下示例,幾乎類似於Model的使用。​​​​​​​

namespace App\Presenter
use Bardoqi\Sight\Presenter;use Bardoqi\Sight\Traits\PresenterTrait;use Bardoqi\Sight\Enums\MappingTypeEnum use Bardoqi\Sight\Enums\PaginateTypeEnum use App\Repositories\ArticleRepository;use App\Repositories\UserRepository; 
class ArticlePresenter extents Presenter{   use PresenterTrait;
   public function getArticleList($where){       $articleArray = ArticleRepository::getList($where);       $user_ids = $this->selectFields('id','title','created_at','created_by')            ->fromLocal($articleArray,'articles')            ->pluck('created_by');       $users = UserRepository::getUsersWithIds($user_ids);       $this->innerJoinForeign($users,'userss')            ->onRelationByObject(Relation::of()                ->localAlias('articles')                ->localField('created_by')                ->foreignAlias('users')                ->foreighField('id'))             ->addFieldMappingByObject(FieldMapping::of()                ->key('created_at')                ->src('created_at')                ->type(MappingTypeEnum::METHOD_NAME))            ->addFieldMappingByObject(FieldMapping::of()                ->key('created_by')                ->src('user_name')                ->type(MappingTypeEnum::JOIN_FIELD));                return $this->toPaginateArray(PaginateTypeEnum::PAGINATE_API);   }}

上例中,代碼則是把created_at從int轉換成了時間,把created_by從user id轉換成了用戶名。

我們看出:

created_at所用的是MappingTypeEnum::METHOD_NAME,這個方法在哪裏呢,是在PresenterTrait中。所以,你也可以定義自己的Trait。

created_by則是直接讀取關聯數組中的user_name,因爲用的是MappingTypeEnum::JOIN_FIELD。

上面代碼看起來有些長,但是,onRelationByObject()可以改用 onRelation()傳參方式,代碼就短了。

同樣addFieldMappingByObject(),改用addFieldMappingList()用數組傳入,代碼也短了。

Sight遠遠不只是這一點功能,它不僅支持MySQL查出的數據,同時支持ElasticSearch查出的數據。

雖然是純數組操作,它一樣也有innerJoin和outerJoin,並且,有hasOne,hasMany ……

當然,還有更多的功能,這個你就要仔細看文檔了。

Sight試圖解決你查出數據後,將其轉換成可展示數據中的不爽,它做得很好,真的能讓你 Coding More Happy; Coding More Quickly!

Github 地址:https://github.com/BardoQi/Sight

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章