【问题标题】:Creating new c++ interfaces over old one to add new functions在旧接口上创建新的 C++ 接口以添加新功能
【发布时间】:2017-03-15 21:04:38
【问题描述】:

我正在尝试了解是否存在以下最佳做法。 所以在我们的项目中,我们创建了一个接口IForm,如下所示:

class IForm {
 protected:
  IForm() {}

 public:

  virtual ~IForm() {}
  virtual const std::string& GetId() const = 0;
  virtual const std::string& GetTitle() const = 0;
  virtual void SetTitle(const std::string& title) = 0;
  virtual void SetFormError(const std::string& error_text) = 0;
  virtual void ClearFormError() = 0;
};

然后需要更多功能,因此我们创建了新接口IForm2

class IForm2: public IForm {
 protected:
  IForm2() = default;

 public:
  virtual ~IForm2() = default;
  virtual void RemoveWidget(const std::string &id) = 0;
  virtual void Clear() = 0;
};

我的问题是:

有没有办法解决这个问题?除了添加新接口之外,是否有一些设计模式可以用来实现新的需求,而不是添加新的接口?

我知道上述方法效果很好。我只是在寻找实现功能的替代方案。

【问题讨论】:

  • 你可以修改现有的界面。
  • 你为什么要在 C++ 中模拟 C# 设计?我非常怀疑你最终会得到一个高效的设计。
  • @DeiDei 不是 C#。它是编程接口的一种方式。我正在寻找一种更好的方法。
  • 顺便说一句;这个“虚拟〜IForm2()=默认;”与您从基类中获得的内容相比,没有任何用处。
  • @Monku 如果代码全部在您的组织内部,请用四分之三的线索打给您的架构师,并让其他团队适应新界面;-) 保留旧的废话没有意义除非是为了取悦客户(希望为此付出代价),否则会产生技术债务。当它都是内部的时候,代码应该只是修复/更新恕我直言,然后 ppl 只需要处理它..

标签: c++


【解决方案1】:

我实际上从未需要它,但您可能想查看装饰器设计模式。

这是一个关于装饰器的 SO 答案的链接。

Decorator pattern in C++

【讨论】:

  • 如果我理解正确,装饰器模式不会添加功能,它会使现有的动态。
  • "在面向对象编程中,装饰器模式(也称为 Wrapper,与适配器模式共享的替代命名)是一种允许将行为添加到单个对象的设计模式,无论是静态的或动态的,而不影响同一类中其他对象的行为。” -Wikipedia 因此,根据定义,您可以添加其他功能。但是,根据问题下的讨论,这是正确的做法吗?可能不会,因为维护最终会变得过度承受,收益很少。
猜你喜欢
  • 2021-11-10
  • 1970-01-01
  • 2021-01-25
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多