āĻāĻ¤ āĻ¸āĻĒā§āĻ¤āĻžāĻšā§ āĻ˛āĻŋāĻā§āĻāĻŋāĻ˛āĻžāĻŽ
<?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, āĻ¸āĻ¤ā§āĻ¤āĻž āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĒā§āĻ˛ā§āĻļāĻ¨ āĻāĻŦāĻ āĻ¤āĻ˛āĻŦ āĻĒā§āĻ¸ā§āĻ āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋ:: āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°ā§āĻ¨
- āĻā§āĻ¯āĻžāĻ˛ā§āĻā§āĻ PostRepository::delete
āĻ˛ā§āĻāĻžāĻ° āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ˛āĻžāĻĒāĻā§āĻ˛āĻŋ āĻāĻ¨āĻžāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¨āĻžāĨ¤ āĻ°āĻŋāĻĄ āĻ āĻĒāĻžāĻ°ā§āĻļāĻ¨ā§, āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° get* āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻĒāĻĄāĻŧāĻ˛ā§ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻŦāĻŋāĻāĻžāĻāĻ¨ āĻ¨ā§āĻ¤āĻŋ (āĻāĻŋāĻ āĻŋ I в āĻāĻ āĻŋāĻ¨), āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻāĻž āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻšāĻ¯āĻŧā§ āĻ¯āĻžāĻŦā§ āĻ¯ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻ āĻ¨ā§āĻ āĻŦāĻĄāĻŧ āĻāĻŦāĻ āĻ āĻ¨ā§āĻ¤āĻ¤ āĻĻā§āĻāĻŋ āĻāĻŋāĻ¨ā§āĻ¨ āĻĻāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦ āĻĒāĻžāĻ˛āĻ¨ āĻāĻ°ā§āĨ¤ āĻāĻāĻž āĻĻā§āĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ. āĻĒāĻĻā§āĻ§āĻ¤āĻŋ getById āĻāĻāĻ¯āĻŧ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§āĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ, āĻ¤āĻŦā§ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋ āĻāĻ°āĻ āĻāĻāĻŋāĻ˛ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻĨā§ āĻāĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻŋāĻ¨ā§āĻ¨ āĻšāĻŦā§āĨ¤ āĻāĻŽāĻ°āĻž āĻāĻāĻā§ āĻĒāĻ°ā§ āĻāĻāĻŋ āĻĻā§āĻāĻ¤ā§ āĻšāĻŦā§. āĻāĻŽāĻŋ āĻĒā§āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻ˛ā§āĻāĻžāĻ° āĻ āĻāĻļāĻāĻŋāĻ° āĻ āĻā§āĻā§āĻ¤āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻ˛āĻŋāĻā§āĻāĻŋāĻ˛āĻžāĻŽ, āĻ¤āĻžāĻ āĻāĻāĻāĻŋāĻ¤ā§ āĻāĻŽāĻŋ āĻāĻāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻā§āĻ˛ā§ āĻ¯āĻžāĻŦāĨ¤
āĻĒāĻ āĻŋāĻ¤ āĻ āĻāĻļāĻāĻŋ āĻāĻŽāĻžāĻ° āĻāĻžāĻā§ āĻāĻ¤āĻāĻž āĻ āĻā§āĻā§ āĻŦāĻ˛ā§ āĻŽāĻ¨ā§ āĻšāĻā§āĻā§ āĻ¨āĻž, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻ˛ā§āĻā§āĻ¯āĻŧā§āĻ¨ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯āĻ āĻāĻāĻžāĻ¨ā§ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻĨāĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻ¨āĻžāĻŽ āĻāĻŋ āĻ°āĻžāĻāĻŦ? āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻž 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();
}
}
āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸āĻāĻŋ āĻ āĻŦāĻļā§āĻ¯āĻ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¯ā§āĻā§āĻ¤ āĻšāĻ¤ā§ āĻšāĻŦā§, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ āĻāĻ¨ āĻ ā§āĻ¯āĻžāĻĒāĻ¸āĻžāĻ°ā§āĻāĻŋāĻ¸ āĻĒā§āĻ°ā§āĻāĻžāĻāĻĄāĻžāĻ°:
<?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 āĻŦāĻž āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ.
āĻā§āĻ¯āĻžāĻļāĻŋāĻ āĻ˛āĻāĻŋāĻ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻāĻ¤āĻāĻž āĻāĻāĻŋāĻ˛ āĻ¨āĻ¯āĻŧ, āĻ¤āĻŦā§ 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();
});
}
// Đ´ŅŅĐŗиĐĩ ĐŧĐĩŅОдŅ ĐŋŅĐ°ĐēŅиŅĐĩŅĐēи ŅĐ°ĐēиĐĩ ĐļĐĩ
}
āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻāĻĒā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻ¨ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ¨āĻ¸ā§āĻā§āĻ°āĻžāĻā§āĻāĻ°ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻŋāĻā§ āĻ āĻāĻžāĻ¨āĻž āĻāĻžāĻ°āĻŖā§, āĻ¤āĻžāĻ°āĻž āĻ˛āĻžāĻ°āĻžāĻā§āĻ˛ā§ āĻā§āĻ¯āĻžāĻļā§ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§āĻ° āĻ¨āĻžāĻŽāĻāĻ°āĻŖ āĻāĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻā§āĨ¤
ĐĐģĐ°ŅŅ āĻā§āĻ¯āĻžāĻļā§āĻĄāĻĒā§āĻ¸ā§āĻ āĻā§āĻ¯āĻŧā§āĻ°āĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻā§āĻ¯āĻžāĻļāĻŋāĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°ā§āĨ¤ $this->cache->āĻŽāĻ¨ā§ āĻ°āĻžāĻāĻŦā§āĻ¨ āĻāĻ āĻāĻ¨ā§āĻā§āĻ°āĻŋāĻāĻŋ āĻā§āĻ¯āĻžāĻļā§ āĻāĻā§ āĻāĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§ āĻāĻŦāĻ āĻ¯āĻĻāĻŋ āĻ¨āĻž āĻĨāĻžāĻā§, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻ˛āĻŦā§āĻ¯āĻžāĻ āĻāĻ˛ āĻāĻ°ā§ āĻāĻŦāĻ āĻā§āĻ¯āĻžāĻļā§ āĻĢā§āĻ°āĻ¤ āĻĻā§āĻāĻ¯āĻŧāĻž āĻŽāĻžāĻ¨āĻāĻŋ āĻ˛āĻŋāĻā§āĨ¤ āĻ¯āĻž āĻ āĻŦāĻļāĻŋāĻˇā§āĻ āĻĨāĻžāĻā§ āĻ¤āĻž āĻšāĻ˛ āĻāĻ āĻļā§āĻ°ā§āĻŖā§āĻāĻŋāĻā§ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋāĻ¤ā§ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻžāĨ¤ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§āĻ° āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋāĻ¤ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻā§āĻ˛āĻžāĻ¸ āĻĻāĻ°āĻāĻžāĻ° āĻĒā§āĻ¸ā§āĻ āĻā§āĻ¯āĻŧā§āĻ°āĻŋ āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻĒā§āĻ¤ā§ āĻļā§āĻ°ā§ āĻāĻ°ā§ āĻā§āĻ¯āĻžāĻļā§āĻĄāĻĒā§āĻ¸ā§āĻ āĻā§āĻ¯āĻŧā§āĻ°āĻŋ. āĻ¤āĻŦā§ āĻ¤āĻŋāĻ¨āĻŋ āĻ¨āĻŋāĻā§āĻ āĻā§āĻ¯āĻžāĻļā§āĻĄāĻĒā§āĻ¸ā§āĻ āĻā§āĻ¯āĻŧā§āĻ°āĻŋ āĻāĻ¨āĻ¸ā§āĻā§āĻ°āĻžāĻā§āĻāĻ°āĻā§ āĻ āĻŦāĻļā§āĻ¯āĻ āĻāĻāĻāĻŋ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸ āĻā§āĻ°āĻšāĻŖ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻŦāĻžāĻā§āĻŽā§ āĻĒā§āĻˇā§āĻ āĻĒā§āĻ°āĻļā§āĻ¨āĻžāĻŦāĻ˛ā§āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻāĻŋ āĻāĻāĻāĻŋ "āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ" āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻžāĻĄāĻŧāĻž āĻāĻžāĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¨āĻžāĨ¤ āĻāĻŽāĻ°āĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻ āĻ ā§āĻ¯āĻžāĻĒāĻ¸āĻžāĻ°ā§āĻāĻŋāĻ¸ āĻĒā§āĻ°ā§āĻāĻžāĻāĻĄāĻžāĻ°:
<?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);
}
// Đ´ŅŅĐŗиĐĩ ĐŧĐĩŅОдŅ
}
āĻ¯āĻāĻ¨ āĻā§āĻ¯āĻžāĻļāĻŋāĻāĻ¯āĻŧā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻĻā§āĻāĻž āĻĻā§āĻ¯āĻŧ, āĻ¤āĻāĻ¨ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒāĻĻāĻā§āĻˇā§āĻĒā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻĒāĻ¨āĻŋ āĻāĻ āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻāĻžāĻ¯āĻŧāĻāĻžāĻ¯āĻŧ āĻāĻāĻāĻŋ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ (āĻŦāĻž āĻŦāĻŋāĻŽā§āĻ°ā§āĻ¤ āĻļā§āĻ°ā§āĻŖā§) āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻĒā§āĻ¸ā§āĻ āĻā§āĻ¯āĻŧā§āĻ°āĻŋ, āĻā§āĻ˛āĻžāĻ¸ā§ āĻāĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻĒāĻŋ āĻāĻ°ā§āĻ¨ āĻŦāĻžāĻā§āĻŽā§ āĻĒā§āĻˇā§āĻ āĻĒā§āĻ°āĻļā§āĻ¨āĻžāĻŦāĻ˛ā§ āĻāĻŦāĻ āĻāĻŽāĻŋ āĻāĻā§ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻ¸ā§āĻāĻŋāĻŽā§ āĻ¯āĻžāĻ¨āĨ¤ āĻŦāĻžāĻāĻŋ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻā§āĻĄ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ¨ā§āĻ.
āĻā§āĻ˛āĻžāĻ¸, āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻ¸āĻš āĻāĻ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻā§āĻļāĻ˛āĻā§āĻ˛āĻŋ, āĻāĻ¨āĻā§āĻāĻļāĻ¨ āĻ¨āĻŋāĻ°ā§āĻāĻ°āĻ¤āĻž и āĻ¸āĻŋāĻāĻŋāĻāĻāĻ°āĻāĻ¸ āĻ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§
āĻāĻ¤ā§āĻ¸: www.habr.com