【问题标题】:How to handle a wide variety of object types for the same data如何处理相同数据的多种对象类型
【发布时间】:2021-09-13 17:25:11
【问题描述】:

我正在构建一个应用程序,该应用程序使用了很多向量,并且为此我使用了很多第三方和系统程序集。结果是我有四种方法来表示 3d 双精度向量,以及五种方法来表示这些向量的集合。这对我所拥有的一切都是如此。结果是我需要为大约三种不同的实际结构处理 30 种不同的类型。根据您的经验,最干净的处理方法是什么?

【问题讨论】:

  • 当您使用不同的系统时,交换是单向的(即保存到您的系统中)还是双向的(您将它们保存到您的系统中,并且还必须将它们传回到其他系统)?

标签: oop architecture software-design readability code-complexity


【解决方案1】:

如果其他系统正在向您的应用程序提供矢量数据,并且传输只是单向传输(到您的应用程序),那么您所要做的就是决定您希望如何在您的应用程序中存储/处理矢量,并且当数据进来时,只需将其转换为该格式。转换是一次性的,一旦转换,您只需担心一种格式。

(相同的架构可以处理双向交互 - 让我最后介绍一下)。

这就是依赖倒置派上用场的地方,因为您可以编写不同的模块,每个模块都专用于特定的第 3 方系统,并在运行时加载适当的模块。

图表/架构说明:

  1. 外部向量服务 - 处理来自第 3 方系统的传入数据的子系统或层。
  2. 服务逻辑 - 处理/协调外部向量服务所做工作的代码。
  3. IExternalVectorProvider 描述您需要支持的操作的接口,例如“SaveFunkyVectors”、“SaveDoubleProjectionVector”。
  4. SystemA_VectorProviderSystemB_VectorProviderSystemC_VectorProvider - 实现 IExternalVectorProvider 的第三方特定类。
  5. 依赖注入子系统 - 在运行时,将正确的 IExternalVectorProvider 实现加载到服务逻辑中。

例如:

  • 您的应用识别出它正在与第 3 方系统 A 通信,并将正确的模块 (SystemA_VectorProvider) 加载到服务逻辑中。
  • 这允许您的应用使用系统 A 可以理解的矢量格式与第 3 方系统 A 进行交互。
  • SystemA_VectorProvider 获得数据后,会将其转换为您的标准格式,并将其传递回服务逻辑,然后传递到应用程序的任何其他部分。

我将依赖注入放在应用程序的主要部分,因为理想情况下它是通用的,您可以在其他地方重用它。

双向呢?

可以使用完全相同的架构 - 只要您的 IExternalVectorProvider 设置可以将数据从您的标准重新格式化回目标第 3 方。

【讨论】:

    猜你喜欢
    • 2022-01-07
    • 2015-05-29
    • 1970-01-01
    • 2012-10-11
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多