首先mixins不是最好的解决方案,因为我的接口很大,我想避免编写空实现。
我正在寻找的是哪种方法(技术)最适合多重继承。我的问题是钻石继承(是的,我读过钻石问题)。
// -----------------------
// | Edit |
// -----------------------
// / \
// / \
// / \
// ----------------------- -----------------------
// | DataSetEdit | | OEdit |
// ----------------------- -----------------------
// \ /
// \ /
// \ /
// -----------------------
// | ODataSetEdit |
// -----------------------
逻辑很简单。
<input type="textbox">
,还有一些额外的验证方法,掩码,输入检查...... 在一个项目中我使用DataSetEdit而在另一个项目中我总是使用ODataSetEdit。所以在使用ODataSetEdit的项目中,我只需要复制DataSetEdit功能。
我不想在DataSetEdit和ODataSetEdit中复制代码。 我在想是否可以用以下方法解决这个问题:
ODataSetEdit应该扩展OEdit,但能够使用DataSetEdit中添加的功能。
我认为类结构是逻辑的,我怎样才能避免在我的设计中需要多重继承呢?我确信这是与TypeScript无关的常见问题。
答案 0 :(得分:3)
如何在设计中避免需要多重继承
将逻辑从OEdit中移出到函数/变量中(随意使用命名空间:https://basarat.gitbooks.io/typescript/content/docs/project/namespaces.html将这些逻辑收集到有意义的东西中),然后在OEdit和ODataSetEdit之间共享它们。
从根本上说,你需要将逻辑移到一个至少有一个直接孩子和大孩子可以进入的地方。没有两种方法。