3
public static class Th
{
    public static T e<T>(T theObject) where T : class
    {
        return theObject;
    }        
}

public static class ObjectExtensions
{
    public static bool Is<T>(this T o, Func<T, bool> a) where T : class
    {
        return a(o);
    }
}

//...

//logic in a method somewhere
Func<string, bool> valid = property => _myService.SomeValidationMethod(property);

if (Th.e(_request.Property).Is(valid))
{
   //do something
}

このコードは本番環境に適していますか?その理由は何ですか?

編集:すべてのコメントをありがとう。私があなたの応答を読んだのと同じくらい、C#構文の限界点までのストレッチを読んで楽しんでいただけたと思います。

4

4 に答える 4

5

流暢なAPIに問題はありませんが、これは驚き最小の原則に違反しているようです。Th名前の付いたクラスや。という名前のメソッドの目的がわかりませんe

于 2011-01-31T21:41:05.620 に答える
2

このコードが「流暢」であると思わせる理由は何ですか?

これは絶対に流暢ではなく、自己文書化でもありません。

于 2011-01-31T21:41:12.320 に答える
2

それは遠すぎます。いいえ、コードは本番環境には適していません。Th.e正しく表現された散文でも適切な名前のコードでもありません-どちらのコンテキストでも意味がありません。

于 2011-01-31T21:42:24.127 に答える
1

あなたが「流暢さ」と呼ぶものは非常に重要であり、ほとんどの開発者はそれを見逃していますが(CSアルゴリズムライターのように、これを本当に気にする必要がある人でも)、あなたが示したコードスタイルは言語の表現力を乱用しており、あまり有用ではありません、IMO 、2つの理由:

  • if (_request.Property.Is(valid))ThこれらのクラスとTh.eメソッドがなくても、十分に「流暢」です。
  • この「流暢さ」のために、あなたは貴重な識別子を失っています。別のオブジェクトを検証する必要がある場合はどうなりますか?あなたがするif (Th.e(_request.Property2).Is(valid))if (Th.e(_request2.Property).Is(valid))?別のテストを実行する必要がある場合はどうなりますか?あなたはif (Th.e(_request.Property).Is(valid2))
于 2011-01-31T22:35:50.033 に答える