5

私は周りを遊んでいるいくつかの簡単な検証のためのいくつかの流暢なインターフェイスを作成しています。私が気づいたことの一つは、たくさんの異なるオブジェクトが作成されていることです。以下の文与え例えばFluent Interfaces - 作成されるオブジェクトの数

: '' のすべてのための

Check.Assertion.ForValue.That(value, "value").IsNotNull() : void 

Check.Assertion.ForArgument.That(value, "value").IsNotNull() : void 

Validate.Assertion.ForDate.That("Test").IsNotNull() : bool 

Validate.Assertion.ForNumeric.That("Test").IsNotNull() : bool 

(最後のものを受け入れる)私はオブジェクトを新しくしています。ここで流暢なインターフェイスを使用していない場合、私はちょうど静的メソッドを使用していたでしょう。

静的メソッドを扱う場合のように、この数のインスタンスオブジェクトを使用しているときにパフォーマンスの実際の違いに気づく人は誰でも知っています(非常に小さいオブジェクトです)。

乾杯 アンソニー

答えて

9

あなたは、必ずしもすべての場所で新しいオブジェクトを作成する必要はありません。流暢なインターフェイスのほとんどをインターフェイスで解決するだけで、多くのインターフェイスを1つのオブジェクトに実装できます。その場合は、新しいインターフェイスを介してちょうどthisを返すことができます。

例:

public interface ICheckAssertionForValue 
{ 
    ICheckAssertionForValueThat That(Object value, String name); 
} 

public interface ICheckAssertion 
{ 
    ICheckAssertionForValue ForValue { get; } 
} 

public class Check : ICheckAssertion 
{ 
    public static ICheckAssertion Assertion 
    { 
     get { return new Check(); } 
    } 

    ICheckAssertionForValue ICheckAssertion.ForValue 
    { 
     get { return this; } // <-- no new object here 
    } 

    ICheckAssertionForValueThat ICheckAssertionForValue.That(Object value, String name) 
    { 
     return new SomeOtherObject(value, name); 
    } 
} 
+0

私はそのことを考えていなかったねえクールな...私たちはそのメソッド内の新しいSomeOtherObjectオブジェクトを返すされているだけで1つの迅速な事は、私たちが実施し確認してください得ることができませんでしたICheckAssertionForValueThatインターフェイスとちょうどこれを再び返しますか?私は流暢なインターフェイスを設計する際にどれだけの責任が単一のクラスに入るべきかということになると思います。答えは多分私がそれをうまくやっていなかったら、それはすべて同じクラスに入っていたでしょう...あなたはどう思いますか? –

+0

また、新しいオブジェクトを作成することについて心配していますか?唯一のことは、私はこのインタフェースを遠くに使用することです(つまり、異なるメソッドのparamsがnullであるかどうかをチェックし、そうであれば例外をスローします) –

関連する問題