나는 대답에이 댓글을 통해 SO 검색과 온되었다대리인을 테스트하여 테스트 할 수있게 할 때 인터페이스를 추출해야하는 이유는 무엇입니까?
을 우리가 DI는 대리인 그것을 테스트 할 수 있도록 할 수있는 인터페이스를 추출하는 의식을 통해 이동 이유는 무엇입니까?
이것은 내가 연초에 생각한 것입니다. 인터페이스 구현 대신 순수한 기능 (함수 포인터라고 생각합니다.)을 주입하는 데 본질적으로 문제가 있습니까?
나는 대답에이 댓글을 통해 SO 검색과 온되었다대리인을 테스트하여 테스트 할 수있게 할 때 인터페이스를 추출해야하는 이유는 무엇입니까?
을 우리가 DI는 대리인 그것을 테스트 할 수 있도록 할 수있는 인터페이스를 추출하는 의식을 통해 이동 이유는 무엇입니까?
이것은 내가 연초에 생각한 것입니다. 인터페이스 구현 대신 순수한 기능 (함수 포인터라고 생각합니다.)을 주입하는 데 본질적으로 문제가 있습니까?
인터페이스를 설명하는 '의식'이라는 단어는 정적 인 타이핑을 금지하는 Ruby-ist의 의견과 같이 의심스럽게 들립니다. 좋은 리펙토링 및 템플릿 툴을 사용하면 어쨌든 대부분의 의식이 눈에 띄지 않게됩니다.
대리인을 전달하는 것이 일반적이지만 인터페이스가있는 IoC는 일반적으로 구현, 사용, 이해 및 유지 관리가 더 쉽습니다.
public class MyClass
{
public MyClass(IAmEasyToUnderstand easy)
{
if (easy == null) throw new ArgumentNullException("easy");
}
public MyClass(Func<bool, int, int, Point> IAmNot, Func<bool> Clear, Action aboutAnything)
{
//multiple null checks.
}
}
public interface IAmEasyToUnderstand
{
bool DoPointStuff(int a, int b, Point point);
bool CanHazExecute();
Action RunRun();
}
지금 다른에 의해 소비를위한 인터페이스를 반환하는 클래스 고려하십시오 :
전형적인 생성자 고려 후자의 소비 예보고에서public MyClass
{
//IFace
public IAmEasyToUnderstand FindEasy();
//Not Iface
Func<bool, int, int, Point> ReturnPointStuffDoer();
Func<bool> ReturnCanHazExecuteCallback();
Action WowThisIsAnnoying();
}
var easy = myclassInstance.FindEasy();
var consumer = new EasyConsumer(easy);
....
var consumer = new EasyConsumer(
myClassInstance.ReturnPointStuffDoer(),
myClassInstance.ReturnCanHazExecuteCallback(),
myClassInstance.WowThisIsAnnoying());
을, 명백한 정리는 다음과 같습니다
var consumer = new EasyConsumer(myclassInstance);
즉, 클래스 유형을 다음으로 대체해야합니다. 조롱을위한 인터페이스.
+1을 사용하고 있습니다. – Steven
기능 포인터는 언어에 따라 다르기 때문에 귀하의 질문에 답해 드리겠습니다. 그래서 어떤 언어? –
가독성을 높이기 위해 C# 4.0 – Ben