Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 重构大型类_Oop - Fatal编程技术网

Oop 重构大型类

Oop 重构大型类,oop,Oop,我正在导入产品,因此我有一个产品导入类。它大约有4000行,所以我想把它拆分。我已经开始打破它,但我很难决定什么应该是一个类和什么不应该。我认为我所有的方法都使用了三个相同的实例变量,所以如果我分离这些方法,我将把这些实例变量传递给它的构造函数中的每个单独的类。我开始对此进行分解的一种方法是查看处理相同类型产品数据的方法组。例如,有些方法用于产品描述,有些方法用于产品类别,因此我开始将它们拆分为单独的类,但后来有人告诉我,如果这些不同的类都使用相同的三个实例变量,那么它们可能应该合并为一个类。那

我正在导入产品,因此我有一个产品导入类。它大约有4000行,所以我想把它拆分。我已经开始打破它,但我很难决定什么应该是一个类和什么不应该。我认为我所有的方法都使用了三个相同的实例变量,所以如果我分离这些方法,我将把这些实例变量传递给它的构造函数中的每个单独的类。我开始对此进行分解的一种方法是查看处理相同类型产品数据的方法组。例如,有些方法用于产品描述,有些方法用于产品类别,因此我开始将它们拆分为单独的类,但后来有人告诉我,如果这些不同的类都使用相同的三个实例变量,那么它们可能应该合并为一个类。那么,我该怎么做呢?我并不真正理解正确的类设计,只是将它们分开,因为在大类中很难找到代码

如果这里的问题没有了,有什么建议可以重新考虑一个大类。这就是我在上面提出的一个好的解决方案,我应该重新分解一个类,其中所有方法都使用相同的三个实例变量

此应用程序是一个asp.net应用程序,它从一个系统A的数据库中获取产品数据,并根据用户可以选择的大量设置和配置,将产品数据保存到系统B的数据库中。例如

public class ProductImporter
{
    ProductA productA;
    ProductB productB;
    ImportSettings settings;

    public void GetProductADescription()
    {
        //look at the settings and add productB description to productA
        productA.Desc = productB.Desc;
        //....
     }

     //.... tons of methods that all deal with product moving one product to the other

     public void AddProduct()
     {
           //go through all the settings
           productA.Save();
      }

}

你可以

  • 进行新的OPP设计,并将代码从旧类重写到新类
  • 对象拆分时进行OPP设计
和if

  • 您有一个只从堆栈中获取参数的函数,并且不使用类成员;您可以简单地将这个函数从旧类复制、粘贴到新类,然后在新环境中重构它

重构类的目标很好。小班通常比大班好。然而,一个糟糕的重构可能会让你陷入比开始时更糟糕的境地


我建议您花一些时间阅读关于优秀Java设计模式的内容。您可以从Head-First设计模式()以及其他模式中学到很多…

也许您应该将这三个实例变量封装到另一个类中。只处理这些变量的代码可以放入新类中;同时使用其他变量的代码可以保留在现有类中。然后将现有的三个实例变量替换为一个新类型的变量

这是假设将这三个变量封装在一起确实有意义。你的描述表明情况就是这样(因为它们经常一起使用),但是如果没有更多的信息,很难判断。不知道这个类要做什么,三个实例变量代表什么,或者现有类中的其他状态,我们只是猜测


需要考虑的一件事是:这三个变量除了在你现有的类中之外,还会在逻辑上组合在一起吗?

我不明白问题的关键;您可以进行一些opp设计并重写代码,或者使用拆分代码进行opp设计。也许这三个实例变量应该是它们自己的类(类似于current_state),由其他类传递和操纵?当你不描述它们的用途时,很难说,但这种可能性听起来并不太牵强。我已经添加了更多关于应用程序的信息,因为他没有指定语言,“Java设计模式”可能不适用。虽然模式在某种程度上独立于语言,但一种语言中常见的模式可能很少,甚至完全不适用于另一种语言。