Sight——殺手級提升Laravel開發速度的元件現在開源了!

Bardo發表於2020-10-11

今天,給大家推存一個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 地址: github.com/BardoQi/Sight

Sight——殺手級提升Laravel開發速度的元件現在開源了!趕緊FORK,趕緊STAR!

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章