2011-11-09 15 views
1

私はリポジトリのような抽象化のためのAPIを開発しています。オブジェクトが見つからないと、例外をスローしない場合はnullを返します1:第三の変形のための要件が​​あります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); 

:私は二つの方法があります。

// 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()がnullの場合に例外をスローするようもっと欲しいと怒られます。それはひどい。 –

答えて

2

LINQの拡張方法FirstOrDefaultに基づいてGetOrDefault(あなた自身が示唆したように)を使用します。

GetValueGetValueOrDefaultが良いと思います。 ...OrDefaultは、LINQでかなり標準的であるGetOrDefault

:どの程度

+0

それは私の元の提案でしたが、私のクライアントはそれを排除しました。 – afeygin

+1

私はクライアントを嫌い...私は彼ら自身が(LINQの)標準的な命名規則であることを彼らに納得させるでしょう。ほとんどすべてのC#開発者は、ドキュメンテーションを見ることなくこれが何を意味するのか知っていますが、ドキュメント化する必要がある他のメソッド名はほとんどありません。 – Connell

+1

クライアントがあなたの提案したメソッド名を気に入らないなら、私はクライアントが独自のメソッド名を思いつくことを提案します。 – phoog

1

+0

これは私の元々の提案でしたが、私のクライアントはオブジェクトを「デフォルト設定」していると解釈することができるので混乱してしまいました。 – afeygin

+0

@afeygin - 'GetValueOrNull'はあまりあいまいではありません。 – Oded

+1

@afeygin *** ***はデフォルトでオブジェクト – Connell

3

私は、2つの状況で異なって動作する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)の亜種しか残っておらず、残りの部分は延長方法として提供しています。これは、インターフェイス自体を非常にコンパクトにしますが、クライアントが望むのと同じくらい便利です。

関連する問題