我正在研究一個函數,該函數通過值(例如名稱)從容器(例如數組)返回對象。如果該對象尚不存在,則會創建並返回該對象的默認副本(默認構造函數)。提出如何命名「獲取/創建和獲取」功能
這樣,該函數總是返回一個對象,無論對象在調用函數之前是否存在。
現在我的問題是這樣的:如何命名這個函數? GetOrCreateThenGet聽起來很愚蠢。有任何想法嗎?
編輯:我覺得這樣的事情會更接近功能的本質:GetForSure ...
我正在研究一個函數,該函數通過值(例如名稱)從容器(例如數組)返回對象。如果該對象尚不存在,則會創建並返回該對象的默認副本(默認構造函數)。提出如何命名「獲取/創建和獲取」功能
這樣,該函數總是返回一個對象,無論對象在調用函數之前是否存在。
現在我的問題是這樣的:如何命名這個函數? GetOrCreateThenGet聽起來很愚蠢。有任何想法嗎?
編輯:我覺得這樣的事情會更接近功能的本質:GetForSure ...
爲什麼除getXXX()
之外還需要其他任何東西。任何有and
/or
的方法意味着它做得很多,並且正在混合關注並嚴重破壞Single Responsibility Principle
。
調用者是否應該真正關心對象是否按需創建,如果他們需要從合同中獲取對象?
getOrCreate
意味着你會get
對象or
它將是created
但沒有返回。
再次爲什麼我會關心create
部分?
如果我真的應該關心它會是getOrCreateAndGet
語義上是正確的,但非常非正統,並傾向於與同行討論方法做許多事情和混合關注和打破Single Responsiblity Principle
?僅僅因爲其他人把事情命名爲怪異和非感性也不是一個很好的藉口,它也是錯誤的。
獲取與GetOrCreate不一樣,因爲Get可能處於期望項目不存在的狀態。我建議用Upsert比喻Getsert。 – garkin 2015-09-25 22:04:42
GetGuaranteed似乎涵蓋所有的調用者需要知道...
該函數最適合的名稱是「提供」,就像您提供貨物一樣,您可以從倉庫裝運貨物或製作/購買新貨物然後交付。
我只是放棄了「ThenGet」 – Jay 2013-04-24 20:03:27
...這也意味着「GetOrCreate(ButDon'tGet)」... – 2013-04-24 20:24:37
不,這是這種情況下的典型命名約定,但不完善。該方法返回一個對象;創建一個實例但返回'null'會很奇怪。 – Jay 2013-04-24 21:56:43