Java 单个类是否比6类更简单、更好?

Java 单个类是否比6类更简单、更好?,java,model-view-controller,object,Java,Model View Controller,Object,我有一个过程,我正在自动变成一种GUI一步一步向导。从根本上讲,这是一组漫长的计算,最终为您提供设计规范 它被分成6个块,每个连续块依赖于前一块的结果和输入。我最初考虑做6个单独的“计算”类,直到我开始考虑按原样“向下”传递值 我只是做了一个类似的任务,我在一个已经实现的非常类似的程序上安装了一个GUI,前一个家伙是用单独的类来完成的,跟踪所有的类并确保它们被交给正确的类是相当痛苦的 我在考虑把他们都合并成一个大班。它将有6个方法,我可以从GUI的每个部分收集并提供输入,它将在幕后进行计算,然后

我有一个过程,我正在自动变成一种GUI一步一步向导。从根本上讲,这是一组漫长的计算,最终为您提供设计规范

它被分成6个块,每个连续块依赖于前一块的结果和输入。我最初考虑做6个单独的“计算”类,直到我开始考虑按原样“向下”传递值

我只是做了一个类似的任务,我在一个已经实现的非常类似的程序上安装了一个GUI,前一个家伙是用单独的类来完成的,跟踪所有的类并确保它们被交给正确的类是相当痛苦的

我在考虑把他们都合并成一个大班。它将有6个方法,我可以从GUI的每个部分收集并提供输入,它将在幕后进行计算,然后在调用所有6个方法之后,我可以创建一个输出方法,收集所有重要值并将其输出

我倾向于一个类,因为它更简单,更像“黑匣子”,而且我不必有脏的构造函数,我会将以前生成的对象交给最后一个类,最后一个类会将之前的5个对象都交给它,这样它就可以使用这些值

现在,我认为这一类可以成为MVC设计的“模型”,并且是一个很好的分离类,控制器和视图只能通过7个可见的、非常直接的方法访问

我还认为它会减少内存占用,因为有6个独立的类,它们需要与1个大类存在相同的时间,除了
Object
的所有内部都复制了6次


我对使用one类很有信心,但我想问一下,这是否是一个可怕的错误,它是否违背了面向对象的所有原则,是否缺少了明显更好的解决方案。

只要代码被分解成不同的方法,并且您可以降低圈复杂度,我看不到任何缺点,如果只使用一个类,就有很大的潜在优势,特别是在内存占用方面。

我怀疑你的问题是否有一个简单的答案。是将代码拆分为6个类还是合并为1个类取决于几个标准,包括这6个计算的不同程度(功能上)、输入输出值的相关性等


如果这6个部分是计算一个共同目标的6个单独步骤——它们只有在一起才真正有意义(也就是说,它们中的一个不能从其他地方合理地调用)——我会选择1类方法。特别是如果6组不同的计算使用类似的/相关的算法和中间值/函数等。这本质上就是MVC世界中的模型。

另一种选择是创建6个类,每个类实现一个公共接口,调用接口
Stage
。一个
Stage
会有很好的钩子从其他
Stage
s馈送。这种模块化的方法可以使代码对下一个人来说更具可读性和可更改性。

我认为将代码分成6个不同的文件和类是没有意义的,我同意

我的建议是去上内部课程。据我所知,这是Swing编程中非常常见的做法。优点:

  • 可以合并到一个源文件中
  • 它们可以很好地记录下来
  • 可以访问周围类中的所有成员变量
不要错过OOP的优点:

  • 可以扩展其他类(例如用于长时间运行的计算的
    Thread
  • 可以实现接口(例如可以注册为
    ActionListener
    (Swing)或
    SelectionListener
    (SWT)

由于内部类可以是私有的,黑盒模型将完全完成。

将所有步骤放入一个状态类: 1) 如果添加确保始终处于一致状态的代码,会不会变得更简单?确保以正确的顺序调用这些方法

2) 用户可以后退吗?你是否绝对确定,能够倒退永远不会是一项要求?这是否意味着您需要另外6种方法来“反转”步骤和检查对象的状态?(从表面上看,在另一个系统中,如果操作正确,您可以“getPrevious”。)

3) 谁管理此对象的生命周期?谁知道你什么时候处理完它,它的参考文献保存在哪里?在另一个系统中,似乎每个屏幕都知道自己的输入和输出。对于一个对象,每个屏幕都知道整个过程的状态。另外,第一个和最后一个步骤可能会有关于流程的“特殊知识”,因为它们可能必须包含启动和结束生命周期的代码

我倾向于一个类,因为它更简单,更像“黑匣子”

我不同意。黑盒子背后的想法是,外部世界不需要知道实现细节——当组件仅由其输入和输出定义时,编程变得更容易,代码更可读,错误更孤立。以下是界面驱动设计的乐趣

拥有“一个大类”,不管输入和输出如何定义良好,实际上与黑盒编程和Java本身是对立的。当逻辑子组件应该自行管理时,整个模型必须进行微观管理。(请参见@csturtz对SRP的评论!)

我还认为它会减少内存占用,就像6个单独的类一样

真的吗?别担心这个。与Swing或JVM相比,六个模型类的内存占用是可以忽略的。如果记忆真的是一个严重的问题