方法的 oop 继承 vs 使对象仅调用 class 中调用它的方法

oop inheritance of method vs making object only to call method in class which invoke it

我对判断有疑问 方法从设计、干净的代码 == 好的实践来看更好。

我在程序启动时从文件加载一些数据,classes 的结构如下所示:

更具体地说,IngredientFromXmlReaderPizzaReaderDrinksFromXmlReader 在内部完成所有工作,没有来自 DataFromFileLoader 的任何数据。

问号是 DataFromFileLoader class 它应该继承自 PizzaReaderIngredientFromXmlReaderDrinksFromXml 并具有方法 loadMenuFromFiles像这样:

 private void loadMenuFromFiles()
{
    this->loadIngredientsFromXml();
    this->loadPizzasFromXml();
    this->loadDrinksFromXml();    
}

这种方法:

或者按照我的方法去做,他们都必须实现 public 方法 loadXml(),这是 AbstractReaderFromXml 的虚方法。然后我创建调用方法的对象。

private void loadMenuFromFiles()
    {
        IngredientFromXmlReader ingreRead;
        ingreRead.loadXml();
        PizzaReader pizzaRead;
        pizzaRead.loadXml();
        DrinksFromXmlReader drinksRead;
        drinksRead.loadXml();   
    }

我为什么选择这个:

第三个选项是将这 3 个 classes 的所有内部方法设为静态,但我不太喜欢它。在我看来,应用程序要重得多,我尽量避免它。当然这是选项。

哪种方法更好?

最后一件事,如果这个问题适合 Whosebug 或者也许应该放在

https://softwareengineering.stackexchange.com/

我觉得这个问题中的问题描述不清楚。但在这种情况下,我强烈建议不要使用钻石继承。

继承演示了 IS-A 连接。 PizzaReader 在我看来实际上并不像 FileOpenerPizzaReader 使用 FileOpener 打开文件,对吧?这意味着这是 replacing inheritance with composition.

的一个很好的例子