рдкрд┐рдЫрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рдерд╛
<?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);
}
рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рдПрд▓реЛрдХреЗрдВрдЯ рд╕реНрдХреЛрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЦреБрдж рдХреЛ рд▓рд╛рдиреЗ рдХреА рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рдХреЗ рд╕рд╛рде рдЗрдХрд╛рдИ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕ рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рдХреЛ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд▓реЗ рдЬрд╛рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдРрд╕рд╛ рд╣реИ? рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рджреГрд╢реНрдп рд░реВрдк рд╕реЗ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реЗрдЦрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдорд╛рдирдХ рд▓реЗрдЦрди рдСрдкрд░реЗрд╢рди рд╣реИ:
- рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдФрд░ рдЪреБрдиреМрддреА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдкреЛрд╕реНрдЯрд░рд┐рдкреЛрдЬрд┐рдЯрд░реА::рд╕рд╣реЗрдЬреЗрдВ
- PostRepository::getById, рдЗрдХрд╛рдИ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдФрд░ рд╕рдореНрдорди рдкреЛрд╕реНрдЯрд░рд┐рдкреЛрдЬрд┐рдЯрд░реА::рд╕рд╣реЗрдЬреЗрдВ
- рдХреЙрд▓ рдкреЛрд╕реНрдЯрд░рд┐рдкреЛрдЬрд┐рдЯрд░реА::рд╣рдЯрд╛рдПрдБ
рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдлрд╝реЗрдЪ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░реАрдб рдСрдкрд░реЗрд╢рдВрд╕ рдореЗрдВ, рдХреЗрд╡рд▓ get* рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рддреЗ рд╣реИрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреГрдердХреНрдХрд░рдг рд╕рд┐рджреНрдзрд╛рдВрдд (рдкрддреНрд░ I ╨▓ рдареЛрд╕), рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ рдФрд░ рдХрдо рд╕реЗ рдХрдо рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпрд╛рдБ рдирд┐рднрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рджреЛ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рддрд░реАрдХрд╛ getById рджреЛрдиреЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛрддрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рджреЗрдЦреЗрдВрдЧреЗ. рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд▓реЗрдЦрди рднрд╛рдЧ рдХреА рдмреЗрдХрд╛рд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рдКрдВрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░реАрдб рднрд╛рдЧ рдЗрддрдирд╛ рдмреЗрдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рдПрд▓реЛрдХреНрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рднреА рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрд▓рд╛рд╕ рдХрд╛ рдирд╛рдо рдХреНрдпрд╛ рд░рдЦреЗрдВ? рдХрд░ рд╕рдХрдирд╛ ReadPostRepository, рд▓реЗрдХрд┐рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрд╖ рдЙрд╕рдХреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдХрдо рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рд╣реИред рдЖрдк рдмрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдкреЛрд╕реНрдЯрдХреНрд╡реЗрд░реАрдЬрд╝:
<?php
interface PostQueries
{
public function getById($id): Post;
public function getLastPosts();
public function getTopPosts();
public function getUserPosts($userId);
}
рдПрд▓реЛрдХреНрд╡реЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:
<?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();
}
}
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рд╕рдВрдмрджреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдРрдк рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛:
<?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(),
]);
}
}
рд╡рд┐рдзрд┐ рдкреЛрд╕реНрдЯрдХрдВрдЯреНрд░реЛрд▓рд░::рдЕрдВрддрд┐рдордкреЛрд╕реНрдЯ рдмрд╕ рдХреБрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдкреВрдЫ рд░рд╣рд╛ рд╣реВрдБ рдкреЛрд╕реНрдЯ рдкреНрд░рд╢реНрди рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ. рдЬрд┐рд╕ рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рд╣рдордиреЗ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рд╣реИ рдкреЛрд╕реНрдЯрдХреНрд╡реЗрд░реАрдЬрд╝ рдХрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдПрд▓реЛрдХреНрд╡реЗрдВрдЯрдкреЛрд╕реНрдЯрдХреНрд╡реЗрд░реАрдЬрд╝ рдФрд░ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рддрд┐ рдорд┐рдирдЯ рд╣рдЬрд╛рд░реЛрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╡реАрдирддрдо рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рд╡рд╛рд▓рд╛ рдкреГрд╖реНрда рдЦреЛрд▓рддреЗ рд╣реИрдВред рд╕рд░реНрд╡рд╛рдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░рдХрд╛рд╢рди рднреА рдЕрдХреНрд╕рд░ рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдбреЗрдЯрд╛рдмреЗрд╕ рдРрд╕реЗ рд▓реЛрдб рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рдкрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдПрдХ рдорд╛рдирдХ рд╕рдорд╛рдзрд╛рди - рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдбреЗрдЯрд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреЛ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - memcached рдпрд╛ redis.
рдХреИрд╢рд┐рдВрдЧ рддрд░реНрдХ рдЖрдорддреМрд░ рдкрд░ рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдПрд▓реЛрдХреНрд╡реЗрдВрдЯрдкреЛрд╕реНрдЯрдХреНрд╡реЗрд░реАрдЬрд╝ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд╣реА рдирд╣реАрдВ рд╣реИ (рдпрджрд┐ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП) рдПрдХрд▓ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕рд┐рджреНрдзрд╛рдВрдд). рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ рдбреЗрдХреЛрд░реЗрдЯрд░ рдФрд░ рдореБрдЦреНрдп рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХреИрд╢рд┐рдВрдЧ рдХреЛ рд╕рдЬрд╛рд╡рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
<?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();
});
}
// ╨┤╤А╤Г╨│╨╕╨╡ ╨╝╨╡╤В╨╛╨┤╤Л ╨┐╤А╨░╨║╤В╨╕╤З╨╡╤Б╨║╨╕ ╤В╨░╨║╨╕╨╡ ╨╢╨╡
}
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ рдХреЛрд╖ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ. рдХрд┐рд╕реА рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░рдг рд╕реЗ, рдЙрдиреНрд╣реЛрдВрдиреЗ рд▓рд╛рд░рд╡реЗрд▓ рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЗрд╕ рддрд░рд╣ рдирд╛рдо рджреЗрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
рд╡рд░реНрдЧ рдХреИрд╢реНрдбрдкреЛрд╕реНрдЯрдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЗрд╡рд▓ рдХреИрд╢рд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред $рдпрд╣->рдХреИрд╢->рдпрд╛рдж рд░рдЦреЗрдВ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреИрд╢ рдореЗрдВ рд╣реИ рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреЙрд▓рдмреИрдХ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓реМрдЯрд╛рдП рдЧрдП рдорд╛рди рдХреЛ рдХреИрд╢ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИред рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рд╣реИ рд╡рд╣ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдореМрдЬреВрдж рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдкреЛрд╕реНрдЯрдХреНрд╡реЗрд░реАрдЬрд╝ рдХрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╢реБрд░реВ рд╣реБрдЖ рдХреИрд╢реНрдбрдкреЛрд╕реНрдЯрдХреНрд╡реЗрд░реАрдЬрд╝. рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд╣ рд╕реНрд╡ рдХреИрд╢реНрдбрдкреЛрд╕реНрдЯрдХреНрд╡реЗрд░реАрдЬрд╝ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдХреНрд▓рд╛рд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреА рд╣реЛрдЧреА рдПрд▓реЛрдХреНрд╡реЗрдВрдЯрдкреЛрд╕реНрдЯрдХреНрд╡реЗрд░реАрдЬрд╝рдЪреВрдБрдХрд┐ рдпрд╣ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рд╣рдо рдмрджрд▓рддреЗ рд╣реИрдВ рдРрдк рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛:
<?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);
}
}
рдореЗрд░реА рд╕рднреА рдЗрдЪреНрдЫрд╛рдПрдБ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдХреЗрд╡рд▓ рдПрдХ рд╡рд░реНрдЧ рд▓рд┐рдЦрдХрд░ рдФрд░ рдХрдВрдЯреЗрдирд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрджрд▓рдХрд░ рдЕрдкрдиреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╢рд┐рдВрдЧ рд▓рд╛рдЧреВ рдХреАред рд╢реЗрд╖ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ.
рдмреЗрд╢рдХ, рдХреИрд╢рд┐рдВрдЧ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдорд╛рдиреНрдпрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рд╣рдЯрд╛рдпрд╛ рдЧрдпрд╛ рд▓реЗрдЦ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдЯ рдкрд░ рд▓рдЯрдХрд╛ рди рд░рд╣реЗ, рдмрд▓реНрдХрд┐ рддреБрд░рдВрдд рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПред рд▓реЗрдХрд┐рди рдпреЗ рдЫреЛрдЯреА-рдореЛрдЯреА рдмрд╛рддреЗрдВ рд╣реИрдВ.
рдирд┐рдЪрд▓реА рдкрдВрдХреНрддрд┐: рд╣рдордиреЗ рдПрдХ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рджреЛ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдирдореВрдирд╛ рдХрдорд╛рдВрдб рдХреНрд╡реЗрд░реА рдЙрддреНрддрд░рджрд╛рдпрд┐рддреНрд╡ рдкреГрдердХреНрдХрд░рдг (рд╕реАрдХреНрдпреВрдЖрд░рдПрд╕) рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрддрд░ рдкрд░ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред рдореИрдВ рдЙрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдпрд╛ рдерд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреГрдердХреНрдХрд░рдг рд╕рд┐рджреНрдзрд╛рдВрдд, рдЬреЛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдкреИрдЯрд░реНрди рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ рдХреЛ рджреВрд╕рд░реЗ рд╕реЗ рдкреНрд░рдореЗрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ :) рдмреЗрд╢рдХ, рд╣рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдЪрдпрди рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдореВрд░реНрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдЪрд╛рд▓ рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ред рдЖрд╡реЗрджрди рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ рд╡рд┐рдХрд╛рд╕, рдЖрдк рдмрд╕ рдПрдХ рдХрдХреНрд╖рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдкреЛрд╕реНрдЯрдХреНрд╡реЗрд░реАрдЬрд╝ рдПрд▓реЛрдХреНрд╡реЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде:
<?php
final class PostQueries
{
public function getById($id): Post
{
return Post::findOrFail($id);
}
// ╨┤╤А╤Г╨│╨╕╨╡ ╨╝╨╡╤В╨╛╨┤╤Л
}
рдЬрдм рдХреИрд╢рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рддреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрджрдо рд╕реЗ рдЖрдк рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдпрд╛ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ) рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдкреЛрд╕реНрдЯрдХреНрд╡реЗрд░реАрдЬрд╝, рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ рдПрд▓реЛрдХреНрд╡реЗрдВрдЯрдкреЛрд╕реНрдЯрдХреНрд╡реЗрд░реАрдЬрд╝ рдФрд░ рдЙрд╕ рдпреЛрдЬрдирд╛ рдкрд░ рдЬрд╛рдПрдБ рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдерд╛ред рдмрд╛рдХреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
рдХрдХреНрд╖рд╛рдУрдВ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдпреЗ рд╕рднреА рддрд░рдХреАрдмреЗрдВ, рдирд┐рд░реНрднрд░рддрд╛ рдЕрдиреНрддрдГрдХреНрд╖реЗрдкрдг ╨╕ рд╕реАрдХреНрдпреВрдЖрд░рдПрд╕ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ
рд╕реНрд░реЛрдд: www.habr.com