рдЧрдд рд╣рдкреНрддрд╛ рдореИрд▓реЗ рд▓реЗрдЦреЗ
<?php
interface PostRepository
{
public function getById($id): Post;
public function save(Post $post);
public function delete($id);
}
рдпрджреНрдпрдкрд┐, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдорд╛, рдпрджрд┐ рднрдгреНрдбрд╛рд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рднрдиреЗ, рд░реЗрдХрд░реНрдбрд╣рд░реВ рдкреБрди: рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рд╡рд┐рдзрд┐рд╣рд░реВ рдкреНрд░рд╛рдпрдГ рддрд┐рдиреАрд╣рд░реВрдорд╛ рдердкрд┐рдиреНрдЫрдиреН:
<?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);
}
рдпреА рд╡рд┐рдзрд┐рд╣рд░реВ Eloquent рд╕реНрдХреЛрдкрд╣рд░реВ рдорд╛рд░реНрдлрдд рд▓рд╛рдЧреВ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рддрд░ рдЖрдлреВрд▓рд╛рдИ рд▓реНрдпрд╛рдЙрдиреЗ рдЬрд┐рдореНрдореЗрд╡рд╛рд░реАрдорд╛ рдУрднрд░рд▓реЛрдбрд┐рдЩ рдЗрдХрд╛рдИ рд╡рд░реНрдЧрд╣рд░реВ рдЙрддреНрддрдо рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЗрди, рд░ рдпреЛ рдЬрд┐рдореНрдореЗрд╡рд╛рд░реА рднрдгреНрдбрд╛рд░ рдХрдХреНрд╖рд╛рд╣рд░реВрдорд╛ рд╕рд╛рд░реНрдиреБ рддрд╛рд░реНрдХрд┐рдХ рджреЗрдЦрд┐рдиреНрдЫред рдпрд╕реНрддреИ рд╣реЛ рд░ ? рдореИрд▓реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдкрдорд╛ рдпреЛ рдЗрдиреНрдЯрд░рдлреЗрд╕рд▓рд╛рдИ рджреБрдИ рднрд╛рдЧрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реЗрдХреЛ рдЫреБред рд╡рд┐рдзрд┐рд╣рд░реВрдХреЛ рдкрд╣рд┐рд▓реЛ рднрд╛рдЧ рд▓реЗрдЦрди рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗрдЫред
рдорд╛рдирдХ рд▓реЗрдЦрди рдХрд╛рд░реНрдп рд╣реЛ:
- рдирдпрд╛рдБ рд╡рд╕реНрддреБ рд░ рдЪреБрдиреМрддреА рдХреЛ рдирд┐рд░реНрдорд╛рдг PostRepository ::рдмрдЪрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН
- PostRepository::getById, рд╕рдВрд╕реНрдерд╛ рд╣реЗрд░рдлреЗрд░ рд░ рдЖрд╣реНрд╡рд╛рди PostRepository ::рдмрдЪрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН
- рдПрдЙрдЯрд╛ рдЪреБрдиреМрддреА PostRepository::delete
рд▓реЗрдЦрди рдХрд╛рд░реНрдпрд╣рд░реВрд▓реЗ рд▓реНрдпрд╛рдЙрдиреЗ рд╡рд┐рдзрд┐рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИрдиред рдкрдвреНрдиреЗ рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛, рдХреЗрд╡рд▓ get* рд╡рд┐рдзрд┐рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдмрд╛рд░реЗ рдкрдвреНрдиреБрднрдпреЛ рднрдиреЗ рдЗрдиреНрдЯрд░рдлреЗрд╕ рд╡рд┐рднрд╛рдЬрди рд╕рд┐рджреНрдзрд╛рдиреНрдд (рдЪрд┐рдареА I ╨▓ SOLID), рддреНрдпрд╕рдкрдЫрд┐ рдпреЛ рд╕реНрдкрд╖реНрдЯ рд╣реБрдиреЗрдЫ рдХрд┐ рд╣рд╛рдореНрд░реЛ рдЗрдиреНрдЯрд░рдлреЗрд╕ рдзреЗрд░реИ рдареВрд▓реЛ рдЫ рд░ рдХрдореНрддрд┐рдорд╛ рджреБрдИ рдлрд░рдХ рдЬрд┐рдореНрдореЗрд╡рд╛рд░реАрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрджрдЫред рдпрд╕рд▓рд╛рдИ рджреБрдИ рднрд╛рдЧрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрдиреЗ рд╕рдордп рд╣реЛред рд╡рд┐рдзрд┐ getById рджреБрдмреИрдорд╛ рдЖрд╡рд╢реНрдпрдХ рдЫ, рддрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдердк рдЬрдЯрд┐рд▓ рд╣реБрдБрджреИ рдЬрд╛рдБрджрд╛, рдпрд╕рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдлрд░рдХ рд╣реБрдиреЗрдЫред рд╣рд╛рдореА рдпреЛ рдХреЗрд╣рд┐ рдкрдЫрд┐ рд╣реЗрд░реНрдиреЗрдЫреМрдВред рдореИрд▓реЗ рдЕрдШрд┐рд▓реНрд▓реЛ рд▓реЗрдЦрдорд╛ рд▓реЗрдЦреНрдиреЗ рднрд╛рдЧрдХреЛ рдмреЗрдХрд╛рд░рдХреЛ рдмрд╛рд░реЗрдорд╛ рд▓реЗрдЦреЗрдХреЛ рдерд┐рдПрдБ, рддреНрдпрд╕реИрд▓реЗ рдпрд╕ рд▓реЗрдЦрдорд╛ рдо рдпрд╕рд▓рд╛рдИ рдмрд┐рд░реНрд╕рдиреНрдЫреБред
рдкрдврд┐рдПрдХреЛ рднрд╛рдЧ рдорд▓рд╛рдИ рддреНрдпрддрд┐ рдмреЗрдХрд╛рд░ рдЫреИрди рдЬрд╕реНрддреЛ рд▓рд╛рдЧреНрдЫ, рдХрд┐рдирдХрд┐ Eloquent рдХреЛ рд▓рд╛рдЧрд┐ рдкрдирд┐ рдпрд╣рд╛рдБ рдзреЗрд░реИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реБрди рд╕рдХреНрдЫред рдХрдХреНрд╖рд╛рд▓рд╛рдИ рдХреЗ рдирд╛рдо рджрд┐рдиреЗ ? рд╕рдХреНрдЫ ReadPostRepository, рддрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯрдорд╛ рднрдгреНрдбрд╛рд░ рдЙрд╣рд╛рдБрд╕рдБрдЧ рдкрд╣рд┐рд▓реЗ рдиреИ рдХрдо рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдЫред рддрдкрд╛рдИрдВ рдорд╛рддреНрд░ рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдкреЛрд╕реНрдЯрдХреНрд╡реЗрд░реАрд╣рд░реВ:
<?php
interface PostQueries
{
public function getById($id): Post;
public function getLastPosts();
public function getTopPosts();
public function getUserPosts($userId);
}
Eloquent рдХреЛ рд╕рд╛рде рд▓рд╛рдЧреВ рдЧрд░реНрдиреБ рдПрдХрджрдо рд╕рд░рд▓ рдЫ:
<?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();
}
}
рдЗрдиреНрдЯрд░рдлреЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдВрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╣реБрдиреБрдкрд░реНрдЫ, рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА рдорд╛ AppServiceProvider:
<?php
final class AppServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind(PostQueries::class,
EloquentPostQueries::class);
}
}
рдпреЛ рдХрдХреНрд╖рд╛ рдкрд╣рд┐рд▓реЗ рдиреИ рдЙрдкрдпреЛрдЧреА рдЫред рдЙрд╕рд▓реЗ рдирд┐рдпрдиреНрддреНрд░рдХ рд╡рд╛ рд╕рдВрд╕реНрдерд╛ рд╡рд░реНрдЧрд▓рд╛рдИ рд░рд╛рд╣рдд рджрд┐рдПрд░ рдЖрдлреНрдиреЛ рдЬрд┐рдореНрдореЗрд╡рд╛рд░реА рдорд╣рд╕реБрд╕ рдЧрд░реНрдЫред рдирд┐рдпрдиреНрддреНрд░рдХрдорд╛ рдпрд╕рд▓рд╛рдИ рдпрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:
<?php
final class PostsController extends Controller
{
public function lastPosts(PostQueries $postQueries)
{
return view('posts.last', [
'posts' => $postQueries->getLastPosts(),
]);
}
}
рд╡рд┐рдзрд┐ рдкреЛрд╖реНрдЯрдХрдиреНрдЯреНрд░реЛрд▓рд░::рдЕрдиреНрддрд┐рдо рдкреЛрд╖реНрдЯрд╣рд░реВ рдХреЗрд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рдорд╛рдЧ рдорд╛рддреНрд░реИ рд╣реЛ рдкреЛрд╖реНрдЯ рдкреНрд░рд╢реНрдирд╣рд░реВ рд░ рдпрд╕рдХреЛ рд╕рд╛рде рдХрд╛рдо рдЧрд░реНрджрдЫред рдкреНрд░рджрд╛рдпрдХрдорд╛ рд╣рд╛рдореАрд▓реЗ рд▓рд┐рдЩреНрдХ рдЧрд░реЗрдХрд╛ рдЫреМрдВ рдкреЛрд╕реНрдЯрдХреНрд╡реЗрд░реАрд╣рд░реВ рдХрдХреНрд╖рд╛ рд╕рдВрдЧ EloquentPostQuerys рд░ рдпреЛ рд╡рд░реНрдЧ рдирд┐рдпрдиреНрддреНрд░рдХ рдорд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░рд┐рдиреЗрдЫред
рд╣рд╛рдореНрд░реЛ рдЖрд╡реЗрджрди рдзреЗрд░реИ рд▓реЛрдХрдкреНрд░рд┐рдп рднрдПрдХреЛ рдЫ рдХрд┐ рдХрд▓реНрдкрдирд╛ рдЧрд░реМрдВред рдкреНрд░рддрд┐ рдорд┐рдиреЗрдЯ рд╣рдЬрд╛рд░реМрдВ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдирд╡реАрдирддрдо рдкреНрд░рдХрд╛рд╢рдирд╣рд░реВрдХреЛ рд╕рд╛рде рдкреГрд╖реНрда рдЦреЛрд▓реНрдЫрдиреНред рд╕рдмреИрднрдиреНрджрд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░рдХрд╛рд╢рдирд╣рд░реВ рдкрдирд┐ рдзреЗрд░реИ рдкрдЯрдХ рдкрдврд┐рдиреНрдЫред рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВрд▓реЗ рддреНрдпрд╕реНрддрд╛ рднрд╛рд░рд╣рд░реВ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрджреИрдирдиреН, рддреНрдпрд╕реИрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдорд╛рдирдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреН - рдХреНрдпрд╛рд╕ред рдбрд╛рдЯрд╛рдмреЗрд╕ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдбрд╛рдЯрд╛ рд╕реНрдиреНрдпрд╛рдкрд╕рдЯ рдХреЗрд╣рд┐ рдЕрдкрд░реЗрд╢рдирд╣рд░реБ рдХреЛ рд▓рд╛рдЧреА рдЕрдиреБрдХреВрд▓рд┐рдд рднрдгреНрдбрд╛рд░рдг рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХреЛ рдЫ - memcached рд╡рд╛ рд░реЗрдбрд┐рд╕.
рдХреНрдпрд╛рд╕рд┐рдЩ рддрд░реНрдХ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рддреНрдпрддрд┐ рдЬрдЯрд┐рд▓ рд╣реБрдБрджреИрди, рддрд░ EloquentPostQueries рдорд╛ рдпрд╕рд▓рд╛рдИ рд▓рд╛рдЧреВ рдЧрд░реНрдиреБ рдзреЗрд░реИ рд╕рд╣реА рдЫреИрди (рдпрджрд┐ рдорд╛рддреНрд░ рдХрд┐рдирднрдиреЗ рдПрдХрд▓ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕рд┐рджреНрдзрд╛рдиреНрдд)ред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рдзреЗрд░реИ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реЛ рдбреЗрдХреЛрд░реЗрдЯрд░ рд░ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдЬрд╛рд╡рдЯрдХреЛ рд░реВрдкрдорд╛ рдХреНрдпрд╛рд╕рд┐рдЩ рд▓рд╛рдЧреВ рдЧрд░реНрдиреБрд╣реЛрд╕реН:
<?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();
});
}
// ╨┤╤А╤Г╨│╨╕╨╡ ╨╝╨╡╤В╨╛╨┤╤Л ╨┐╤А╨░╨║╤В╨╕╤З╨╡╤Б╨║╨╕ ╤В╨░╨║╨╕╨╡ ╨╢╨╡
}
рдЗрдиреНрдЯрд░рдлреЗрд╕ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рднрдгреНрдбрд╛рд░ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдорд╛ред рдХреЗрд╣реА рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░рдгрдХреЛ рд▓рд╛рдЧрд┐, рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдпрд╕ рддрд░рд┐рдХрд╛рд▓реЗ Laravel рдорд╛ рдХреНрдпрд╛рд╕рд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ рдЗрдиреНрдЯрд░рдлреЗрд╕ рдирд╛рдо рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗред
╨Ъ╨╗╨░╤Б╤Б CachedPostQuerys рдХреНрдпрд╛рд╕рд┐рдЩ рдорд╛рддреНрд░ рд▓рд╛рдЧреВ рдЧрд░реНрджрдЫред $this->cache-> рд╕рдореНрдЭрдиреБрд╣реЛрд╕реН рдпреЛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреНрдпрд╛рд╕рдорд╛ рдЫ рдХрд┐ рдЫреИрди рднрдиреЗрд░ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫ рд░ рдпрджрд┐ рд╣реЛрдЗрди рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рдХрд▓рдмреНрдпрд╛рдХрд▓рд╛рдИ рдХрд▓ рдЧрд░реНрдЫ рд░ рдХреНрдпрд╛рд╕рдорд╛ рдлрд░реНрдХрд╛рдЗрдПрдХреЛ рдорд╛рди рд▓реЗрдЦреНрдЫред рдмрд╛рдБрдХреА рд╕рдмреИ рдпреЛ рд╡рд░реНрдЧрд▓рд╛рдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛ рд▓рд╛рдЧреВ рдЧрд░реНрди рд╣реЛред рд╣рд╛рдореАрд▓рд╛рдИ рдЗрдиреНрдЯрд░рдлреЗрд╕рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдиреБрд░реЛрдз рдЧрд░реНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛ рд╕рдмреИ рдХрдХреНрд╖рд╛рд╣рд░реВ рдЪрд╛рд╣рд┐рдиреНрдЫ рдкреЛрд╕реНрдЯрдХреНрд╡реЗрд░реАрд╣рд░реВ рдХрдХреНрд╖рд╛рдХреЛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдерд╛рд▓реЗ CachedPostQuerysред рддрд░, рдЙрдиреА рд╕реНрд╡ CachedPostQuerys рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рд▓реЗ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рд░реВрдкрдорд╛ рдХреНрд▓рд╛рд╕ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрдкрд░реНрдЫ EloquentPostQuerysрдХрд┐рдирдХрд┐ рдпреЛ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд┐рдирд╛ рдХрд╛рдо рдЧрд░реНрди рд╕рдХреНрджреИрдиред рд╣рд╛рдореА рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдЫреМрдВ 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);
}
}
рдореЗрд░рд╛ рд╕рдмреИ рдЗрдЪреНрдЫрд╛рд╣рд░реВ рдкреНрд░рджрд╛рдпрдХрдорд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдкрдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫред рдпрд╕рд░реА, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдЕрдиреБрд░реЛрдзрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдХреЗрд╡рд▓ рдПрдЙрдЯрд╛ рд╡рд░реНрдЧ рд▓реЗрдЦреЗрд░ рд░ рдХрдиреНрдЯреЗрдирд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реЗрд░ рдХреНрдпрд╛рд╕рд┐рдЩ рд▓рд╛рдЧреВ рдЧрд░реНрдпреМрдВред рдмрд╛рдБрдХреА рдЖрд╡реЗрджрди рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рднрдПрдХреЛ рдЫреИрдиред
рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдХреНрдпрд╛рд╕рд┐рдВрдЧ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рд▓рд╛рдЧреВ рдЧрд░реНрди, рдпреЛ рдкрдирд┐ рдЕрд╡реИрдзрддрд╛ рд▓рд╛рдЧреВ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рддрд╛рдХрд┐ рдореЗрдЯрд╛рдЗрдПрдХреЛ рд▓реЗрдЦ рд╕рд╛рдЗрдЯрдорд╛ рдХреЗрд╣рд┐ рд╕рдордпрдХреЛ рд▓рд╛рдЧрд┐ рд╣реНрдпрд╛рдЩ рдирд╣реЛрд╕реН, рддрд░ рддреБрд░реБрдиреНрддреИ рдореЗрдЯрд╛рдЗрдпреЛред рддрд░ рдпреА рд╕рд╛рдирд╛ рдХреБрд░рд╛ рд╣реБрдиреН ред
рддрд▓реНрд▓реЛ рд░реЗрдЦрд╛: рд╣рд╛рдореАрд▓реЗ рдПрдХ рд╣реЛрдЗрди, рддрд░ рджреБрдИ рдЯреЗрдореНрдкреНрд▓реЗрдЯрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВред рдирдореВрдирд╛ рдХрдорд╛рдгреНрдб рдХреНрд╡реЗрд░реА рдЙрддреНрддрд░рджрд╛рдпрд┐рддреНрд╡ рд╡рд┐рднрд╛рдЬрди (CQRS) рдЗрдиреНрдЯрд░рдлреЗрд╕ рд╕реНрддрд░рдорд╛ рдкрдвреНрди рд░ рд▓реЗрдЦреНрдиреЗ рдХрд╛рд░реНрдпрд╣рд░реВ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдЕрд▓рдЧ рдЧрд░реНрди рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░реНрджрдЫред рдо рдорд╛рд░реНрдлрдд рдЙрд╣рд╛рдБрдХрд╣рд╛рдБ рдЖрдПрдБ рдЗрдиреНрдЯрд░рдлреЗрд╕ рд╡рд┐рднрд╛рдЬрди рд╕рд┐рджреНрдзрд╛рдиреНрдд, рдЬрд╕рд▓реЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдиреНрдЫ рдХрд┐ рдо рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдврд╛рдБрдЪрд╛ рд░ рд╕рд┐рджреНрдзрд╛рдиреНрддрд╣рд░реВ рд╣реЗрд░рдлреЗрд░ рдЧрд░реНрдЫреБ рд░ рдПрдЙрдЯрд╛ рдкреНрд░рдореЗрдпрдХреЛ рд░реВрдкрдорд╛ рдЕрд░реНрдХреЛрдмрд╛рдЯ рд╡реНрдпреБрддреНрдкрдиреНрди рдЧрд░реНрдЫреБ :) рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рд▓рд╛рдИ рд╕рдВрд╕реНрдерд╛рд╣рд░реВ рдЫрдиреЛрдЯ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдпрд╕реНрддреЛ рдЕрдореВрд░реНрддрддрд╛ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрди, рддрд░ рдо рддрдкрд╛рдЗрдБрд╕рдБрдЧ рдЪрд╛рд▓ рд╕рд╛рдЭрд╛ рдЧрд░реНрдиреЗрдЫреБред рдЖрд╡реЗрджрдирдХреЛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдЪрд░рдгрдорд╛ рд╡рд┐рдХрд╛рд╕, рддрдкрд╛рдИрдВ рдХреЗрд╡рд▓ рдПрдХ рдХрдХреНрд╖рд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдкреЛрд╕реНрдЯрдХреНрд╡реЗрд░реАрд╣рд░реВ Eloquent рдорд╛рд░реНрдлрдд рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд╕рд╛рде:
<?php
final class PostQueries
{
public function getById($id): Post
{
return Post::findOrFail($id);
}
// ╨┤╤А╤Г╨│╨╕╨╡ ╨╝╨╡╤В╨╛╨┤╤Л
}
рдЬрдм рдХреНрдпрд╛рд╕рд┐рдЩрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдиреНрдЫ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪрд╛рд▓рдХреЛ рд╕рд╛рде рддрдкрд╛рдИрд▓реЗ рдпреЛ рдХрдХреНрд╖рд╛рдХреЛ рд╕рдЯреНрдЯрд╛рдорд╛ рдЗрдиреНрдЯрд░рдлреЗрд╕ (рд╡рд╛ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ) рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдкреЛрд╕реНрдЯрдХреНрд╡реЗрд░реАрд╣рд░реВ, рдХрдХреНрд╖рд╛рдорд╛ рдпрд╕рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреБрд╣реЛрд╕реН EloquentPostQuerys рд░ рдореИрд▓реЗ рдкрд╣рд┐рд▓реЗ рд╡рд░реНрдгрди рдЧрд░реЗрдХреЛ рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдЬрд╛рдиреБрд╣реЛрд╕реНред рдмрд╛рдБрдХреА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрдиред
рдпреА рд╕рдмреИ рдЪрд╛рд▓рд╣рд░реВ рдХрдХреНрд╖рд╛рд╣рд░реВ, рдЗрдиреНрдЯрд░рдлреЗрд╕рд╣рд░реВ, рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди ╨╕ CQRS рдорд╛ рд╡рд┐рд╕реНрддреГрдд рд░реВрдкрдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫ
рд╕реНрд░реЛрдд: www.habr.com