首先,混合不是最好的解决方案,因为我的接口很大,我想避免编写空的实现。
我正在寻找的是哪种方法(技术)最适合多重继承。我的问题是钻石继承(是的,我读过钻石问题)。
// -----------------------
// | 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> 本上,您需要将逻辑移到至少一个直接子节点和孙子节点可以访问的地方。没有两种方法可以绕过🌹. 标题>