iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
自我挑戰組

冒險村-30 Day Ruby on Rails Tips Challenge系列 第 25

冒險村25 - Design Pattern(5) - Service Object

  • 分享至 

  • xImage
  •  

25 - Design Pattern(5) - Service Object

Service 相對於來說是最單純的,主要目的在做一件事情。舉例來說,我的網站可能有跨時區的問題,常常需要換算 time zone 與其他時區之間的計算,所以會需要知道其他時區目前的時間,就以 us_east_time 來舉例:

Create app/services folder

  • us_east_time.rb

Add app > services > us_east_time.rb

  # frozen_string_literal: true
  class UsEastTime
    TIME_ZONE = "America/New_York".freeze

    class << self
      def current
        ActiveSupport::TimeZone.new(TIME_ZONE).now
      end

      def current_date
        current.strftime("%Y%m%d")
      end

      def current_year
        current.year
      end
    end

    # ...
  end

View

  # frozen_string_literal: true
  <%= UsEastTime.current =>

這樣子的寫法,就不會把需要用到 us_east_time 的邏輯散落在各地或者重複寫好幾遍,相對於來說也很好理解。

註: 簡單也好理解龍哥的書 - Rails 程式碼整理術(進階)


上一篇
冒險村24 - Design Pattern(4) - Calculator
下一篇
冒險村26 - Design Pattern(6) - Form Object
系列文
冒險村-30 Day Ruby on Rails Tips Challenge30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言