gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:30:38 25 4
gpt4 key购买 nike

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

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

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

逻辑很简单。

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

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

我不想在 DataSetEdit 和 ODataSetEdit 中重复代码。我在想我是否可以通过以下方式解决这个问题:

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

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

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

最佳答案

how can I avoid need for multiple inheritance in my design

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

更多

从根本上说,您需要将逻辑移出到至少一个直系子级和孙级可以访问的位置。没有两种解决方法 🌹。

关于oop - 需要多重继承时的正确方法(TypeScript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39034411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com