Tell, Don’t Ask « hi ! even

Even Chang
3 min readJan 11, 2016

這學期在清華大學修了一門非常有價值的課程,

是服科所 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.

--

--

Even Chang

目前在英國倫敦的台灣人軟體工程師,曾經待過台灣、新加坡、荷蘭。希望透過分享,來產生更多思維碰撞💥 | LinkedIn: @hieven