나는 다음과 같은 클래스 계층이 : 그것은 잘 작동하지만,이 때문에 슈퍼를 통해 DbRenderer의 생성자를()()를 호출하기 위해 JsonRenderer 생성자에 DB 연결 매개 변수를 전달하는 데 필요한자바 스크립트 매개 변수에 따라 클래스 상속
Renderer (can render some data on screen)
|
DbRenderer (fetch data from the database)
|
JsonRenderer (my class. converts specific data into needed format supported by Renderer)
을 매개 변수는 거기에 의무적입니다.
그래서, 그것은 같이 보인다 :
Renderer
|
JsonRenderer
I :
class JsonRenderer extends DbRenderer {}
는하지만, 내가 선택 dbParams을하고 다음에 클래스 계층 구조를 변경하려면
const renderer = new JsonRenderer(dbParams);
, 별도의 수업을 만들어서 할 수 있습니다.
class JsonRenderer2 extends Renderer {}
물론 다른 수업은 코드 중복의 원인이 될 수 있으며 이는 좋은 생각이 아닙니다.
Renderer 및 DbRenderer 상위 클래스를 변경하지 않고도 상황에 맞는 해결책이 있습니까?
'JsonRenderer'는'DbRenderer'가 아닌 경우'DbRenderer'의 자식이 아니어야합니다. 전반적으로'DbRenderer'가 처음에는'Renderer'를 확장한다는 것이 이상하게 보입니다. 실제로 렌더링 할 수 있습니까, 아니면 다른 렌더러가 사용할 수있는 데이터 소스입니까? 어쩌면 다른 모델이 당신의 우주에 더 적합 할 수도 있습니다. –
'DbRenderer'는 일부 데이터를 가져옵니다. 'JsonRenderer'는이 데이터가 변환되어 화면에 표시하기 위해'Renderer'에 어떻게 전달되는지 알고 있습니다. – vich
'DbRenderer'는'Renderer'을 확장해서는 안됩니다. 'JsonRenderer'에 데이터 소스로 전달되어야하는 것처럼 보입니다. 일반적으로 클래스 상속은 * is-a * 관계에만 사용해야합니다. 예 : 개는 * 동물입니다. –