Tell, Don’t Ask « hi ! even
這學期在清華大學修了一門非常有價值的課程,
是服科所 Soumya Ray 的 Service-Oriented-Architecture (SOA)
上個禮拜一老師提到一個他非常喜歡的影片 主要在講如何針對既有的程式架構進行 refactor
並且老師也提出一個很有趣的意見
refactor is not a thing which always decreases your codebase but always enhance readibility
ummm.. 最近也常常面對要對程式架構進行重構的時候
常常也是不自不覺寫了更多 code
於是就陷入一個天人交戰的時候
似乎這樣不算是一個好的 refactor
但老師這句話頓時讓我明白 自己正走在一個正確的路上
程式的易讀性有時候需要更多的 codebase support 但是減少的是自己(或是其他協作人)閱讀時的時間成本
今天花了一些時間看了這個老師非常推薦的影片
整個影片都不斷圍繞同一個概念 也是所有 programmer 常常會犯的錯誤
Tell, Don’t Ask (中文譯為:命令,不要詢問)
按照字面意思解釋
我們在撰寫程式時 應該盡可能避免依賴調用對象的屬性來決定目前的行為
舉個常見的例子是
Bad example
class JobSite
def initialize(location, contact)
@location = location
@contact = contact
end
def name
if contact.name
contact.name
else
‘No name’
end
end
end
Good example
class JobSite
def initialize(location, contact)
@location = location
@contact = contact || NullContact.new
end
def name
contact.name
end
end
class NullContact
def name
'No name'
end
end
在這樣的情況下 我們可以讓每個 method 變得更單獨 不會因為屬性的不同而有不同的 value
以下是我在看完影片後 查了幾個挺不錯的解釋
命令,不要去询问(Tell, Don’t Ask)
[译]Tell, Don’t Ask
以下為影片連結
Aloha Ruby Conf 2012 Refactoring from Good to Great by Ben Orenstein
Originally published at hieven.logdown.com.