Contract công cụ lợi hại không kém của Laravel
29th Oct 2022CONTRACT LÀ GÌ?
Laravel’s Contracts are a set of interfaces that define the core services provided by the framework.
Sau một hồi ngó qua repo contract của laravel trên Github, ta có thể dễ dàng nhận ra bản chất thực sự của những cái “hợp đồng” contract này là những Interface, dưới đây là một ví dụ rất cụ thể về Contract Mail của Laravel.
ƯU ĐIỂM CỦA CONTRACT.
Vì bản chất là Interface nên khi sử dụng loại Contract, các bạn sẽ có được 2 ưu điểm của Interface đó là loose coupling và simplicity.
Loose coupling.
Như các bạn đã biết thì Laravel, với sức mạnh của Service Container sẽ có thể tự động resolve ra một instance $mailer cho chúng ta. Nhưng vấn đề là chúng ta đang type-hint một Interface (Contract), chứ không phải là một class cụ thể. Thực tế logic của chúng ta cũng không cần biết và quan tâm đến cái class gửi mail nó là class gì, hay nó đã làm thế nào để có thể gửi mail. Cái duy nhất logic của ta quan tâm là nó cần một instance có thể gửi mail để hoạt động. Đó là instance của class nào không quan trọng, miễn là class đó có implement interface Illuminate\Contracts\Mail\Mailer.
<?php namespace Illuminate\Contracts\Mail; interface Mailer { /** * Begin the process of mailing a mailable class instance. * * @param mixed $users * @return \Illuminate\Mail\PendingMail */ public function to($users); /** * Begin the process of mailing a mailable class instance. * * @param mixed $users * @return \Illuminate\Mail\PendingMail */ public function bcc($users); /** * Send a new message with only a raw text part. * * @param string $text * @param mixed $callback * @return \Illuminate\Mail\SentMessage|null */ public function raw($text, $callback); /** * Send a new message using a view. * * @param \Illuminate\Contracts\Mail\Mailable|string|array $view * @param array $data * @param \Closure|string|null $callback * @return \Illuminate\Mail\SentMessage|null */ public function send($view, array $data = [], $callback = null); }
Một đoạn giải thích ngắn gọn vừa đủ để ta thấy được một ưu điểm của Contract (thực ra là Interface)
Simplicity.
When all of Laravel’s services are neatly defined within simple interfaces, it is very easy to determine the functionality offered by a given service. The contracts serve as succinct documentation to the framework’s features.
In addition, when you depend on simple interfaces, your code is easier to understand and maintain. Rather than tracking down which methods are available to you within a large, complicated class, you can refer to a simple, clean interface.
Đó đọc hết đoạn ngắn tũn này của document cùng với ví dụ về Contract Mail phía trên, chúng ta thấy việc sử dụng các Interface đơn giản (chỉ từ 2 đến vài function) thì việc đọc code rất dễ hiểu và từ đó công cuộc maintain, bảo trì cũng sẽ dễ thở hơn rất nhiều.
Tóm lại, sử dụng Contract trong khi code chính là dùng Interface. Mà dùng Interface thì lại dễ code hơn khi mở rộng, dễ đọc code, dễ bảo trì. Đó chính là ưu điểm mà Contract mang lại.
Add new comment