문제

다음과 같은 인터페이스를 사용하는 대신 :

public interface IStartable
{
    void Start();
    void Stop();
}

나는 보통 객체의 생성자가 start () 코드를 실행하고 dispose 메소드가 stop () 코드를 실행하도록 idisposable을 구현하게합니다.

스타일의 문제입니까? 아니면 istartable과 같은 것을 가지고 있지 않아 중요한 것을 놓치고 있습니까? 내가 보는 것은 주립/중지 상태를 유지해야하기 때문에 추가 복잡성입니다.

특히 IOC/DI 컨테이너의 맥락에서 CTOR/DUSPOAS를 사용하여 시작/정지 대 사용의 장단점은 무엇입니까?

편집 : 훌륭한 답변, 당신은 나에게 연장 가능한 객체에 인터페이스를 사용하도록 설득했다. 나는 누가 대답하는지 결정할 수 없으므로 24 시간 후에 가장 많은 표를 얻은 사람을 받아 들일 것입니다.

도움이 되었습니까?

해결책

인터페이스를 사용하는 데있어 일반적인 장점은 그들이 자기 설명과 자기 광고하는 것입니다. 인터페이스가 없다면 "시작하고 멈출 수 있습니까?" 대조적으로 인터페이스를 사용하는 경우 객체를 쿼리하여 어떤 종류의 메시지에 응답할지 확인할 수 있습니다. 그런 다음 해당 객체가 인터페이스에 의해 캡슐화 된 기능을 구현했음을 안전하게 보장 할 수 있습니다.

다른 팁

일반적으로 생성자는 적절하게 시작된 객체를 생성해야합니다

그리고 더 이상 아무것도!

start ()라고 말할 때 무슨 뜻인지, 구체적으로는 무엇을 의미하는지에 달려있을 수 있습니다. 그러나 일반적으로 객체 초기화를 일상적인 실행 (특히 상태 및/또는 장기 실행!)과 혼합하여 위반합니다. 사회.

또한 많은 모호성을 남깁니다. 소비자에게, 주어진 개체에 대해 우리는 CTOR를 호출 할 때 그것이 "시작"한다는 것을 어떻게 알 수 있습니까? "계약을 구현하지 않는이 주어진 대상에 대해 저자가 내 기대에 부합하는 것을 희망하기 위해 남겨 두어야합니까?" 인터페이스는 액션의 존재와 가용성을 명시 적으로 만듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top