문제

프로젝트에서는 일에 우리는 특정 값을 입력 클래스에서 우리의 도메인에 포함하는 모델을 매우 많은 수의 특성을...

public class BigValueType {
    private Foo foo;
    private Bar bar;
    private Baz baz;

    //...
}

우리는 깨달리고 싶은"focus"이것으로의 수,다른 좀 더 전문 클래스는 단지 몇 가지 하위 집합의 이 클래스의 특성이 있습니다.내 생각에는 우리가 갖고 싶은 뭔가 다른"보기"이 데이터를 사용합니다.

public class SpecializationA {
    private Foo foo;
    private Baz baz;
    //...
}

public class SpecializationB {
    private Bar bar;
    private Baz baz;
    //...
}

private class SpecializationC {
    private Foo foo;
    private Bar bar;
    //...
}

그러나,이 도메인 모델은 오히려 일반적으로,그리고 특정을 이 프로젝트입니다.그것은 프로젝트를 특정한 확장자가 추가하는 동안 향후 프로젝트하지만,일반적인 도메인 모델은 분리 상태를 유지할 수 있에서 이러한 확장자.면 우리는 단순히 정의하는 무리의 종류는 지금,그것은 다른 프로젝트를 사용하여 도메인 모델을 작성해야 자신의 약간 다른 사람니다.(우리는 것이 쉽지 않습을 예측할 전망이 데이터의 유용하게 사용됩니다.)

내 생각에는 우리가 해야 할 일은 쓰는 프로젝트 별 어댑터에 대한 큰 이 클래스는 현재 다양한 전망의 데이터입니다.이 방법은 미래 사용자의 도메인이 없을 터치하는 아무것도에서는"일반적인"도메인 모형을 정의하는 새로운 전망을습니다.

public class AdapterA {
    private BigValueType wrapped;
    //...

    public ViewA(BigValueType wrapped) {
        //...
    }

    public Foo getFoo() {
        return wrapped.getFoo();
    }

    //...
}

이것은 더 감각을 나보다 정상적인 상속기 때문에 우리의 최고 수준의 클래스/인터페이스는 것이 거의 아무것도 있습니다.

어떤 의견에 이 방법?

도움이 되었습니까?

해결책

첫째,이해하는 것이 중요한 문제를 원하는 것이 해결합니다.데 등 많은 수의 특성은 반드시 나쁘지 않고 일을 하려는 경우이터베이스 만을 준수하는'좋은'디자인의 원리,나는 것 재고 결정이다.

는 말했다,이것은 매우 일반적인 디자인의 세계에서 SOA.당신은 큰 서비스는 복잡하는 메시지와 상당히 많은 수의 특성으로 요청을 합니다.이 서비스는 다음'적용'할 수용을 클라이언트와 서로 다른 요구 사항이 있습니다.그래서,당신의 디자인 작업해야 합니다.의 과정,그것을 전제로 하는 당신은 이미 알고있는 모든 가능한'views'또는 당신이 쓰는 새로운 어댑터에 대한 새로운 클라이언트입니다.

이것은'적응'서 수행할 수 있습니다 두 가지 수준의 사용자 인터페이스 레벨(본질적으로 귀하의 디자인에 적응하는 클래스)또는 낮은 수준에서,같은 데이터베이스 레벨에서,그리고 이것은,차례차례로 수정하는 기본 클래스는 너무입니다.이에 따라 귀하의 응용 프로그램,사용자의 프레임워크 및니다.

대체 접근법을 고려할 수 있도 나머지 방법으로 이렇게 노출이 데이터(Foo,Baz,etc.),이기는 하지만에서 클래스고,클라이언트가 자신의 데이터를 처리하는 주요 클래스는 기본적으로 제공하는 CRUD 기능을 이 데이터를 사용합니다.다음 동작하는 클래스와 같은 더 구조와 실제 비즈니스 논리입니다.

이러한 세 가지 방법이 좋아야 한,이럴입니다.

다른 팁

글쎄 .. 나에게 괜찮아 보인다. 컴포지션을 사용하는 솔루션이 상속을 사용하는 것보다 훨씬 낫다고 생각합니다. 모델은 큰 시간에 영향을 미치고 많은 응집력있는 클래스를 생성합니다.

여러 프로젝트에서 코드를 공유하는 목표는 소리보다 어렵다는 것을 알았습니다. 최소한, 그것을 얻기가 어렵습니다 오른쪽! 이것은 새로운 프로젝트에서 어떤 기능이 필요한지 정확히 알지 못하는 이유와 정확히 일치합니다. 문제는 어댑터 문제가 당신을 위해 이것을 해결하지 않을 것이라는 것입니다 (기본 객체가 필요한 기능 세트를 지원하지 않는 경우).

나는 당신을 제안합니다 사용 interfaces 별도의 프로젝트의 경우, 구현을 별도로 코딩하는 경우. 자신이 글을 쓰는 경우 바로 그거죠 동일한 코드는 3 번이를 공통 라이브러리로 꺼냅니다. 도서관을 가능한 한 가벼운 상태로 유지하십시오.

여러 가지 종속성을 관리하는 것은 나중에 기능을 추가해야 할 때 비용이 많이들 수 있습니다. 서로 싸우는 그리고 당신은 많은 앱에 영향을 미치는 합병증이 있습니다.

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