2013-04-24 73 views
6

我正在研究一個函數,該函數通過值(例如名稱)從容器(例如數組)返回對象。如果該對象尚不存在,則會創建並返回該對象的默認副本(默認構造函數)。提出如何命名「獲取/創建和獲取」功能

這樣,該函數總是返回一個對象,無論對象在調用函數之前是否存在。

現在我的問題是這樣的:如何命名這個函數? GetOrCreateThenGet聽起來很愚蠢。有任何想法嗎?

編輯:我覺得這樣的事情會更接近功能的本質:GetForSure ...

+2

我只是放棄了「ThenGet」 – Jay 2013-04-24 20:03:27

+0

...這也意味着「GetOrCreate(ButDon'tGet)」... – 2013-04-24 20:24:37

+0

不,這是這種情況下的典型命名約定,但不完善。該方法返回一個對象;創建一個實例但返回'null'會很奇怪。 – Jay 2013-04-24 21:56:43

回答

5

爲什麼除getXXX()之外還需要其他任何東西。任何有and/or的方法意味着它做得很多,並且正在混合關注並嚴重破壞Single Responsibility Principle

調用者是否應該真正關心對象是否按需創建,如果他們需要從合同中獲取對象?

getOrCreate意味着你會get對象or它將是created但沒有返回。

再次爲什麼我會關心create部分?

如果我真的應該關心它會是getOrCreateAndGet語義上是正確的,但非常非正統,並傾向於與同行討論方法做許多事情和混合關注和打破Single Responsiblity Principle?僅僅因爲其他人把事情命名爲怪異和非感性也不是一個很好的藉口,它也是錯誤的。

+7

獲取與GetOrCreate不一樣,因爲Get可能處於期望項目不存在的狀態。我建議用Upsert比喻Getsert。 – garkin 2015-09-25 22:04:42

-1

GetGuaranteed似乎涵蓋所有的調用者需要知道...

2

該函數最適合的名稱是「提供」,就像您提供貨物一樣,您可以從倉庫裝運貨物或製作/購買新貨物然後交付。