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

참고. 유창한 인터페이스의 대부분을 인터페이스를 통해 해결할 수 있으며, 하나의 오브젝트에 많은 인터페이스를 구현하기 만하면됩니다. 이 경우 새 인터페이스를 통해 방금 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 객체를 반환하는 단 하나의 빠른 것, 우리는을 구현하기 위해 확인되지 수 ICheckAssertionForValueThat 인터페이스와 그냥 다시이 반환? 나는 유창한 인터페이스를 디자인 할 때 얼마나 많은 책임이 하나의 클래스로 들어가야하는지에 관해 생각해 봅니다. 아마도 대답은 내가 유창하게하지 않는다면 모두 같은 수업을 듣게 될 것입니다. 어떻게 생각하세요? –

+0

아니면 새로운 개체를 만드는 것에 대해 너무 걱정하고 있습니까? 유일한 방법은이 인터페이스를 멀리 사용하는 것입니다 (즉, 다른 메소드의 params가 null인지 확인하고 예외가 발생하는 경우) –