Membuat Arsitektur Sempurna Di Laravel Dalam 10 langkah
Pertanyaan pertama yang perlu Anda jawab sebelum Anda mulai mengembangkan program Laravel apa pun itu, adalah "Bagaimana membuat arsitektur project saya lebih dapat maintained dan diskalakan?" karena project apa pun itu terlihat berkembang dari waktu ke waktu dan dipertahankan dan sebagian besar waktu oleh team yang berbeda dari yang mengembangkannya.
Tapi arsitektur apa yang sempurna untuk digunakan?
Tidak ada satu arsitektur atau SATU arsitektur yang sempurna dan yang lainnya tidak, tapi kita bisa membuat arsitektur project kita hampir sempurna dengan mengikuti beberapa langkah.
Pada artikel ini saya menjelaskan dalam 10 cara bagaimana membuat arsitektur project Anda "SEMPURNA":
Buat struktur folder | |
Tentukan skema database Anda | |
Buat Model | |
Buat DTO | |
Buat kelas Repositori | |
Buat kelas Service | |
Buat controller | |
Sambungkan layer aplikasi Anda | |
Tentukan rute aplikasi Anda | |
Uji aplikasi Anda |
Cara 1: Membuat struktur folder
Langkah awal dalam membuat arsitektur yang sempurna di Laravel adalah membuat struktur folder yang akan menyimpan berbagai komponen program Anda. Anda bisa membuat folder bernama Model, DTO, Repositori, Service, dan controller. Ini akan membantu menjaga code Anda selalu teratur dan membuatnya lebih mudah untuk maintained.
Folder selanjutnya telah dibuat secara standar di project Laravel apa pun: Model dan controller
Maka struktur project Anda akan terlihat sebagai berikut:
Sama seperti yang Anda lihat, semua folder yang sudah kami buat berada di folder app/root.
Cara 2: Tentukan skema database Anda
Cara selanjutnya adalah menentukan skema database Anda. Ini melibatkan penjabaran tabel database Anda dan hubungannya. Anda bisa menggunakan alat migrasi bawaan Laravel untuk membuat tabel database Anda.
Tentu saja, sebelum Anda mulai mendeskripsikan migrasi Anda, Anda perlu melakukan tahapan perancangan, selanjutnya Anda bisa menggunakan migrasi Laravel untuk mempermudah pembuatan skema database Anda.
Untuk membuat migrasi, Anda bisa menggunakan perintah artisan berikut untuk mendapatkan info lebih lanjut:
php artisan make:migration -h
Cara 3: Membuat Model
Setelah mendeskripsikan skema database Anda, Anda bisa membuat Model Anda dengan memperluas kelas Eloquent Model Laravel. Model Anda akan mewakili entitas dalam skema database Anda.
Setidaknya, untuk setiap tabel database Anda, Anda membutuhkan model yang mendeskripsikan tabel ini sebagai entitas ke project Laravel Anda.
Untuk membuat model, Anda bisa menggunakan perintah artisan berikut untuk mendapatkan info lebih lanjut:
php artisan make:model -h
Cara 4: Membuat DTO
Buat DTO (Data Transfer Objects) yang merupakan kelas yang hanya berisi property yang ingin Anda transfer antara layer program Anda, seperti antara controller dan layer Service. DTO ini membantu memisahkan layer program Anda.
Cara 5: Membuat kelas Repositori
Buat kelas Repositori yang akan menangani semua kueri basis data yang berkaitan dengan entitas tertentu. Kelas-kelas ini akan menggunakan kelas Model untuk berinteraksi dengan database. Kelas Repositori akan menyediakan antarmuka untuk kelas Service untuk berinteraksi dengan database.
Tetapi kenapa menggunakan repositori daripada langsung bermain-main dengan kelas Model?
Itu simpel! Bila Anda menggunakan Model untuk berkomunikasi dengan database Anda, Anda akan mempunyai code (logika) yang sama dimanapun pada program Anda, dan ketika Anda sudah membuat beberapa perubahan pada code Anda, Anda harus memodifikasinya dimanapun!
Bila tidak, dengan menggunakan Repositori, yang perlu Anda lakukan adalah melakukan modifikasi fungsi tertentu sehingga logika akan diterapkan, dan Anda siap melakukannya!
Cara 6: Membuat kelas Layanan
Buat kelas Layanan yang akan menangani logika bisnis aplikasi Anda. Layanan akan menggunakan Repositori untuk berinteraksi dengan database dan melakukan tindakan pada Model. Layanan juga akan menggunakan DTO untuk mentransfer data antar layer.
Pola ini digunakan untuk memusatkan fungsi Anda, dan memungkinkan aplikasi Anda bila diperlukan untuk memanggil layanan untuk melakukan fungsi ini. Hal yang sama untuk Repositori, semua logika Anda terpusat di satu tempat dan dengan memodifikasi layanan Anda membuatnya tersedia di semua aplikasi Anda.
Cara 7: Membuat controller
Buat controller yang akan menangani permintaan dan respons HTTP. controller akan menggunakan kelas Layanan untuk menjalankan logika bisnis dan mengembalikan respons ke klien.
Untuk membuat controller, Anda dapat menggunakan perintah artisan berikut untuk mendapatkan informasi lebih lanjut:
php artisan make:controller -h
Yang harus Anda ketahui, semua logika bisnis Anda harus ditempatkan di layanan Anda dan controller berada di sini untuk memanggil layanan untuk lakukan tugas itu. Anda bisa melihat controller seperti "Konduktor Orkestra".
Cara 8: Sambungkan layer aplikasi Anda
Di Laravel, Anda bisa menggunakan Penyedia Layanan untuk mengikat kelas Anda ke tempat layanan Laravel. Gunakan Injeksi Ketergantungan untuk memasukkan dependensi yang diperlukan ke kelas Anda. Ini akan membantu menjaga code Anda masih tetap terpisah dan mudah maintained.
Saat membuat Repositori dan Layanan, Anda harus menggunakan antarmuka untuk menentukan tanda tangan sistem kelas Anda, mari kita buat contoh:
<?php
namespace App\Services;
use App\DTO\UserDTO;
interface IUserService
{
public function findAllUsers();
public function createUser(UserDTO $userDto);
public function updateUser(int $id, UserDTO $userDto);
public function deleteUser(int $id);
}
Maka Anda perlu mendefinisikan kelas Anda, jadi mari kita lanjutkan:
<?php
namespace App\Services;
use App\DTO\UserDTO;
use App\Repositories\IUserRepository;
class UserService implements IUserService
{
private $userRepository;
public function __construct(IUserRepository $userRepository) {
$this->userRepository = $userRepository;
}
public function findAllUsers() {
return $this->userRepository->findAll();
}
public function createUser(UserDTO $userDto) {
return $this->userRepository->create([
'name' => $userDto->name,
'email' => $userDto->email,
// ... other fields
]);
}
public function updateUser(int $id, UserDTO $userDto) {
$user = $this->userRepository->findById($id);
$user->name = $userDto->name;
$user->email = $userDto->email;
// ... other fields
return $this->userRepository->save($user);
}
public function deleteUser(int $id) {
$user = $this->userRepository->findById($id);
$user->delete();
}
}
Anda dapat melihat bahwa kami menggunakan Injeksi Ketergantungan di konstruktor kelas kami, dan itu adalah antarmuka yang digunakan dalam injeksi.
Untuk membuat tautan ini antara antarmuka dan kelas penerapannya, Anda perlu menambahkan panggilan ikat ke penyedia Anda (Anda dapat menggunakan penyedia tertentu untuk mengikat semua antarmuka Anda, atau menambahkannya ke AppServiceProvider
Anda), kode berikut harus ditempatkan ke fungsi register()
dari penyedia Anda:
// ...
use App\Repositories\IUserRepository;
use App\Repositories\UserRepository;
// ...
$this->app->bind(IUserRepository:class, UserRepository::class);
Dan Anda bisa melakukan hal yang sama untuk layanan Anda hingga Anda bisa memakainya ke dalam controller Anda.
Cara 9: Tentukan rute aplikasi Anda
Tentukan rute program Anda di file web.php atau api.php Laravel. Petakan setiap jalur ke metode controller. Ini akan membantu menentukan titik akhir program Anda dan bagaimana mereka berinteraksi dengan controller.
Cara 10: Uji aplikasi Anda
Tes program Anda untuk memastikan bahwa semuanya berfungsi sama seperti yang diharapkan. Anda bisa memakai frame-work pengujian bawaan Laravel untuk menulis pengujian untuk controller, Layanan, dan Repositori Anda. Ini akan membantu memastikan bahwa program Anda kuat dan bebas dari bug.