2011-11-09 21 views
1

我正在開發一個類庫的抽象API。我有兩種方法:如何命名Get()方法的變體?

// Throws an exception if object cannot be found 
MyObj Get(MyIdType id); 

// Returns false if object cannot be found; no exception 
bool TryGet(out MyObj obj); 

沒有爲第三方案的要求:一個返回null如果對象不能被發現,並沒有拋出異常。

// Returns null if object cannot be found; no exception 
MyObj ?????(MyIdType id); 

我被困在什麼來命名它。 GetOrDefault已被排除爲混淆。 GetIfNotNull已被建議,但也似乎不清楚。 GetOrNull是迄今爲止最有希望的。

有沒有人有任何其他建議,或知道任何公共API的公約,我可以遵循?

+5

不要這樣做。說服他們Get和TryGet就足夠了。空是魔鬼。 – TrueWill

+0

.Net有什麼味道? – IAbstract

+1

我會更生氣,他們希望Get()拋出一個異常,如果它爲空。這太可怕了。 –

回答

2

我會根據LINQ擴展方法FirstOrDefaultGetOrDefault(如你所建議的那樣)去。

也許GetValueGetValueOrDefault聽起來會好一些。

+0

這是我最初的建議,但我的客戶排除了。 – afeygin

+1

我討厭客戶......我說服他們這些是微軟自己使用的標準命名約定(在LINQ中)。幾乎所有C#開發人員都會知道這是什麼意思,而不是查看文檔,而您可能需要記錄任何其他方法名稱。 – Connell

+1

如果客戶不喜歡你建議的方法名稱,那麼我建議客戶想出他們自己的方法名稱。 – phoog

1

如何:GetOrDefault

...OrDefault是LINQ相當標準。

+0

這是我最初的建議,但我的客戶排除它太混亂,因爲它可能被解釋爲「違約」的對象。 – afeygin

+0

@afeygin - 'GetValueOrNull'不會含糊不清。 – Oded

+1

@afeygin它***是***默認對象 – Connell

3

我會選擇不在兩種情況下有不同的Get方法。爲什麼不讓所有情況下的Get返回null。爲什麼拋出異常?

如果需要返回空值,我會選擇將其保留至用戶代碼以拋出異常。

有關何時拋出異常的進一步指導,請參閱this question

+0

到底爲什麼拋出一個異常。 – IAbstract

0

在我看來,你應該堅持:

MyObj Get(MyIdType id); 

除了在此處拋出異常,只是返回null如果沒有拋出異常可選的明確要求,null,我會嘗試:

MyObj Get (MyIdType id, bool ReturnDefault = false) // if .net 4 

我特別不喜歡這個選項 - 但有時要求將覆蓋我們在想什麼感覺的權利或自然。

0

您可以嘗試GetObjectOrReturnDefaultValue或者,因爲您知道它是參考類型GetObjectOrReturnNull。它漫長而醜陋,但並不含糊。

0

我只會在interface上保留bool TryGetXXXXX(out T value)變體,並將其餘的作爲擴展方法提供給它。它使您的界面本身非常緊湊,但同時也符合客戶的需求。