우선, 제 인터페이스가 크고 빈 구현을 쓰지 않으려 고합니다. 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에서 코드를 복제하고 싶지 않습니다. 일부 정적 메서드는/속성은
- : 내가 함께이 문제를 해결 할 수 있는지 나는 생각했다 DataSetEdit
- 에 ODataSetEdit에서 DataSetEdit
- 프록시 메서드 및 속성과 (이 구체적인 예에 모습을 설계 얼마나) composition 어떤 종류의 OEdit 기능을 확장하는
ODataSetEdit는 OEdit를 확장해야하지만 DataSetEdit에 추가 된 기능을 사용할 수 있어야합니다.
클래스 구조가 논리라고 생각합니다. 디자인에서 다중 상속이 필요하지 않게하려면 어떻게해야합니까? TypeScript와 관련이없는 일반적인 문제라고 확신합니다. 과 :
또한 상속의 여러 계층은 대개 큰 디자인 냄새 및 유지 관리 위험이 있으므로 더 작은 추상화 (기능)로 옮기는 것이 큰 이점입니다. – AlexG
동의하고 그것에 관한 책을 사서 읽으십시오. 그러나 책의 예는 저를 제 코드로 교환하는 데 기본적인 것입니다. – Makla