这个问题的要点是关于扩展类,最大程度地减少将所有内容打包到一个类中,并最大程度地提高代码重用性。阅读此问题后,请随时编辑标题或描述以使其更加简洁。尽管该帖子看起来很长,但我只是通过使用许多示例来使内容更加详尽。
假设我有一个类:
class UsedByManyPeople
{
// ...has many fields
};
顾名思义,此类被许多开发人员使用。我必须向此类添加2个功能:
两者都是我部门的特定需求。
首次尝试解决方案
起初我考虑过简单地向UsedByManyPeople添加2个新方法,因此该类现在看起来像:
class UsedByManyPeople
{
// ...has many fields
public:
SomeOtherType const convert() const;
std::string const getFileName() const;
};
但是,这2个功能实际上是我部门的用例所特有的,其他部门甚至都没有SomeOtherType的类定义,也不关心getFileName()。
显然,上述方法不是一个好方法(?)。
您将如何扩展这个类?
我想到的替代方法是:
子类UsedByManyPeople并创建我自己的类。
例如,
class ExtUsedByManyPeople : public UsedByManyPeople
{
public:
SomeOtherType const convert() const;
std::string const getFileName() const;
};
创建Helper类,每个方法一个(喜欢!),然后将其实现为静态方法。
例如,
class UsedByManyPeopleToSomeOtherTypeConverter
{
public:
static SomeOtherType const convert(UsedByManyPeople const&);
};
class UsedByManyPeopleFileName
{
public:
static std::string const getFileName(UsedByManyPeople const&);
};
创建一个包含所有方法的单个Helper类。
例如,
class UsedByManyPeopleHelper
{
public:
static SomeOtherType const convert(UsedByManyPeople const&);
static std::string const getFileName(UsedByManyPeople const&);
};
最佳答案
尤其是如果这些方法是您所在部门使用该类的特定方法,则应按以下方式实现它们:创建一个包含所有方法的单个Helper类。
有几个原因:
位于另一个逻辑项目中
结构
UsedByManyPeople
不应该负责自我转换
变成另一种类型。这违反了
固体
关于c++ - 类设计建议: extending a class and code reuse,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2320847/