2011-08-24 2 views
2

인터페이스를 만족하는 메소드/속성의 존재를 확인하여 동적 유형 지정을 사용하여 인터페이스를 적용하는 루비의 방법에 대해 준비를 마쳤습니다.회원 검증 vs 인터페이스

인터페이스를 사용하는 것보다 전반적으로 더 좋은 디자인 원리는 무엇입니까? 찬성/반대 의견은 무엇입니까? 예를 들어 당신이 C#에서 동일한 개념을 구현할 수하지만,

public class Foo 
{ 
    public Foo(dynamic _obj) 
    { 
     MethodInfo[] methods= _obj.GetType().GetMethods(); 

     if (!methods.Any(x => x.Name == "SomeRequiredMethod") 
     { 
      throw new ArgumentException("Object does not meet interface requirements."); 
     } 
    } 

    // proceed with functionality that requires the method 
} 

를가 같은 값을 가질 것입니다 있는지 확실하지 않습니다 물론 당신이 서명처럼 그냥 이름보다 더 확인하기 위해 확장 할 수, 반환 유형 등

생각하십니까? 나는이 방법 몇 가지 주요 문제 문제 볼 수 있습니다

답변

1

:

  1. 반사 느린
  2. 동적 호출 또한 강력한 형식의 전화보다 훨씬 느린입니다
  3. 코드는 더 복잡

그리고 매우 구체적인 요구 사항을 제외하고 어떤 이점도 볼 수 없습니다 ...

C#은 정적 인 강력한 형식의 언어로 설계되었으며 동적 기능이 추가되었지만 강력한 형식의 대안이없는 경우에만 사용해야합니다.

실제로 동적으로 개체를 사용해야하는 경우 구성원을 수동으로 확인하지 말고 코드를 try 블록에 넣고 호출하는 구성원이없는 경우 발생하는 RuntimeBinderException을 잡습니다.

+0

Ruby는 성능에 영향이 있는지 어떻게 알 수 있습니까? 나는 39ms에 그것을 기록했다. 나는 확실히 추측 할 수있다. –

+0

저는 Ruby에 대해 많이 알지 못합니다. 그러나 역동적 인 언어이므로, 이런 종류의 일에 확실히 더 적합합니다. 당신이주는 타이밍은 문맥 없이는 매우 유용한 정보가 아닙니다 ... 나는 당신의 방법이 무엇인지, 당신이 당신의 시험을 어떻게했는지 모른다. –