我具有以下类层次结构:
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)
它运行良好,但需要将数据库连接参数传递到JsonRenderer构造函数中,以便通过super()调用DbRenderer的Constructor(),因为该参数在那里是必需的。
因此,它看起来像:
const renderer = new JsonRenderer(dbParams);
,在哪里
class JsonRenderer extends DbRenderer {}
但是,我想使dbParams成为可选的并将类层次结构更改为以下内容:
Renderer
|
JsonRenderer
我可以通过创建单独的类来做到这一点:
class JsonRenderer2 extends Renderer {}
当然,单独的类将是代码重复的来源,这不是一个好主意。
在不更改Renderer和DbRenderer父类的情况下,是否有适合我的情况的解决方案?
最佳答案
我认为您在这里滥用了继承权。在不了解每个类的作用的情况下很难确定,但是我觉得可以改用以下结构:
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))
。