代码之家  ›  专栏  ›  技术社区  ›  MOnsDaR

属性列表还是继承丛林?

  •  2
  • MOnsDaR  · 技术社区  · 15 年前


    AppA正在向AppB发送对象。
    一个物体可以是一个模型(想象一个游戏,模型是车辆、房屋、人等)。
    可能有不同的应用程序。每一个都支撑着另一个物体的底部。

    目前的情况如下:

    BasicModel 它有位置和方向。

    如果另一个用户需要额外的属性,他将继承 ExpandedModel
    现在,每个需要额外属性的用户都继承自一个更通用的模型。过了一会儿 VehicleModel 它可以启动挡风玻璃雨刷 AircraftModel 可能有着陆灯或者 PersonModel

    如果AppB应该支持一个新模型,那么它总是需要定制的。

    这种方法有一个很大的缺点:经过几次继承后变得非常复杂。可能会有像 ExpandedAircraftModel 也可以用挡风玻璃雨刷。

    另一种方法:

    我只创造了一个 Model
    用户现在可以输入他想要的信息了。如果他想用挡风玻璃雨刮器,他只需要加一个 "windshieldwiper - ON" -一对。

    如果AppB支持挡风玻璃雨刮器,那么它只会查看列表中是否有这样的属性,并读取相关值。

    windshieldwiper 另一个叫它 windshield-wiper )
    这也可能变得非常复杂,用户唯一能联系到的是文档或特定的标准规范,必须保存在中心空间。

    最后,问题是:

    哪种方法更好?
    你看到其他的缺点了吗?
    有没有第三种方法可以代替这两种方法?

    1 回复  |  直到 15 年前
        1
  •  1
  •   San Jacinto    15 年前

    作为比较,Google的Protocol Buffers使用了两者的组合,但很难使用第二个示例。

    如果有明显不同的数据需要通过通道发送,可以使用该工具生成“message”类的派生值,但每个消息都可以包含其他消息,并且可以在它们自己中嵌套消息定义。当消息发送出去时,接收者检查字段以确定它是什么类型的消息以及包含在其中的字段。

    缺点是您的代码很快变得过于冗长,因为您不能真正使用继承来自动处理传入消息的过程,但好处是您的协议消息保持高度的组织性,并且易于调试,因为您使用的是一个自反的属性列表。

    推荐文章