【问题标题】:How to integrate different data struct into one ? Any design pattern or exprience?如何将不同的数据结构整合为一个?有什么设计模式或经验吗?
【发布时间】:2015-05-19 19:30:38
【问题描述】:

如您所知,不同的供应商可能有不同的数据字段名称。虽然名称不同,但数据结构几乎相同。 例如,

struct s1 {
    int s1Price,
    int s1Volume
};


struct s2 {
    int s2Price,
    int s2Volume
};

就像股市数据一样,数据会自动发送给程序,程序只是接收数据然后处理它。

我想设计一个可以轻松更改为其他供应商数据结构的程序。

如果我用s1开发程序,过一段时间,我想用最小的变化换成s2

希望你能明白我的意思。

你能给我什么建议吗?任何设计模式或您的经验?

【问题讨论】:

  • 这里的关键词是结构相似,相似意味着它们不一样。即使它们看起来相同,也不意味着它们的处理方式相同,甚至您可以看到完整的结构。不要尝试将不同的结构“整合”成一个,除非它是您自己的 您自己的代码中的结构。
  • 您可以将其包装到您自己的结构中,因此您只需在更改时更改包装类。
  • 您在其上编写一个抽象并在您的程序中使用该抽象。
  • 通过您自己的界面代理它们。仅在代码中使用您自己的接口。
  • 现在您已经连续三个 cmets 使用不同的术语来描述同一事物。至少其中一个应该听起来很熟悉。

标签: c++ design-patterns data-structures struct architecture


【解决方案1】:

这里的关键字是抽象

这是一种方法:

#include <iostream>

struct s1 {
  int s1Price;
  int s1Volume;
};


struct s2 {
  int s2Price;
  int s2Volume;
};

class   Idata
{
public:
  virtual ~Idata() {}

public:
  virtual int   getPrice() = 0;
  virtual int   getVolume() = 0;
};

class s1Data : public Idata, public s1 {
public:
  s1Data(const s1& S1) : s1(S1) {}

  virtual int   getPrice() {
    return s1Price;
  }

  virtual int   getVolume() {
    return s1Volume;
  }
};

class s2Data : public Idata, public s2 {
public:
  s2Data(const s2& S2) : s2(S2) {}

  virtual int   getPrice() {
    return s2Price;
  }

  virtual int   getVolume() {
    return s2Volume;
  }
};


void    my_func_that_will_never_change_because_it_uses_abstraction(Idata *data)
{
  std::cout << data->getPrice() << std::endl;
  std::cout << data->getVolume() << std::endl;
}

int     main(void)
{
  s1    Sfirst{42, 21};
  s2    Ssecond{99, 88};

  s1Data        DataFirst(Sfirst);
  s2Data        DataSecond(Ssecond);

  my_func_that_will_never_change_because_it_uses_abstraction(&DataFirst);
  my_func_that_will_never_change_because_it_uses_abstraction(&DataSecond);
}

以与my_func_that_will_never_change_because_it_uses_abstraction 相同的方式对所有程序进行编码(通过使用接口IData 而不是具体的底层类型),除了确定您将拥有哪种类型的数据的初始化阶段之外,您无需更改任何内容首先。

【讨论】:

  • 这对我有帮助。我之前想的只是写一个转换器来转换为我自己的数据结构。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
  • 2021-04-02
相关资源
最近更新 更多