JavaScript参数依赖类继承

时间:2017-10-30 18:17:48

标签: javascript oop design-patterns

我有以下类层次结构:

  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父类的情况下,我的情况是否有一些解决方案?

1 个答案:

答案 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))