2009-06-25 2 views
2

저는 프레임 워크를 코딩하고 있습니다 (Java에서는하지만 질문은 일반적인 것입니다). 구현할 클라이언트 용 인터페이스 세트를 제공 할 것입니다. 프레임 워크의 함수는 구현 클래스가 생성되는 방법에 의존 할 것입니다. 즉, 다른 구현의 인터페이스를 제공하기 위해 해당 구현에 의존합니다.프레임 워크 코딩에 어떤 디자인 옵션을 사용하는 것이 더 낫습니까?

예를 들어 내가이있을 수 있습니다

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

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

가 어떻게 IMyStuff 및 IHelper의 해당 인스턴스를 사용할 수 있는지 확인 할 수 있습니까?

한 가지 방법은 인터페이스에서 'getter'메소드를 만들고 내 프레임 워크에서 반환 된 null 객체를 확인하는 것입니다.

또 다른 옵션은 구현할 인터페이스 메소드를 (전략 패턴을 사용하여) 호출하는 팩토리를 구현하는 추상 클래스를 작성하는 것입니다. 그러나 이것은 내가 처음에는 인터페이스를 가지고 있다는 사실에 반하는 것입니다. 그런 다음 클라이언트는 추상 클래스를 사용해야합니다. 그러나 그들은 추상 클래스 대신 인터페이스를 사용함으로써이를 피할 수 있습니다. 따라서 인터페이스를 제공하지 말고 추상 클래스 만 제공하면됩니다.

그렇다면이 아이디어는 무엇입니까? 실용적인 접근 방식은 무엇입니까?

+0

위험 윌 로빈슨, 위험 : 건축가 우주 비행사가 앞섰습니다. – NotMe

답변

2

IMyStuff 및 IHelper의 인스턴스를 사용할 수 있는지 어떻게 확인할 수 있습니까?

클라이언트가 인터페이스와 클래스를 직접 구현해야 할 책임이있는 경우 해당 인스턴스를 사용할 수 있는지 확인해야 할 책임이 있습니다. 직접 작성해야합니다.

+0

프로그래머가 사용할 도구를 제공하는 모든 프레임 워크가 있어야하지만 궁극적으로 프로그래머는 도구를 사용하고 도구를 적절하게 구현해야합니다. 훌륭한 문서는 실제로 필요한 모든 것입니다. – AlbertoPL

+0

바로. 당신의 질문에서 당신이 당신의 사용자들과 어떤 종류의 싸움을하고있는 것처럼 들립니다. - "내가 이것을하면 우회하여 그것을 할 수 있습니다 ..."- 사용자가 당신의 틀을 오용하기로 결정했다면, 그들은 성공할 것입니다. 하지만 악의적 인 사용자를위한 프레임 워크를 작성하지 않고, (잘하면) 일하기를 원하는 사용자를 위해 작성했습니다. 인터페이스 메소드가 유효한 객체를 반환해야한다는 사실을 문서화하는 것만으로 충분할 것이며, 심지어 약간 중복 될 수도 있습니다. 당신은 실수에 더 잘 적응하기 위해 널을 검사 할 수 있습니다. 그러나 그것은 정말로 그것의 전부입니다. – Avish

+0

그래, 맞아, 보장 할 수 없어. 스마트 체크인은 여기저기서 가장 심각한 오류를 잡아야하지만, 나머지는 좋은 문서가있는 것으로 귀결됩니다. – nojevive

1

좋은 프레임 워크를 구축하려면 응용 프로그램을 동시에 빌드해야합니다. 그런 식으로 당신은 환자가 그들에게 좌절하기 전에 견딜 고통을 알고 이해할 것입니다.

즉, 다음으로 시작하십시오. 내 클라이언트는이 응용 프로그램과 어떻게 작동합니까? 그들이 어떻게 작업해야합니까?

당신은 그들의 관점에서 볼 때 가장 간단한 방법이 최선이라는 것을 즉시 깨닫게 될 것입니다.

+0

감사합니다. 훌륭한 '우수 사례'조언. – nojevive

0

인터페이스만으로는 작동하지 않을 수 있습니다. 아무런 문제가 없습니다.

프레임 워크에서 방어 프로그래밍의 철학에 동의하며, 개발자가 실수를하지 않도록 도와줍니다.

당신은 팩토리 객체를 제공 할 수 있습니다 :

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

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

그럼 적어도 우리가 등을 널 (null) 일부

를 확인할 수는 개발자가 도움을 제공하는 것이 가능하다 생각했다. 경우에 따라 오류를 잡아보고이를보고하는 것이 최선책입니다. 예를 들어 여기에서는 완벽하게 훌륭한 IHelper를 공장에 전달할 수 있지만 나중에 클래스에 대한 작업을 수행 할 수 없게 될 수 있습니다. (예 : 파일 이미지 였고 나중에 부작용으로 파일을 닫았습니다.) 그런 다음 결과 오류 조건을 잡아서 어딘가에서 오류를 기록하고 예외를 throw 할 수 있습니다. 그렇다면 적어도 개발자는 무엇을 고칠 지에 대한 단서를 가지고 있습니다.