需要多重继承时的正确方法(TypeScript)



首先,混合不是最好的解决方案,因为我的接口很大,我想避免编写空的实现。

我正在寻找的是哪种方法(技术)最适合多重继承。我的问题是钻石继承(是的,我读过钻石问题)。

//                   -----------------------
//                   |         Edit        |
//                   -----------------------
//                  /                  
//                 /                    
//                /                      
//    -----------------------         -----------------------
//    |     DataSetEdit     |         |        OEdit        |
//    -----------------------         -----------------------
//                                        /
//                                       /
//                                      /
//                    -----------------------
//                    |     ODataSetEdit    |
//                    -----------------------

逻辑很简单。

  • Edit基本上是一些<input type="textbox">与一些额外的方法验证,掩码,输入检查…
  • OEdit用一些附加的样式方法扩展了edit。可以从服务器应用程序(WebSocket)获取属性,发送事件到服务器
  • DataSetEdit增加了处理编辑属性(文本,颜色,标题,占位符…)的方法和属性-当当前记录发生变化时自动处理更改。(DataSet是class, data是Object[].)
  • ODataSetEdit扩展了OEdit功能,但还需要DataSetEdit方法来处理数据集上的更改。

在一个项目中,我使用DataSetEdit,在另一个项目中,我总是使用ODataSetEdit。所以在项目中使用ODataSetEdit,我只需要复制DataSetEdit的功能。

我不想在DataSetEdit和ODataSetEdit中复制代码。我在想如果我能解决这个问题:

  • 一些静态方法/属性方法
  • 装饰器(可能在构造函数上扩展类功能)
  • 在DataSetEdit上的一些静态方法,这些方法将从ODataSetEdit中调用,以扩展与DataSetEdit的OEdit功能
  • 从ODataSetEdit到DataSetEdit的代理方法和属性
  • 某种组合(在这个具体的例子中设计看起来如何)

ODataSetEdit应该扩展OEdit,但能够使用在DataSetEdit中添加的功能。

我认为类结构是逻辑的,我如何避免在我的设计中需要多重继承?我相信这是一个与TypeScript无关的常见问题

如何在设计中避免多重继承

将逻辑从OEdit移到函数/变量中(可以随意使用名称空间:https://basarat.gitbooks.io/typescript/content/docs/project/namespaces.html将它们收集到有意义的东西中),然后在OEdit和ODataSetEdit之间共享它们。

<标题>更多h1> 本上,您需要将逻辑移到至少一个直接子节点和孙子节点可以访问的地方。没有两种方法可以绕过🌹.

最新更新