2012-03-12 9 views
7

私は、データベースからデータをプルするための方法を持っている、と私はそれがこれを取得したい:命名複雑な方法が

リミットファイブのエントリ、 アイテムの種類がニュースレターでは、 (アクティブにするPublishDate <のDateTimeを必要とします。今すぐ)

だから私は、これは私には少し長いようで、それGetFiveActiveNewslettersByCreatedDate()

に名前を付けると思っています。私はこのような名前を付ける良い方法についてサイトを見ましたが、どうやってそれを扱いますか?

+3

その名前自体は何も問題ありません。あるいは、最大数を引数として返すメソッドを持つこともできます。 –

+3

5へのハードコーディングは悪い習慣です。 'GetActiveNewsletters(int32 size)' – Oybek

+1

さらに 'ByCreatedDate'を使うことは冗長です。' Active'はすでに時間述語の意味を持っています。 'ByCreatedDate'で使うなら、それはあなたが追加の述語で選択していることを意味します。 – Oybek

答えて

4

この特定の命名法を避けるために、私はこのメソッドを一般的なものにすることについて考えます。次のようなものがあります。

GetNewsLetters(int amount, bool onlyActive, SortOrder orderBy) 
12

代わりに、このようなものはどうですか?

public IEnumerable<Newsletter> GetActiveNewsletters(int maxRecords = 5) 
{ 
    // ... 
} 

トップ5はまだデフォルトですが、それ以上はあまり特定的ではありません。

+4

呼び出されたアセンブリがすべての呼び出し元を再コンパイルして再デプロイせずに更新された場合、微妙なバグが発生する可能性がある呼び出し側アセンブリにコンパイルされるため、パブリックデフォルトパラメータに対してアドバイスします。 –

+0

@MichaelStum:良い点。私はそれが状況に依存すると思う。多くの/ほとんどのアプリケーションでは、パブリックAPIのようなものであるため、これはおそらく問題ではありません。 –

5

GerEntries(T typeofEntity, DateTime date, int maxNumber)

そしてnaturaly文書法のように、私はそれをリネーム推薦する私は、パラメータ化メソッドを追加します。GetNewsletters(int recordCount=5) ニュースレターの数は、メソッドのパラメータになります。

残りは、///Summaryで想定して説明することができます。

+1

+1の '/// Summary' – Oybek

2

名前を付けて、どのような方法で開発者に明らかになるように名前を付けます。自己コメントコードは王様です。メソッド名が長すぎると、内部で多すぎるさまざまなことが起こり、リファクタリングの候補になります。

具体的な例として、あなたが指定した名前には問題はありません。

8

私が個人的に名前に「5」を焼くのを避ける理由は、それがラインを意味するかもしれないということです。

たとえば、後であれば、5つではなく、特定のシナリオで10のニュースレターの需要がありますか?さて、追加のメソッドGetTenActiveNewslettersByCreatedDate()を作成します。そして今、あなたは20,50,100のニュースレターが必要なときに後続の開発者が従う「デザインパターン」を持っています。これは腐ってしまうデザインで、5つのパラメータをパラメータ化することで今すぐ逃れることができます。

もちろん、これはYAGNI /投機的な一般性かもしれません。 5が本当に魔法のようなものであれば、決してルールを変えることはないでしょう。それを慎重に焼くかもしれません。私はそれをやっていることを後悔していることが分かりました。