- Service object đang trở thành một trong những cách để thu gọn controller và model trong rails (thin controller và model).
- Service object là một PORO (Plain old Ruby Object), có nghĩa là để phân tách các đối tượng nghiệp vụ thành các lớp và phương thức có thể quản lý được. Một service object nên có một trách nhiệm duy nhất.
- Hãy thực sự cố gắng chỉ để có một phương thức public.
what is service object?
- Kỹ thuật để giảm fat controller và model
- Service object là class hoặc module
when is use service object?
- Có nhiều logic trong controller và model.
How is use service?
- Tạo folder service trong thư mục app
- Tạo file tương ứng với controller
- Tạo service object chúng ta có 2 cách:
Cách 1:
1 2 3 4 5 6 7 8 9 10 11 12 | class Service def initialize user @user = user end def perform end private attr_reader :user end |
Để sử dụng service chúng ta viết như sau:
1 2 | Service.new(current_user).perform |
Cách 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # gkc_hash_code : 01D7NRNB2RGYA4ST5PTBBKDCW9 class Service def self.call(param1) new(param1).call end def call private_method end private attr_reader :param1 def initialize param1 @param1 = param1 end end |
Sử dụng như sau:
1 2 | Service.call param1 |
Thực hành
Chúng ta có một controller như sau:
- Tạo service objects bằng module
- Gọi trong controller
- Tạo service object bằng class
- Sử dụng trong controller
- Hy vọng bài viết này có thể giúp cho mọi người hiểu về service object và cách sử dụng.
Happy coding!