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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 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

1
<%= UsEastTime.current =>

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

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