溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Sight組件的優(yōu)點(diǎn)有哪些

發(fā)布時(shí)間:2021-10-11 11:53:43 來源:億速云 閱讀:128 作者:iii 欄目:編程語言

本篇內(nèi)容介紹了“Sight組件的優(yōu)點(diǎn)有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

Sight做了什么呢?

Sight是在Server Side實(shí)現(xiàn)了一個(gè)Presenter層。從而讓你把從服務(wù)器中查出的數(shù)據(jù)輕松轉(zhuǎn)換為可展示的數(shù)據(jù)。自從有了Sight,Laravel成了唯一支持Server Side的MVP模式的框架。

為什么要用Sight呢?

一、是加快開發(fā)速度。

二、國內(nèi)的Phper都了解,大廠是禁止SQL聯(lián)表三個(gè)表以上的。

遇到初學(xué)者,會(huì)在FOR循環(huán)中查詢數(shù)據(jù)庫。如果你禁止了,則還有可能是,他們把相關(guān)ID PLUCK出來。查出結(jié)果,然后,再FOR循環(huán)中嵌套FOR循環(huán)去查相關(guān)的關(guān)聯(lián)數(shù)據(jù)。
Sight則是提供了很好的Pluck函數(shù),查出ID后,請(qǐng)求到相關(guān)數(shù)據(jù)交給Sight,Sight會(huì)為你拼接好數(shù)據(jù)。它的做法是通過關(guān)聯(lián)ID為KEY把數(shù)據(jù)整理好。從而大大提升了程序效率。

三、Sight的使用相當(dāng)簡(jiǎn)單。

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

namespace App\Presenteruse 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轉(zhuǎn)換成了時(shí)間,把created_by從user id轉(zhuǎn)換成了用戶名。

我們看出:

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

created_by則是直接讀取關(guān)聯(lián)數(shù)組中的user_name,因?yàn)橛玫氖荕appingTypeEnum::JOIN_FIELD。

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

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

Sight遠(yuǎn)遠(yuǎn)不只是這一點(diǎn)功能,它不僅支持MySQL查出的數(shù)據(jù),同時(shí)支持ElasticSearch查出的數(shù)據(jù)。

雖然是純數(shù)組操作,它一樣也有innerJoin和outerJoin,并且,有hasOne,hasMany ……

當(dāng)然,還有更多的功能,這個(gè)你就要仔細(xì)看文檔了。

Sight試圖解決你查出數(shù)據(jù)后,將其轉(zhuǎn)換成可展示數(shù)據(jù)中的不爽,它做得很好,真的能讓你 Coding More Happy; Coding More Quickly!

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

“Sight組件的優(yōu)點(diǎn)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI