我有以下类层次结构:
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)
它运行良好,但需要将DB连接参数传递给JsonRenderer构造函数,以便通过super()调用DbRenderer的构造函数(),因为此参数是强制性的。
所以看起来像:
const renderer = new JsonRenderer(dbParams);
,其中
class JsonRenderer extends DbRenderer {}
但是,我想让dbParams成为可选项,并将类层次结构更改为以下内容:
Renderer
|
JsonRenderer
我可以通过创建单独的类来实现:
class JsonRenderer2 extends Renderer {}
当然,单独的课程将成为代码重复的来源,这不是一个好主意。
在不更改Renderer和DbRenderer父类的情况下,我的情况是否有一些解决方案?
答案 0 :(得分:1)
我认为你在这里滥用了继承权。如果不了解每个班级的具体内容,很难确定,但我觉得你可以改为使用以下结构:
Renderer (can render some data on screen,
uses DataSource class instance
to get the data to display)
DataSource
/ \
/ \
/ \
DbData JsonData
(fetch data (uses data from JSON)
from the database)
拥有此结构后,您可以执行renderer = new JsonRenderer(DbData(dbParams))
或renderer = new JsonRenderer(JsonData(data))
。