Jika anda telah lama membangunkan Laravel, anda mungkin pernah mendengar frasa "kod bersih" dilambungkan. Tetapi apakah maksud sebenarnya dalam konteks pembangunan Laravel? Lebih penting lagi, mengapa anda perlu mengambil berat?
"Kod Bersih" merujuk kepada kod yang mudah difahami, diselenggara dan dilanjutkan. Seni bina kod bersih mengambil langkah ini lebih jauh dengan menyediakan struktur yang memudahkan untuk memastikan pangkalan kod anda bersih semasa aplikasi anda berkembang. Dalam blog ini, kami akan meneroka cara anda boleh melaksanakan seni bina kod bersih dalam Laravel untuk menjadikan projek anda lebih berskala, boleh diselenggara dan menyeronokkan untuk diusahakan.
Seni bina kod bersih ialah cara mengatur aplikasi anda untuk memudahkan penyelenggaraan dan skala. Ia tidak terikat dengan mana-mana rangka kerja atau bahasa tertentu, dan ia memisahkan aplikasi anda ke dalam lapisan. Setiap lapisan mempunyai tanggungjawab tertentu dan digandingkan secara longgar kepada yang lain.
Perpisahan ini membantu anda mengelakkan "kod spageti" yang terkenal di mana segala-galanya berselirat. Dengan seni bina kod yang bersih, logik perniagaan anda dipisahkan daripada antara muka pengguna dan akses data anda, membolehkan anda membuat perubahan pada satu bahagian aplikasi tanpa melanggar keseluruhan sistem.
Menulis kod bersih bukan sekadar menjadikan kod anda kelihatan bagus; ia mengenai menjadikan hidup anda lebih mudah dalam jangka masa panjang. Apabila kod anda bersih:
Dalam rangka kerja seperti Laravel, yang menggalakkan pembangunan pesat, mungkin tergoda untuk menumpukan pada pembinaan dengan cepat dan bukannya bersih. Tetapi dengan mengikut prinsip kod yang bersih, anda akan menjimatkan masa dan usaha dalam jangka masa panjang.
Sebelum kita mendalami cara melaksanakan seni bina kod bersih dalam Laravel, mari kita semak beberapa prinsip utama:
Sekarang, mari lihat cara anda boleh melaksanakan seni bina kod bersih dalam aplikasi Laravel.
Di teras seni bina kod bersih ialah entiti dan kes penggunaan. Entiti ialah objek teras dalam sistem anda (seperti Siaran atau Pengguna), dan kes penggunaan menentukan perkara yang boleh anda lakukan dengan entiti tersebut (seperti membuat siaran atau memadamkan pengguna).
Dalam Laravel, entiti boleh diwakili sebagai model Eloquent, manakala kes penggunaan lazimnya ialah perkhidmatan yang melakukan tindakan khusus pada model ini.
Sebagai contoh, mari buat kes penggunaan mudah untuk membuat catatan blog:
// app/Domain/Post/Post.php class Post { private $title; private $content; public function __construct($title, $content) { $this->title = $title; $this->content = $content; } // Getter methods and other domain logic }
Dan berikut ialah kes penggunaan untuk membuat siaran baharu:
// app/Services/Post/CreatePostService.php class CreatePostService { private $postRepository; public function __construct(PostRepositoryInterface $postRepository) { $this->postRepository = $postRepository; } public function execute($data) { $post = new Post($data['title'], $data['content']); $this->postRepository->save($post); } }
Dalam seni bina kod bersih, repositori mengendalikan akses data dan antara muka mentakrifkan kaedah yang harus dilaksanakan oleh repositori. Dengan cara ini, logik perniagaan anda tidak bergantung pada pangkalan data atau ORM yang anda gunakan—ia bergantung pada abstraksi.
Mari buat antara muka untuk PostRepository:
// app/Repositories/PostRepositoryInterface.php interface PostRepositoryInterface { public function save(Post $post): void; public function findById($id): ?Post; }
Dan pelaksanaan repositori ini dengan Fasih:
// app/Repositories/EloquentPostRepository.php class EloquentPostRepository implements PostRepositoryInterface { public function save(Post $post): void { // Save post using Eloquent } public function findById($id): ?Post { // Fetch post using Eloquent } }
pengawal anda hendaklah nipis, bermakna mereka hanya perlu mengendalikan permintaan HTTP dan menyerahkan tugasan berat kepada perkhidmatan. Dengan menggunakan suntikan kebergantungan, anda boleh menyuntik perkhidmatan yang diperlukan ke dalam pengawal anda.
// app/Http/Controllers/PostController.php class PostController { private $createPostService; public function __construct(CreatePostService $createPostService) { $this->createPostService = $createPostService; } public function store(Request $request) { $this->createPostService->execute($request->all()); return response()->json(['message' => 'Post created!']); } }
Semua logik perniagaan anda harus hidup dalam perkhidmatan. Ini memastikan pengawal anda bersih dan memastikan logik anda boleh digunakan semula merentasi bahagian aplikasi anda yang berbeza.
// app/Services/Post/CreatePostService.php class CreatePostService { private $postRepository; public function __construct(PostRepositoryInterface $postRepository) { $this->postRepository = $postRepository; } public function execute($data) { $post = new Post($data['title'], $data['content']); $this->postRepository->save($post); } }
Mari kita lihat contoh dunia sebenar membina platform blog yang ringkas. Begini cara anda menstrukturnya menggunakan seni bina kod bersih:
Pengasingan ini memastikan kod anda kekal modular dan mudah untuk diuji. Contohnya, jika anda memutuskan untuk menukar daripada Eloquent kepada ORM lain, anda hanya perlu mengemas kini pelaksanaan repositori, bukan keseluruhan aplikasi anda.
Seni bina kod bersih bukan hanya untuk aplikasi perusahaan besar—ia merupakan satu pemikiran yang membantu anda memastikan pangkalan kod anda bersih dan teratur, walaupun untuk projek kecil hingga sederhana. Dengan memisahkan kebimbangan, menggunakan suntikan pergantungan dan mengikut prinsip tanggungjawab tunggal, anda akan mendapati aplikasi Laravel anda lebih mudah untuk diselenggara, diuji dan skala.
Mulakan dari kecil. Cuba pemfaktoran semula satu bahagian apl Laravel anda untuk mengikuti seni bina kod bersih dan anda akan segera melihat faedahnya.
Selamat pengekodan!
Atas ialah kandungan terperinci Seni Bina Kod Bersih dalam Laravel: Panduan Praktikal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!