Service Object pada Ruby on Rails

Tutorial service object ini akan memisahkan bisnis logic dan logic aplikasi agar mudah di maintenance dan agar bisa scalabel

Apa itu  service object?

pola yang memungkinkan Anda memisahkan logika bisnis dan elemen lain dari kontroler dan model, yang memungkinkan model menjadi lapisan data dan kontroler menjadi titik masuk API.

Service object,disini kita akan membuat class yang akan bertanggung jawab terhadap logic bisnis saja  dan hanya akan ada 1 method public untuk satu task yang dikerjakan

kapan kita harus pake service object?

1. ada proses data yang kompleks atau butuh terhubung dulu ke external API, dengan ini kamu dapat encapsulasi komplex proses agar bisa di manage

2. bisnis rules yang komplex

3. butuh integrasi dengan third-party integrations

Langkah : 

Pertama kita akan buat folder di app/services

buat app/services/user_registration.rb  

class UserRegistration

  extend LightService::Organizer

  def self.call(params)

    with(params: params).reduce(

      ValidateUserInput,

      CreateUser

 )

  end

end

code ini akan handle membuat satu public method utk call calss UserRegistration dan akan menjalankan action ValidateUserInput, CreateUser

selanjutnya kita buat model User

rails g model User

selanjutnya buat class CreateUser.rb di app/services/user_registration/create_user.rb seperti ini 

class UserRegistration::CreateUser

  extend LightService::Action

  expects :validated_params

  promises :user

  executed do |context|

    user = User.new(context.validated_params)

   

    if user.save

    context.user = user

    else

    context.fail!(user.errors.full_messages.to_sentence)

    end

  end

end

class UserRegistration akan eksekusi pembuatan user 

lalu buat app/services/user_registration/validate_user_input.rb seperti dibawah ini : 

class UserRegistration::ValidateUserInput

  extend LightService::Action

  expects :params

  promises :validated_params

  executed do |context|

    if context.params[:email].blank?

      context.fail("Please Fill Email !! ")

    end

  context.validated_params = context.params

  end

end

class ValidateUserInput, akan melakukan validasi input jika email kosong

langkah terakhir kita bisa eksekusi service object nya seperti ini di rails console


result = UserRegistration.call(email: 'jaka@testdoterb.com', name: 'Jaka Pratama')

Berita Terkini

Berita Terbaru

Daftar Terbaru

News

Jasa Impor China

Berita Terbaru

Flash News

RuangJP

Pemilu

Berita Terkini

Prediksi Bola

Technology

Otomotif

Berita Terbaru

Teknologi

Berita terkini

Berita Pemilu

Berita Teknologi

Hiburan

master Slote

Berita Terkini

Pendidikan

Resep

Jasa Backlink

Slot gacor terpercaya

Anime Batch