프레임 워크를 코딩하는 데 사용하는 것이 더 나은 디자인 옵션은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1045863

문제

나는 프레임 워크를 코딩하고 있지만 (Java에서, 질문은 일반적으로) 클라이언트가 구현할 수있는 일련의 인터페이스를 제공 할 것입니다. 프레임 워크의 기능은 구현 클래스가 어떻게 구성 될 것인지, 즉 다른 인터페이스 인스턴스를 제공하기위한 구현에 달려 있습니다.

예를 들어, 나는 다음과 같습니다.

Interface IContribution {
   public IMyStuff getMyStuff();
   public IHelper getHelper();
}

Interface IMyStuff {
     public void doSomeMethod(IHelper helper);
}

Imystuff 및 ihelper의 인스턴스를 사용할 수 있는지 어떻게해야합니까?

한 가지 방법은 인터페이스와 내 프레임 워크에서 'getter'메소드를 작성하는 것입니다.

또 다른 옵션은 구현할 인터페이스 방법을 호출하는 공장을 구현하는 추상 클래스를 만드는 것입니다. 그러나 이것은 내가 처음에 인터페이스를 가지고 있다는 사실을 무시합니다. 그런 다음 클라이언트는 추상 클래스를 사용해야합니다. 그러나 그들은 추상 클래스 대신 인터페이스를 사용하여 이것을 우회 할 수 있습니다. 따라서 인터페이스를 제공해서는 안되지만 추상 클래스 만 제공해야합니다 ...

그렇다면 이것에 대한 당신의 아이디어는 무엇입니까, 이것에 대한 실용적인 접근법은 무엇입니까?

도움이 되었습니까?

해결책

Imystuff 및 ihelper의 인스턴스를 사용할 수 있는지 어떻게해야합니까?

고객이 인터페이스와 클래스 자체를 구현할 책임이 있다면, 그러한 인스턴스를 사용할 수 있도록하는 것은 그들의 책임이라고 말할 것입니다. 나는 그것을 내 자신의 코드에 넣는 것에 관심이 없을 것입니다.

다른 팁

좋은 프레임 워크를 구축하려면 동시에 그 주위에 응용 프로그램을 구축해야합니다. 그렇게하면 고객이 고객이 겪기 전에 견딜 수있는 고통을 알고 이해하게됩니다.

다시 말해서, 내 고객은이 응용 프로그램에서 어떻게 작업 할 것인가? 그들은 어떻게 작업해야합니까?

당신은 그들의 관점에서 가장 단순한 방법이 최선이 될 것임을 즉시 알게 될 것입니다.

인터페이스만으로는 보장 할 수 없습니다.

나는 프레임 워크에서 방어 프로그래밍의 철학에 동의하며 개발자들이 실수를 피하도록 도와줍니다.

공장 객체를 제공 할 수 있습니다.

public class MyPoliceman {
    public IContribution makeContributor( IMyStuff stuffer, IHelper helper)
                    throws BadAssociatesException {

     // check validity of stuffer and helper here, throw exceptions if null
    }
}

그런 다음 적어도 우리는 널 등을 확인할 수 있습니다.

어떤 사람들은 일반적으로 개발자에게 도움을 줄 수 있다고 생각합니다. 어떤 경우에는 당신이 할 수있는 최선의 방법은 오류를 가두어서 고통스럽게보고하는 것입니다. 예를 들어, 여기서는 완벽하게 미세한 ihelper가 공장으로 전달 될 수 있지만 나중에 수업에 대한 행동으로 인해 능력이 없을 수 있습니다. (예 : 이미지는 파일이었고, 부작용은 나중에 파일을 닫았습니다.) 그러면 당신이 할 수있는 모든 것은 결과 오류 조건을 가두고 오류를 어딘가에 기록하고 (아마도) 예외를 던지기 만하면됩니다. 그런 다음 적어도 개발자는 무엇을 고쳐야하는지에 대한 단서가 있습니다.

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