【发布时间】: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++