Laravel Service Pattern (Bahasa Indonesia)

Поделиться
HTML-код
  • Опубликовано: 15 июл 2022
  • Banyak alasan kenapa harus menggunakan service pattern di laravel, salah satunya adalah agar controller berfungsi sesuai tugasnya.
    Di project yang besar jika kita menuliskan semua bisnis logic di controller itu akan menyebabkan controller menjadi bengkak dan susah untuk di maintenance.
    Dengan service pattern kita akan memindahkan bisnis logic ke service layer,
    tetapi kekurangan dari ini adalah development akan menjadi lebih lama karna kita harus membuat sebuah interface dan class implementnya.
    Tetapi tenang saja kita akan mengatasi masalah pembuatan service yang lama dengan menggunakan package laravel repository service:
    github.com/yaza-putu/laravel-...
    Semoga Bermanfaat, Terima Kasih
    #servicepattern
    #laravelservicepattern

Комментарии • 69

  • @khairon_ners
    @khairon_ners Год назад +4

    Saya yakin bang yasa bakalan besar.
    Penyampaiannya santai dan mengena
    Terus berkarya bang
    Channel wajib yg dijadikan referensi

  • @ridhosurya5692
    @ridhosurya5692 Год назад +1

    terima kasih mas, baru tahu saya ada stuktur seperti ini.

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад +1

      Iya bang dengan service pattern & repository pattern ini sudah menerapkan prinsip SOLID jadi ketika bangun project sekala besar mudah di maintenance... Semoga bermanfaat bang

  • @diajarngoding1451
    @diajarngoding1451 15 дней назад

    Kalau untuk buat request sama validasi itu di service ya mas

  • @badarnento3000
    @badarnento3000 Год назад +1

    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

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад +1

      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

    • @agthm_3
      @agthm_3 5 месяцев назад

      nah ini, kadang terasa kayak panjang banget padahal project gak sekompleks itu

  • @ALdMFbeat
    @ALdMFbeat Год назад

    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

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад

      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

  • @paldi1647
    @paldi1647 2 года назад +1

    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

    • @PutuYasaChannel
      @PutuYasaChannel  2 года назад

      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?

    • @PutuYasaChannel
      @PutuYasaChannel  2 года назад

      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

    • @PutuYasaChannel
      @PutuYasaChannel  2 года назад

      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...

  • @Komar-yb4rp
    @Komar-yb4rp Год назад

    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 🙏

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад

      Kalau saya 1 repository merepresentasikan 1 model, jika case nya 3 model, makan buat satu service yg akan memanggil 3 repository sesuai kebutuhan...

  • @siar8529
    @siar8529 Год назад

    Ma nanya extension apa saja yang diinstall?

  • @itjustme5097
    @itjustme5097 Год назад

    Bli bahas tentang facade dong bli, fungsi facade itu apa

  • @agungprasetyonugroho9227
    @agungprasetyonugroho9227 Год назад

    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?

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад

      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

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад

      Jadi mas bebas berkreasi untuk service pattern

  • @claymorehighlander7590
    @claymorehighlander7590 Год назад

    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\.

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад

      Sudah di publish config nya bang.. cek di dokumentasi cara publish confignya bang?

    • @claymorehighlander7590
      @claymorehighlander7590 Год назад

      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..

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад

      @@claymorehighlander7590 ok bang thanks report nya nanti cobak saya perbaiki.. saya pakai laravel 10 aman mungkin di mac os..
      Kalau mas pakai os apa?

  • @farizsaputra
    @farizsaputra Год назад

    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
      @PutuYasaChannel  Год назад +1

      Iya untuk remove repository tinggal hapus saja mas , kalau saya biasanya tetap memakai resource untuk api , dan itu saya pasang di service mas...

    • @farizsaputra
      @farizsaputra Год назад

      @@PutuYasaChannel baik bli.. untuk yang query berarti konsepnya full dilakulan di RepositoryImplement ya? Dan Repository interface merupakan penghubung ke Service interface?

    • @farizsaputra
      @farizsaputra Год назад

      @@PutuYasaChannel dan kalau berkenan juga barangkali bisa dibuatkan video example untuk penerapan resource di service bli.. terimakasih

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад

      @@farizsaputra iya mas interface dengan class implement sudah di bind jadi cukup panggil method yg ada dalam interface nya, tujuanya agar konsisten dengan interface...

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад

      @@farizsaputra noted mas

  • @sdbys
    @sdbys Год назад +1

    bang boleh nanya nanya ? ada sosmed ngga bang?

  • @hajaraswad3345
    @hajaraswad3345 Год назад

    Tujuan bind apa ya bang? Soalnya klo saya biasa gak pernah bind, terimakah

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад

      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

    • @fatkulumar7807
      @fatkulumar7807 Год назад

      @@PutuYasaChannel kalau tapa bind bisa ga bang ? n kalau bisa cara nya gimana ya ? hehe terima kasih bang

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад +1

      @@fatkulumar7807 bisa bang tapi tidak pakai pacakage yg saya buat... Bisa buat sendiri pola service pattern nya dan tanpa isi interface

  • @fatkur
    @fatkur Год назад +1

    kalo mau ganti implementasinya, berarti yang di rubah di bagian provider ya bang?

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад +2

      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);
      });

  • @syaokifaradisa09
    @syaokifaradisa09 Год назад

    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?

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад

      Iya benar mas, service bisa manggil banyak repository

    • @adityafawzan312
      @adityafawzan312 Год назад

      @@PutuYasaChannel bahkan jg di satu controller bisa manggil bnyak service jika memang diperlukan mas

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад

      @@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)

    • @mangeza1753
      @mangeza1753 Год назад

      @@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.

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад

      @@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

  • @tiyokprasetyo4500
    @tiyokprasetyo4500 Год назад

    kenapa bind bang registernya engga singleton

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад +1

      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

    • @tiyokprasetyo4500
      @tiyokprasetyo4500 Год назад

      @@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

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад

      @@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

    • @tiyokprasetyo4500
      @tiyokprasetyo4500 Год назад

      @@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

    • @PutuYasaChannel
      @PutuYasaChannel  Год назад

      @@tiyokprasetyo4500 ok siap terimakasih

  • @tiktok-wq1pd
    @tiktok-wq1pd 2 месяца назад

    saya coba GenUID di laravel inertia vue terbaru tidak bisa login ya bang ? tapi kalau use GenUID nya di hapus bisa login

    • @PutuYasaChannel
      @PutuYasaChannel  2 месяца назад

      Oh kalau use GenUid primary key harus CHAR bang tidak bisa bigint

    • @PutuYasaChannel
      @PutuYasaChannel  2 месяца назад

      Penggunaan GenUid itu auto generate uid untuk primary key CHAR, tujuanya sih agar primary key tidak mudah ditebak sama enduser

    • @tiktok-wq1pd
      @tiktok-wq1pd 2 месяца назад

      @@PutuYasaChannel baik bang . ini kalau saya ganti create uuid nya di controller bisa login bang,

    • @tiktok-wq1pd
      @tiktok-wq1pd 2 месяца назад

      @@PutuYasaChannel 'id' => substr(base_convert(sha1(uniqid(mt_rand())), 16, 36), 0, 36),

    • @tiktok-wq1pd
      @tiktok-wq1pd 2 месяца назад

      @@PutuYasaChannel baik bang . tapi kalau pake traits lebih enak kek nya bang . kek cara nya abang hehe