문제

나는 동료에게 함수가 객체 자체가 아니라 매개 변수로 인터페이스를 가져와야한다고 확신 시키려고 노력하고있다. 나는 작은 물체가 지나가는 것이 좋을 것이라고 생각하지만, 큰 물체의 경우 큰 물체의 경우 인터페이스를 제공하고 모든 것이 아니라 I/F를 전달할 것입니다.

이러한 큰 클래스 중 하나만있을 것입니다. I/F는 다른 객체에 사용되지 않습니다. 이것은 단지 객체의 구현을 숨기는 것입니다.

큰 클래스를 인터페이스로 분리하는 것이 좋은 관행이라는 데 동의하십니까?
이 작업에 대한 단점이 있습니까?

예시:

public interface class IVeryLargeClass
{
    void DoSomething();
    ...
};

public ref class VeryLargeClass : public IVeryLargeClass
{
public:
    virtual void DoSomething() { ... }
    ...
};

public ref class AnotherClass
{
public:
    AnotherClass(VeryLargeClass^ vlc)  { vlc->DoSomething(); }
 // OR
    AnotherClass(IVeryLargeClass^ vlc) { vlc->DoSomething(); }
};
도움이 되었습니까?

해결책

OO 개발에서 배우는 첫 번째 원칙 중 하나 :

구현이 아닌 인터페이스로 프로그램.

당신은 "이러한 큰 클래스 중 하나만있을 것입니다. I/F는 다른 객체에 사용되지 않을 것입니다." 이것은 당신의 경우에 사실 일지 모르지만, 그러한 진술이 잘못 될 때마다 니켈이 있었으면 좋겠다.

인터페이스의 여러 구현이 있을지 여부를 고려하는 것 외에도, 콘크리트 객체가 인터페이스에서 선언 된 작업과 논리적 인 친화력을 공유하지 않는 추가 메소드를 수출할지 여부를 고려해야합니다. 이 경우 하나 이상의 추가 인터페이스에서 추가 작업을 간단히 선언 할 수 있습니다. 그러면 클라이언트는 관심있는 작업을 내보내는 인터페이스를 가진 커플 만 필요합니다.

간단히 말해서 인터페이스는 클라이언트와 제공 업체 간의 결합을 관리하는 수단을 제공합니다.

다른 팁

그만큼 의존성 반전 원리 다음과 같이 요약 할 수 있습니다.

콘크리트 클래스를 통과하는 것보다 인터페이스를 통과하는 것이 거의 항상 낫습니다.

즉, 내부 유형에 대한 높은 응집력은 특정 모듈 내에서 괜찮지 만 콘크리트 물체를 언제 어떻게 전달 해야하는지에 대해서는 매우 주관적입니다.

인터페이스를 만들기 위해 생성 및 인터페이스를 피하는 것을 선호합니다. 해당 인터페이스를 둘 이상으로 사용할 수 있다면 승자가 있거나 이것이 공개 기능 및 클래스이고 구체적으로 단순화하려는 경우.

구현을 통과하면 인터페이스를 사용하는 장점 중 하나가 느슨해져 실제 구현과 논리를 분리합니다.

소프트웨어 모듈 A의 인터페이스는 의도적으로 해당 모듈의 구현과 분리되어 있습니다. 후자에는 인터페이스에 설명 된 절차 및 방법의 실제 코드와 다른 "개인"변수, 절차 등이 포함되어 있습니다. A는 인터페이스를 통해서만 그렇게해야합니다. 이 배열의 실질적인 장점 중 하나는 인터페이스의 동일한 사양을 충족하는 다른 하나를 대체하는 다른 하나를 대체하는 것이 B가 실패하지 않아야한다는 것입니다. 원칙).

http://en.wikipedia.org/wiki/interface_(computer_science)

다른 문제는 매우 큰 클래스 자체입니다. 이것은 당신이하고있는 일의 범위에 있지 않을 수 있지만, 매우 큰 수업은 그것이 처음에 너무 많은 일을하고 있음을 의미합니다. 호출하는 기능 내에서 필요한 정보가 자체 소규모 클래스에서 캡슐화되는 작은 분류기로 리팩토링 할 수 있습니까? 해당 클래스에 대한 인터페이스를 만들면 현재 가지고있는 매우 큰 클래스보다 훨씬 재사용 할 수 있습니다.

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