Iya bang dengan service pattern & repository pattern ini sudah menerapkan prinsip SOLID jadi ketika bangun project sekala besar mudah di maintenance... Semoga bermanfaat bang
Kalo untuk implementasi projeknya sdh pendekatan microservices, menurut saya ini over engineering, cukup sampai level controller dan repo saja, kalau tambah service jadi terlalu kompleks dan journey program nya terlalu lama
Tergantung programer sih, mau implement sampek mana,itu akan over engineering jika membuatnya manual, makanya saya buat package agar dibuat otomatis dan sudah ada crud dalam service nya .. Jadi lebih cepet... Sama dengan halnya unit test yg lama dibuat yg sering tidak dibuat oleh programer dengab alasan lama.. tapi dibalik itu akan dapat banyak manfaat . Itu sih bang . Kembali lagi sama progremernya .. kalau saya sih menggunakan pola itu agar kodenya gampang di maintenance dan ini cocok untuk project besar kalau kecil mvc dah cukup
di github saya sudah ada bang dokumentasinya bang.. if you need to change or modification bind interface to new implement class you can add this config to AppServiceProvider : $this->app->extend(Interface::class, function ($service, $app) { return new NewImplement($service); });
@@monza-y4n oh service pattern atau repository pattern tidak ada hubungannya dengan kecepatan, itu lebih ke tujuan agar code kita lebih terstruktur, rapi, dan mudah di maintenance... Hal ini akan menjadi penting ketika kita sudah membuat sebuah project yang besar dan kompleks... Karena saya pernah membuat 1 controller sampai 1000 line, ya pas awal buat itu tidak ada masalah namun ketika lagi 1 tahun saya mau update wah bingung dan sulit maintenance, bayangin semua validasi, query, bisnis logic dimuat dalam controller dan belum lagi permission...
@@monza-y4n jadi perlu dan tidaknya tergantung kita saja sih.. Karena kalau sudah naik level ke senior engineer kita dituntut bukan hanyak bisa ngoding atau membuat fungsinya jalan tapi gimana agar ke depan nya mudah di maintenance apalagi kerja berkelompok biar bisa konsisten
saya masih agak bingung untuk model di laravel nih, mau tanya, saya kebetulan sedang ada project membuat API tapi disini saya murni semua pake query builder, kenapa begitu karena di kantor ini kalau query itu subquerynya bisa sampai 5 sub belum nanti ada lagi yang namanya derived table tentu akan bikin pusing di modelnya, apa yang saya lakukan benar ya kalau begitu ? soalnya belum ada contoh si di internet yang punya query complex dibuatin ke eloquentnya
Saya masih belum dapat problem yg di magsd mas.... Apakah problem query komplek yg mas magsd itu berkaitan dengan relasi table ? Misalnya seperti join table atau yg lainya?
Elequent pun bisa untuk menangani query yg kompleks mas, misalnya dalam table tersebut ada banyak relasi table nah di elequent itu ada namanya eger loading, jadi ini akan otomatis memanggil relasi data, dan relasi akan di load jika di panggil dan mudah dari pada buat subquery manual... Disamping itu setelah query data jika ingin mengolah data bisa gunakan fitur collectionnya
Untuk benar atau tidak itu tidak ada salah mas, tergantung nyamanya kita, kalau dengan elequent bisa dengan mudah memanggil relasi, karna otomatis dibuatkan subquery dan itu di eksekusi ketika kita perlu relasi datanya.. Elequent itu berkaitan dengan model karna di model kita bisa mendefinisikan relasi data , kolom mana yg ingin di protect untuk tidak tampil dan banyak lagi bisa mas kalau pakai model... Kalau performa itu belum pernah saya bandingkan... Mungkin lebih cepat query builder tapi kalau tepat implementasi qury buildernya...
bagaimana jika kita sudah memiliki 3 repository dan 3 service yaitu kelurahan, kecamatan dan kabupaten. Kemudian kita ingin get data kelurahan, kecamatan dan kabupaten berdasarkan id kelurahan. Mana cara yg paling tepat? Apakah bikin method baru di repo yg query ny join ke 3 tabel tersebut, atau justru call 3 repo tsb pada service kelurahan kemudian di mapping? trimakasih 🙏
Saya implementasikan di laravel 10, saat make:service muncul error app/Services/Product/ProductService.php): Failed to open stream: No such file or directory. dan membuat directory baru App\Service di luar directory app\.
sudah mas,.. error tsb terjadi setelah semua prosedur instalasi sampai publish selese.. dan error itu hanya utk make:service saja, utk make:repository tidak ada masalah... saya cek di config/easy-repository.php pun tidak ada yang salah dgn config directory nya..
bang dimana ya nyari tutor yg misal kaya composer stisla lalu php artisan:install maka akan terinstall temanya di projek laravel kita, soalnya saya mau buat gitu biar di composer require aja dan php artisan install tema yg saya buat sendiri bisa terpasang di projek baru
Kalau ini belum pernah bang buatnya... Biasanya kalau saya buat satu project scafold yg sudah terpasang template dan base project.. jadinya kalau butuh tinggal tak clone .. tapi kalau mau buat pacakage saya biasanya pakai github.com/spatie/package-skeleton-laravel Ini nantinya bisa abang registerkan di packagist lalu bisa deh di composer install pacakage/name
Salam bli Putu.. Terimakasih buat ilmu baru yang super banget di video ini..saya ada beberapa pertanyaan bli, 1. kalau untuk remove repository berarti tinggal hapus saja di folder yang diinginkan betul ya bli? 2. Lalu untuk API apakah kita masih membutuhkan resource? atau bisa langsung di servicenya bli? Terimakasih sehat selalu banyak rejeki
@@PutuYasaChannel baik bli.. untuk yang query berarti konsepnya full dilakulan di RepositoryImplement ya? Dan Repository interface merupakan penghubung ke Service interface?
@@farizsaputra iya mas interface dengan class implement sudah di bind jadi cukup panggil method yg ada dalam interface nya, tujuanya agar konsisten dengan interface...
Ntah kenapa kok kek terlihat terlalu kompleks ya mas? Setahuku kalau sekarang gk perlu bind dh otomatis bisa diakses di controller kan. Dan soal interface, apakah kalau team tergolong kecil menerapinnya terlalu OP? Soalnya misal nih mau tambahin method baru/merubah maka 2x kerja, rubah di implement dan interface. Apakah tanpa interface tapi dengan docblock itu dh cukup?
Interface harusnya tidak berubah mas tapi kalau bertambah mungkin .. kenapa interface di bind itu biar bisa kita manggil method interface langsung tanpa manggil class implement nya.. Nah kalau terkait penerapan service pattern itu tergantung kitanya mas.. punya sama itu pakai artisan make jadi tidak membuat over enginering
Iya pakai method bind untuk menghubungkan method interface ke service implement tujuanya agar kita setiap memerlukan fungsi itu wajib memanggil interface bukan service implement agar jika terjadi pergantian bisnis logik di class yg menggunakan class tersebut tidak ada yg berubah karena berpatokan pada interface
@@PutuYasaChannel ok siap makasih bang, maaf yaa bang saya sbnernya agak bngung sama penerapan bind singleton klok kasus ini perbedaan dengan singleton apanya yaa bang yang paling berpengaruh saya penasaran
@@tiyokprasetyo4500 singleton itu di service yg hanya di eksekusi sekali walaupun di panggil berkali bang.. contohnya untuk koneksi database.. hanya ngebuat 1x koneksi walaupun di panggil berkali-kali
@@PutuYasaChannel yaa itu bang yang saya bngung kan klok singleton lebih efesien sbnernya di panggil sekali. btw makasih bang klok pake bind di tambah deffered bisa yaa bang
tujuannya itu mirip shortcut mas, yg kita panggil itu method di interface yg sudah nge-link ke class implement, singkat kata cutup panggil method di interface saja otomatis manggil method di class implement
Saya masih agak bingung perbedaan repositories dan service mas, yang sya pahami : 1. Membuat repositories untuk mengumpulkan semua query-query dengan tujuan tertentu dalam suatu model (1 model 1 repositories). 2. Membuat service bertujuan agar logic-logic tidak banyak di dalam controller dan lebih mudah dimaintenance. 3. Satu Service bisa memanggil/mengimplementasikan banyak repositories. Misalkan ada TransactionService yang salah satu fungsinya untuk melakukan pencatatan transaksi pembayaran dari suatu order. Data yang dicatat seperti siapa user yang bertransaksi (UserRepositories ->getDataById()) dan Order mana yang ingin dibayar (OrderRepositories ->getOrderById()). Berarti 2 repositories yang diperlukan tadi akan di inject ke dalam TransactionService. gitu mas?
@@adityafawzan312 iya bener mas, 1 controller bisa memanggil banyak service, 1 service bisa memanggil banyak repository Tapi kalau repository hanyak boleh manggil 1 model (single responsibility)
@@PutuYasaChannel kalau service A perlu method di service B dan sebaliknya gimana mas apakah itu pola umum? saya coba malah kena "circular dependency" sampe memory leak.
@@mangeza1753 sudah pakai depedency injection mas? Bisa panggil langsung service B menggunakan Depedency injection... Atau kalau hanya perlu query panggil repository B nya.. Kalau memory leak bukan karena pemanggilan service mas biasanya logic di servicenya kurang beres
izin implment repositorynya mas.. terimakasih sudah berbagi ilmunya
terimakasih sharingnya mas
terima kasih mas, baru tahu saya ada stuktur seperti ini.
Iya bang dengan service pattern & repository pattern ini sudah menerapkan prinsip SOLID jadi ketika bangun project sekala besar mudah di maintenance... Semoga bermanfaat bang
Saya yakin bang yasa bakalan besar.
Penyampaiannya santai dan mengena
Terus berkarya bang
Channel wajib yg dijadikan referensi
Makasih bang semoga konten saya bisa bermanfaat
Kalo untuk implementasi projeknya sdh pendekatan microservices, menurut saya ini over engineering, cukup sampai level controller dan repo saja, kalau tambah service jadi terlalu kompleks dan journey program nya terlalu lama
Tergantung programer sih, mau implement sampek mana,itu akan over engineering jika membuatnya manual, makanya saya buat package agar dibuat otomatis dan sudah ada crud dalam service nya ..
Jadi lebih cepet...
Sama dengan halnya unit test yg lama dibuat yg sering tidak dibuat oleh programer dengab alasan lama.. tapi dibalik itu akan dapat banyak manfaat . Itu sih bang . Kembali lagi sama progremernya .. kalau saya sih menggunakan pola itu agar kodenya gampang di maintenance dan ini cocok untuk project besar kalau kecil mvc dah cukup
nah ini, kadang terasa kayak panjang banget padahal project gak sekompleks itu
Kalau untuk buat request sama validasi itu di service ya mas
Pakai form request bang dan pasangnya di controller
Pakai laravel form request bang pasanganya di controller... Tetep controller yang mengkontrol validasi
kalo mau ganti implementasinya, berarti yang di rubah di bagian provider ya bang?
di github saya sudah ada bang dokumentasinya bang..
if you need to change or modification bind interface to new implement class you can add this config to AppServiceProvider :
$this->app->extend(Interface::class, function ($service, $app) {
return new NewImplement($service);
});
Bang izin nanya misal dengan project yang basenya masih view apa worth aja ya? Dan dari segi kecepatan website apa berpengaruh juga?
Terimakasih
@@monza-y4n oh service pattern atau repository pattern tidak ada hubungannya dengan kecepatan, itu lebih ke tujuan agar code kita lebih terstruktur, rapi, dan mudah di maintenance...
Hal ini akan menjadi penting ketika kita sudah membuat sebuah project yang besar dan kompleks...
Karena saya pernah membuat 1 controller sampai 1000 line, ya pas awal buat itu tidak ada masalah namun ketika lagi 1 tahun saya mau update wah bingung dan sulit maintenance, bayangin semua validasi, query, bisnis logic dimuat dalam controller dan belum lagi permission...
@@monza-y4n jadi perlu dan tidaknya tergantung kita saja sih.. Karena kalau sudah naik level ke senior engineer kita dituntut bukan hanyak bisa ngoding atau membuat fungsinya jalan tapi gimana agar ke depan nya mudah di maintenance apalagi kerja berkelompok biar bisa konsisten
@@PutuYasaChannel siap bang nice info banget, makasih banyak informasinya
saya masih agak bingung untuk model di laravel nih, mau tanya, saya kebetulan sedang ada project membuat API tapi disini saya murni semua pake query builder, kenapa begitu karena di kantor ini kalau query itu subquerynya bisa sampai 5 sub belum nanti ada lagi yang namanya derived table tentu akan bikin pusing di modelnya, apa yang saya lakukan benar ya kalau begitu ? soalnya belum ada contoh si di internet yang punya query complex dibuatin ke eloquentnya
Saya masih belum dapat problem yg di magsd mas.... Apakah problem query komplek yg mas magsd itu berkaitan dengan relasi table ? Misalnya seperti join table atau yg lainya?
Elequent pun bisa untuk menangani query yg kompleks mas, misalnya dalam table tersebut ada banyak relasi table nah di elequent itu ada namanya eger loading, jadi ini akan otomatis memanggil relasi data, dan relasi akan di load jika di panggil dan mudah dari pada buat subquery manual...
Disamping itu setelah query data jika ingin mengolah data bisa gunakan fitur collectionnya
Untuk benar atau tidak itu tidak ada salah mas, tergantung nyamanya kita, kalau dengan elequent bisa dengan mudah memanggil relasi, karna otomatis dibuatkan subquery dan itu di eksekusi ketika kita perlu relasi datanya..
Elequent itu berkaitan dengan model karna di model kita bisa mendefinisikan relasi data , kolom mana yg ingin di protect untuk tidak tampil dan banyak lagi bisa mas kalau pakai model...
Kalau performa itu belum pernah saya bandingkan... Mungkin lebih cepat query builder tapi kalau tepat implementasi qury buildernya...
Bli bahas tentang facade dong bli, fungsi facade itu apa
Noted mas
bagaimana jika kita sudah memiliki 3 repository dan 3 service yaitu kelurahan, kecamatan dan kabupaten. Kemudian kita ingin get data kelurahan, kecamatan dan kabupaten berdasarkan id kelurahan. Mana cara yg paling tepat? Apakah bikin method baru di repo yg query ny join ke 3 tabel tersebut, atau justru call 3 repo tsb pada service kelurahan kemudian di mapping? trimakasih 🙏
Kalau saya 1 repository merepresentasikan 1 model, jika case nya 3 model, makan buat satu service yg akan memanggil 3 repository sesuai kebutuhan...
bang boleh nanya nanya ? ada sosmed ngga bang?
Untuk apa ya bang?
Saya implementasikan di laravel 10, saat make:service muncul error app/Services/Product/ProductService.php): Failed to open stream: No such file or directory.
dan membuat directory baru App\Service di luar directory app\.
Sudah di publish config nya bang.. cek di dokumentasi cara publish confignya bang?
sudah mas,.. error tsb terjadi setelah semua prosedur instalasi sampai publish selese.. dan error itu hanya utk make:service saja, utk make:repository tidak ada masalah... saya cek di config/easy-repository.php pun tidak ada yang salah dgn config directory nya..
@@claymorehighlander7590 ok bang thanks report nya nanti cobak saya perbaiki.. saya pakai laravel 10 aman mungkin di mac os..
Kalau mas pakai os apa?
@@PutuYasaChannel saya di laravel 9 sama mas, apakah udah di-fix?
@@NurAripin-Code sudah sih mas, sistem oprasinya apa mas Windows apa Linux? Nanti cobak saya cek
bang dimana ya nyari tutor yg misal kaya composer stisla lalu php artisan:install maka akan terinstall temanya di projek laravel kita, soalnya saya mau buat gitu biar di composer require aja dan php artisan install tema yg saya buat sendiri bisa terpasang di projek baru
Kalau ini belum pernah bang buatnya... Biasanya kalau saya buat satu project scafold yg sudah terpasang template dan base project.. jadinya kalau butuh tinggal tak clone ..
tapi kalau mau buat pacakage saya biasanya pakai github.com/spatie/package-skeleton-laravel
Ini nantinya bisa abang registerkan di packagist lalu bisa deh di composer install pacakage/name
sudah support laravel 11?
@@IDewaGedeRakaMurdiarta sudah bang
Ma nanya extension apa saja yang diinstall?
Extension text editor bang?
Salam bli Putu.. Terimakasih buat ilmu baru yang super banget di video ini..saya ada beberapa pertanyaan bli,
1. kalau untuk remove repository berarti tinggal hapus saja di folder yang diinginkan betul ya bli?
2. Lalu untuk API apakah kita masih membutuhkan resource? atau bisa langsung di servicenya bli?
Terimakasih sehat selalu banyak rejeki
Iya untuk remove repository tinggal hapus saja mas , kalau saya biasanya tetap memakai resource untuk api , dan itu saya pasang di service mas...
@@PutuYasaChannel baik bli.. untuk yang query berarti konsepnya full dilakulan di RepositoryImplement ya? Dan Repository interface merupakan penghubung ke Service interface?
@@PutuYasaChannel dan kalau berkenan juga barangkali bisa dibuatkan video example untuk penerapan resource di service bli.. terimakasih
@@farizsaputra iya mas interface dengan class implement sudah di bind jadi cukup panggil method yg ada dalam interface nya, tujuanya agar konsisten dengan interface...
@@farizsaputra noted mas
Ntah kenapa kok kek terlihat terlalu kompleks ya mas? Setahuku kalau sekarang gk perlu bind dh otomatis bisa diakses di controller kan.
Dan soal interface, apakah kalau team tergolong kecil menerapinnya terlalu OP? Soalnya misal nih mau tambahin method baru/merubah maka 2x kerja, rubah di implement dan interface. Apakah tanpa interface tapi dengan docblock itu dh cukup?
Interface harusnya tidak berubah mas tapi kalau bertambah mungkin
.. kenapa interface di bind itu biar bisa kita manggil method interface langsung tanpa manggil class implement nya..
Nah kalau terkait penerapan service pattern itu tergantung kitanya mas.. punya sama itu pakai artisan make jadi tidak membuat over enginering
Jadi mas bebas berkreasi untuk service pattern
kenapa bind bang registernya engga singleton
Iya pakai method bind untuk menghubungkan method interface ke service implement tujuanya agar kita setiap memerlukan fungsi itu wajib memanggil interface bukan service implement agar jika terjadi pergantian bisnis logik di class yg menggunakan class tersebut tidak ada yg berubah karena berpatokan pada interface
@@PutuYasaChannel ok siap makasih bang, maaf yaa bang saya sbnernya agak bngung sama penerapan bind singleton klok kasus ini perbedaan dengan singleton apanya yaa bang yang paling berpengaruh saya penasaran
@@tiyokprasetyo4500 singleton itu di service yg hanya di eksekusi sekali walaupun di panggil berkali bang.. contohnya untuk koneksi database.. hanya ngebuat 1x koneksi walaupun di panggil berkali-kali
@@PutuYasaChannel yaa itu bang yang saya bngung kan klok singleton lebih efesien sbnernya di panggil sekali. btw makasih bang klok pake bind di tambah deffered bisa yaa bang
@@tiyokprasetyo4500 ok siap terimakasih
Tujuan bind apa ya bang? Soalnya klo saya biasa gak pernah bind, terimakah
tujuannya itu mirip shortcut mas, yg kita panggil itu method di interface yg sudah nge-link ke class implement, singkat kata cutup panggil method di interface saja otomatis manggil method di class implement
@@PutuYasaChannel kalau tapa bind bisa ga bang ? n kalau bisa cara nya gimana ya ? hehe terima kasih bang
@@fatkulumar7807 bisa bang tapi tidak pakai pacakage yg saya buat... Bisa buat sendiri pola service pattern nya dan tanpa isi interface
Saya masih agak bingung perbedaan repositories dan service mas, yang sya pahami :
1. Membuat repositories untuk mengumpulkan semua query-query dengan tujuan tertentu dalam suatu model (1 model 1 repositories).
2. Membuat service bertujuan agar logic-logic tidak banyak di dalam controller dan lebih mudah dimaintenance.
3. Satu Service bisa memanggil/mengimplementasikan banyak repositories.
Misalkan ada TransactionService yang salah satu fungsinya untuk melakukan pencatatan transaksi pembayaran dari suatu order. Data yang dicatat seperti siapa user yang bertransaksi (UserRepositories ->getDataById()) dan Order mana yang ingin dibayar (OrderRepositories ->getOrderById()). Berarti 2 repositories yang diperlukan tadi akan di inject ke dalam TransactionService.
gitu mas?
Iya benar mas, service bisa manggil banyak repository
@@PutuYasaChannel bahkan jg di satu controller bisa manggil bnyak service jika memang diperlukan mas
@@adityafawzan312 iya bener mas, 1 controller bisa memanggil banyak service, 1 service bisa memanggil banyak repository
Tapi kalau repository hanyak boleh manggil 1 model (single responsibility)
@@PutuYasaChannel kalau service A perlu method di service B dan sebaliknya gimana mas apakah itu pola umum? saya coba malah kena "circular dependency" sampe memory leak.
@@mangeza1753 sudah pakai depedency injection mas?
Bisa panggil langsung service B menggunakan Depedency injection...
Atau kalau hanya perlu query panggil repository B nya..
Kalau memory leak bukan karena pemanggilan service mas biasanya logic di servicenya kurang beres
saya coba GenUID di laravel inertia vue terbaru tidak bisa login ya bang ? tapi kalau use GenUID nya di hapus bisa login
Oh kalau use GenUid primary key harus CHAR bang tidak bisa bigint
Penggunaan GenUid itu auto generate uid untuk primary key CHAR, tujuanya sih agar primary key tidak mudah ditebak sama enduser
@@PutuYasaChannel baik bang . ini kalau saya ganti create uuid nya di controller bisa login bang,
@@PutuYasaChannel 'id' => substr(base_convert(sha1(uniqid(mt_rand())), 16, 36), 0, 36),
@@PutuYasaChannel baik bang . tapi kalau pake traits lebih enak kek nya bang . kek cara nya abang hehe