I tera wiki i tuhi ahau
<?php
interface PostRepository
{
public function getById($id): Post;
public function save(Post $post);
public function delete($id);
}
Heoi, i roto i nga kaupapa tuuturu, mena kua whakatauhia ki te whakamahi i nga putunga, ka taapirihia nga tikanga mo te whakahoki mai i nga rekoata ki a raatau:
<?php
interface PostRepository
{
public function getById($id): Post;
public function save(Post $post);
public function delete($id);
public function getLastPosts();
public function getTopPosts();
public function getUserPosts($userId);
}
Ko enei tikanga ka taea te whakatinana ma roto i nga waahanga Eloquent, engari ko te taumaha o nga karaehe hinonga me te kawenga ki te tiki i a raatau ake ehara i te mea pai rawa atu, me te neke i tenei kawenga ki nga karaehe putunga te ahua arorau. He pera ano? I wehea e au tenei atanga kia rua nga wahanga. Ko te waahanga tuatahi o nga tikanga ka whakamahia ki nga mahi tuhi.
Ko te mahinga tuhi paerewa ko:
- te hanga i tetahi mea hou me te wero PostRepository::tiaki
- PostRepository::getById, te raweke hinonga me te karanga PostRepository::tiaki
- wero PostRepository::muku
Ko nga mahi tuhi kaore e whakamahi tikanga tiki. I roto i nga mahi panui, ka whakamahia nga tikanga tiki* anake. Mena ka panui koe mo Kaupapa Whakawehe Atanga (reta I в Tuhinga), katahi ka maarama he nui rawa to maatau atanga me te mahi i nga kawenga rereke e rua. Kua tae ki te wa ki te wehewehe kia rua. Tikanga getById e tika ana i roto i nga mea e rua, engari i te mea ka uaua ake te tono, ka rereke nga whakaritenga. Ka kite tatou i tenei i muri iti nei. I tuhituhi ahau mo te koretake o te waahanga tuhi i roto i te tuhinga o mua, na i tenei ka wareware noa ahau.
Ko te waahanga Panui ki ahau kaore i te tino horihori, na te mea mo te Eloquent he maha nga whakatinanatanga kei konei. He aha te ingoa o te akomanga? Ka taea ReadPostRepository, engari ki te tauira Repository he iti nei tona whai tikanga. Ka taea noa e koe Panui Uiui:
<?php
interface PostQueries
{
public function getById($id): Post;
public function getLastPosts();
public function getTopPosts();
public function getUserPosts($userId);
}
Ko te whakatinana me te Eloquent he tino ngawari:
<?php
final class EloquentPostQueries implements PostQueries
{
public function getById($id): Post
{
return Post::findOrFail($id);
}
/**
* @return Post[] | Collection
*/
public function getLastPosts()
{
return Post::orderBy('created_at', 'desc')
->limit(/*some limit*/)
->get();
}
/**
* @return Post[] | Collection
*/
public function getTopPosts()
{
return Post::orderBy('rating', 'desc')
->limit(/*some limit*/)
->get();
}
/**
* @param int $userId
* @return Post[] | Collection
*/
public function getUserPosts($userId)
{
return Post::whereUserId($userId)
->orderBy('created_at', 'desc')
->get();
}
}
Me hono te atanga ki te whakatinanatanga, hei tauira i roto i AppServiceProvider:
<?php
final class AppServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind(PostQueries::class,
EloquentPostQueries::class);
}
}
Kua whai hua tenei karaehe. Ka mohio ia ki tana kawenga ma te whakakore i nga kaiwhakahaere, i te roopu hinonga ranei. I roto i te kaiwhakahaere ka taea te whakamahi penei:
<?php
final class PostsController extends Controller
{
public function lastPosts(PostQueries $postQueries)
{
return view('posts.last', [
'posts' => $postQueries->getLastPosts(),
]);
}
}
Tikanga PostsController::lastPosts tono noa mo etahi whakatinanatanga Panui Uiui me te mahi tahi. I roto i te kaiwhakarato i honoa e matou Panui Uiui me te karaehe EloquentPostQueries a ka whakakapia tenei karaehe ki te kaiwhakahaere.
Whakaarohia kua tino rongonui to maatau tono. He mano nga kaiwhakamahi i ia meneti ka whakatuwhera i te whaarangi me nga panui hou. Ko nga pukapuka tino rongonui ka panuihia i nga wa maha. Kaore e tino pai te whakahaere a nga papaaarangi i nga taumahatanga penei, na reira ka whakamahia he otinga paerewa - he keteroki. I tua atu i te paataka raraunga, ka penapenahia he whakaahua raraunga ki roto i te rokiroki kua arotauhia mo etahi mahi - memcached ranei tukurua.
Ko te arorau keteroki ehara i te mea uaua, engari ko te whakatinana i roto i te EloquentPostQueries kaore i te tino tika (mehemea na te mea Tikanga Kawenga Takitahi). He maamaa noa te whakamahi tauira Kaiwhakapaipai me te whakatinana i te keteroki hei whakapaipai mo te mahi matua:
<?php
use IlluminateContractsCacheRepository;
final class CachedPostQueries implements PostQueries
{
const LASTS_DURATION = 10;
/** @var PostQueries */
private $base;
/** @var Repository */
private $cache;
public function __construct(
PostQueries $base, Repository $cache)
{
$this->base = $base;
$this->cache = $cache;
}
/**
* @return Post[] | Collection
*/
public function getLastPosts()
{
return $this->cache->remember('last_posts',
self::LASTS_DURATION,
function(){
return $this->base->getLastPosts();
});
}
// другие методы практически такие же
}
Waiho te atanga Repository i roto i te kaihanga. Mo etahi take kaore i mohiotia, i whakatau ratou ki te whakaingoa i te atanga mo te keteroki i Laravel penei.
Класс CachedPostQueries ka whakatinana i te keteroki anake. $this->cache->mahara ka taki mena kei te keteroki tenei urunga, a ki te kore, ka waea atu ki te hokinga mai me te tuhi i te uara i whakahokia ki te keteroki. Ko nga mea e toe ana ko te whakauru i tenei akomanga ki te tono. E hiahia ana matou ki nga karaehe katoa i roto i te tono ki te tono i te whakatinanatanga o te atanga Panui Uiui i timata ki te whiwhi tauira o te karaehe CachedPostQueries. Heoi, ko ia ano CachedPostQueries me whiwhi te kaihanga i tetahi karaehe hei tawhā EloquentPostQueriesno te mea kaore e taea te mahi me te kore he "pono" whakatinanatanga. Ka huri tatou AppServiceProvider:
<?php
final class AppServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind(PostQueries::class,
CachedPostQueries::class);
$this->app->when(CachedPostQueries::class)
->needs(PostQueries::class)
->give(EloquentPostQueries::class);
}
}
Ko aku hiahia katoa e tino whakaahuahia ana i roto i te kaiwhakarato. No reira, i whakatinanahia e matou te keteroki mo a matou tono ma te tuhi i tetahi akomanga me te whakarereke i te whirihoranga ipu. Ko te toenga o te waehere tono kaore i rereke.
Ko te tikanga, ki te tino whakatinana i te keteroki, he mea tika ano kia whakatinanahia te whakakore kia kore ai te tuhinga kua mukua e whakairihia ki runga i te pae mo etahi wa, engari ka mukua tonu. Engari he mea iti enei.
Rarangi o raro: ehara i te kotahi, engari e rua nga tauira. Tauira Wehenga Kawenga Uiui Tono (CQRS) e whakaaro ana kia tino wehe nga mahi panui me te tuhi i te taumata atanga. I haere mai ahau ki a ia Kaupapa Whakawehe Atanga, e tohu ana kia mohio au ki te raweke i nga tauira me nga maataapono me te whakaputa mai i tetahi mai i tetahi hei kaupapa whakaaro :) Ae ra, kaore nga kaupapa katoa e hiahia ki te tango i nga hinonga, engari ka tohatoha ahau ki a koe. whanaketanga, ka taea e koe te hanga noa i te akomanga Panui Uiui me te whakatinanatanga o mua ma te Eloquent:
<?php
final class PostQueries
{
public function getById($id): Post
{
return Post::findOrFail($id);
}
// другие методы
}
Ka ara ake te hiahia mo te keteroki, ma te mahi ngawari ka taea e koe te hanga i tetahi atanga (te karaehe waitara ranei) hei whakakapi mo tenei karaehe Panui Uiui, kape i tana whakatinanatanga ki te akomanga EloquentPostQueries a haere ki te kaupapa i korerohia e ahau i mua. Ko te toenga o te waehere tono kaore e tika kia whakarereketia.
Ko enei tinihanga katoa me nga karaehe, atanga, Te Weronga Whakaaetanga и CQRS whakaahuatia i roto i te taipitopito i roto i
Source: will.com