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')
Tidak ada komentar:
Posting Komentar