Kĩ thuật service object trong rails
Bài đăng này đã không được cập nhật trong 3 năm
Xin chào tất cả các bạn, hôm nay mình xin giới thiệu với các bạn về chủ đề như tiêu đề mình đã nhắc đến, đó là Service Object trong Ryby on Rails.
Đầu tiên mình xin giới thiệu sơ lược về Service Object và mục đích sử dụng.
- Service Object thực hiện tương tác của user với ứng dụng. Nó chứa business logic điều phối các thành phần tạo tác khác.
- Service Object giúp ta có thể clear code trong controller hoặc model để biết chính xác code của chúng ra đang làm gì, tránh bị rối trong controller và model.
Các Service Object thường được để trong mục app/services, cụ thể như sau:
Quá trình thực hiện của Service Object
- Nhận input (có thể có hoặc không)
- Thực hiện các chức năng
- Trả về kết quả
Khởi tạo
Một service thực thi tương tác của user vậy nó khởi tạo với đối tượng user đó. Trong ứng dụng web, service là user thực hiện yêu cầu.
Input
- Kiểu Single Value: một trường ít nhìn thấy.
- Hash of values: các params từ một controller rails, phổ biến và dễ sử dụng (tuy nhiên có hạn chế với định dạng đầu vào là khi định dạng input thay đổi service bên trong phải thay đổi theo).
- Form Object: một đối tượng riêng biệt thể hiện input của user. Nó xử lý phân tích, xác định đầu định dạng đầu vào, giải phóng service. Nó rất hữu ích để tách phân tích cú pháp các params phức tạp từ công việc thực sự thực hiện trong service.
Ví dụ mình có một đoạn code để clone một course:
Sử dụng
Đặc điểm của service là khi chúng ta gọi một service nó thực hiện gửi một thông điệp gọi đến serivce instance. Phương thức gọi sử dụng data vào khởi tạo và input data để thực hiện công việc của service. Bao gồm:
- creating/ updating/ deleting một record
- điều phối việc tạo / cập nhật nhiều record
- phân cấp cho các dịch vụ khác cho việc gửi emails, gửi thông báo...
Kết quả
Service Object có thể thự hiện các thao tác. Đối với người lập trình biết rằng sẽ có thứ nào đó thực hiện sai vì vậy cần phải có thông báo khi thành công hoặc có lỗi xảy ra khi sử dụng service.
Có 4 cách để kiểm tra:
- Boolean value cách đơn giản nhất chỉ trả về true khi thành công và false khi có lỗi. Nó chỉ trả về giá trị nhưng không thể mang thông tin nào khác được.
- ActiveRecord Object nếu vài trò của service là tạo mới hoặc cập nhật rails models, kết quả là nó trả về một object. Chúng ta có thể kiểm tra lỗi trong biến trả về để xác định cách gọi service thành công.
- Status Object chúng ta dùng các đối tượng dụng tiện ích để báo hiệu thành công hay lỗi nó giúp trong nhiều trường hợp phức tạp (VD: flash).
- Nêu lên ngoại lệ chúng ta sẽ nêu lên ngoại lệ với bật kỳ kiểu lỗi trong đối tượng service. Giống như các đối tượng status thì các ngoại lện có thể chứa dữ liệu và có nghĩa đầy đủ trong domain.
Trên đây là kiến thức cơ bản của mình về Service Object, nếu có sai sót mong các bạn đọc góp ý để mình cùng biết thêm. Xin chân thành cảm ơn!
Nguồn: https://www.netguru.co/blog/service-objects-in-rails-will-help
All rights reserved