0

これはみんな知ってる

using (var db = new DatabaseEntites())
{
    var row = db.SomeTable.SingleOrDefault(r => r.Id == 5)
}

このような静的メソッドで静的クラスを作成する予定でした

public static class SomeTableRepository
{
   public static class GetSomeTableRow(DatabaseEntities db, int id)
   {
        return db.SomeTable.SingleOrDefault(r => r.Id == 5);
   }
}

最初のコードは次のようになります

using (var db = new DatabaseEntites())
{
    var row = SomeTableRepository.GetSomeTableRow(db, id);
}

これがウェブアプリなら...その種のプログラミングは大丈夫でしょうか...それともその種のプログラミングは問題を引き起こすのでしょうか?...それともこれは完全に良いコードですか:)

4

2 に答える 2

5

コードは技術的に受け入れられますが、なぜそれを行うのですか?これは、コードを実質的により簡潔にすることなく、間接参照を作成します。したがって、ほとんどの人がコードを理解しにくくします。利点は、コードが2文字短くなることです。それは私には勝利のようには思えません。

私自身、本当に価値を追加しない限り、標準のLINQ演算子を使用します。

于 2012-05-03T14:25:35.387 に答える
3

カークが言ったように、私は唯一の利益はマイナーな読みやすさだと思います。ただし、this最初のパラメーターの前に追加し、これを拡張メソッドにすると、コードの潜在的な読者が読みやすくなる可能性があります。

アップデート

public static class GetSomeTableRowまた、コンパイルされないことに気づきました。私はそれをより一般的で将来の読者にとって混乱が少ないように変更しました(classからYourClassName

public static class SomeTableRepository
{
   public static YourClassName GetSomeTableRow(this DatabaseEntities db, int id)
   {
        return db.SomeTable.SingleOrDefault(r => r.Id == 5);
   }
}

...

database.GetSomeTableRow(id);

さらに、これの名前を変更して、実際の内容のように読みやすくすることができます。

database.GetOneRowFromSomeTableById(id);

はい、それは長いですがSingleOrDefault、コードを一目で読みやすくすることであるような単純なメソッドを抽象化する唯一の理由です。パラメータに名前が付けられているため(そして冗長に見えるため)、このById部分については議論の余地がありますがid、それはインテリセンスでコーディングしているときにのみ表示されます。あなたはそれを省くことができます(またはそれを単にByなしに落とすことができIdます...しかしそれは各実装者IMOにとってあまりにも多くを残します)

database.GetOneRowFromSomeTable(id);
于 2012-05-03T14:27:35.313 に答える