2016-08-19 6 views
2

우선, 제 인터페이스가 크고 빈 구현을 쓰지 않으려 고합니다. mixins이 최선의 해결책이 아닙니다.다중 상속이 필요한 경우 올바른 접근 방법 (TypeScript)

내가 찾고있는 것은 어떤 접근법 (기법)이 다중 상속에 가장 적합한가하는 것입니다. 내 문제는 다이아몬드 상속 (예, 나는 다이아몬드 문제에 대해 읽었습니다.)입니다.

//     ----------------------- 
//     |   Edit  | 
//     ----------------------- 
//    /    \ 
//    /     \ 
//    /     \ 
// -----------------------   ----------------------- 
// |  DataSetEdit  |   |  OEdit  | 
// -----------------------   ----------------------- 
//     \     /
//      \    /
//      \    /
//     ----------------------- 
//     |  ODataSetEdit | 
//     ----------------------- 

논리가 간단합니다.

  • 편집
  • OEdit 스타일링에 대한 몇 가지 추가 방법과 편집을 확장 ... basicaly 검증, 마스크, 입력 확인하기위한 추가적인 방법 몇 가지 <input type="textbox">입니다. 서버 응용 프로그램 (WebSocket)에서 속성을 가져 와서 서버에 이벤트를 보낼 수 있습니다.
  • DataSetEdit는 편집 속성 (텍스트, 색, 자막, 자리 표시 자 ...)을 처리하기위한 메서드와 속성을 추가합니다 - 현재 레코드가 변경되면 변경 내용을 자동으로 처리합니다.
  • ODataSetEdit는 OEdit 기능을 확장하지만 DataSet의 변경 내용을 처리하는 데 필요한 DataSetEdit 메서드도 필요합니다 (DataSet은 클래스이고 해당 데이터는 Object입니다).

한 프로젝트에서는 DataSetEdit을 사용하고 다른 프로젝트에서는 항상 ODataSetEdit을 사용합니다. 그래서 ODataSetEdit가 사용되는 프로젝트에서는 DataSetEdit 기능 만 복사하면됩니다.

DataSetEdit 및 ODataSetEdit에서 코드를 복제하고 싶지 않습니다. 일부 정적 메서드는/속성은

  • ODataSetEdit에서 호출 할 것 DataSetEdit에 대한 몇 가지 정적 메서드 (클래스의 기능을 확장 할 수 어쩌면 생성자)
  • 장식에 접근

    • : 내가 함께이 문제를 해결 할 수 있는지 나는 생각했다 DataSetEdit
    • 에 ODataSetEdit에서 DataSetEdit
    • 프록시 메서드 및 속성과
    • (이 구체적인 예에 ​​모습을 설계 얼마나) composition 어떤 종류의 OEdit 기능을 확장하는

    ODataSetEdit는 OEdit를 확장해야하지만 DataSetEdit에 추가 된 기능을 사용할 수 있어야합니다.

    클래스 구조가 논리라고 생각합니다. 디자인에서 다중 상속이 필요하지 않게하려면 어떻게해야합니까? TypeScript와 관련이없는 일반적인 문제라고 확신합니다. 과 :

  • 답변

    3

    는 어떻게 기능/변수 (의미있는 무언가로이를 수집하는 https://basarat.gitbooks.io/typescript/content/docs/project/namespaces.html 네임 스페이스를 사용하여 주시기 바랍니다)에 OEdit에서 내 디자인에

    이동 논리를 다중 상속에 대한 필요성을 피할 수 있습니다 그런 다음 OEdit와 ODataSetEdit간에이를 공유하십시오.

    은 기본적으로 하나 이상 직접 자녀와 그랜드 어린이가있는 장소 접근에 밖으로 논리를 이동해야합니다. 주위에 두 가지 방법이 없습니다.

    +1

    또한 상속의 여러 계층은 대개 큰 디자인 냄새 및 유지 관리 위험이 있으므로 더 작은 추상화 (기능)로 옮기는 것이 큰 이점입니다. – AlexG

    +0

    동의하고 그것에 관한 책을 사서 읽으십시오. 그러나 책의 예는 저를 제 코드로 교환하는 데 기본적인 것입니다. – Makla

    관련 문제