Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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
Java 重构帮助…基于属性的对象还是大量成员字段?_Java_Design Patterns_Refactoring_Properties - Fatal编程技术网

Java 重构帮助…基于属性的对象还是大量成员字段?

Java 重构帮助…基于属性的对象还是大量成员字段?,java,design-patterns,refactoring,properties,Java,Design Patterns,Refactoring,Properties,我目前正在重构一个类,该类当前看起来如下: class SomeModel { private String displayName; private int id; private boolean editable; private int minimumAllowedValue; private int maximumAllowedValue; private int value; // etc. etc.... a bunch (1

我目前正在重构一个类,该类当前看起来如下:

 class SomeModel {
    private String displayName;
    private int id;
    private boolean editable;
    private int minimumAllowedValue;
    private int maximumAllowedValue;
    private int value;
    // etc. etc.... a bunch (10+) of other fields...

    // and then tons of setters and getters for these fields, some of the
    // setters have restrictions depending on other settings, like you can't
    // set the maximum lower than the minimum, etc.
    // ...
 }
我的问题是:这真的是最好的方法吗?还是我应该用setProperty和getProperty两种方法将所有这些字段重构成更多基于属性的结构

另一种可能的重构是将属于同一个类的属性提取到它们自己的类中,例如将max/min结构提取到AllowedRange对象或其他对象中

想法

您可以看一下-它支持约束、事件等。 也检查 您可以使用一个映射和一组常量作为键,并使用setProperty施加一些限制。甚至注册验证器。 如果这个对象应该由其他工具/框架spring、hibernate等操作,那么当然重构不是一个选项——它应该符合JavaBeans规范 归根结底,为什么首先需要重构它?它的工作做得不是很好吗? 您可以看一下-它支持约束、事件等。 也检查 您可以使用一个映射和一组常量作为键,并使用setProperty施加一些限制。甚至注册验证器。 如果这个对象应该由其他工具/框架spring、hibernate等操作,那么当然重构不是一个选项——它应该符合JavaBeans规范 归根结底,为什么首先需要重构它?它的工作做得不是很好吗?
不要这样做。很好


在将来,只需使用像Eclipse这样的IDE,点击几下就可以自动生成Javabean类、属性和/或getter&setter,这样您就不需要一次又一次地键入所有这些代码。

不要这样做。很好


将来只需使用Eclipse之类的IDE,点击几下即可自动生成Javabean类、属性和/或getter&setter,这样您就不必反复键入所有这些代码。

在您列出的字段中,我会——正如您所建议的——将minimumAllowedValue和maximumAllowedValue重构为一个范围类,然后用,比如说,allowedRange替换它们。如果我开始看到该值及其允许的范围是一种常见的模式,那么我可能会转到BoundedValue类。在看不到所有其他领域的情况下,想知道如何处理它们是不可能的,但太多的领域肯定是一种气味。解决方案取决于它们之间的相互关系,但“最小值与最大值->范围”和“值与范围->边界值”示例为您提供了一些应用技术的概念


另外,请记住。

对于您列出的字段,我会——正如您所建议的那样——将minimumAllowedValue和maxiumAllowedValue重构为一个Range类,然后用allowedRange替换它们。如果我开始看到该值及其允许的范围是一种常见的模式,那么我可能会转到BoundedValue类。在看不到所有其他领域的情况下,想知道如何处理它们是不可能的,但太多的领域肯定是一种气味。解决方案取决于它们之间的相互关系,但“最小值与最大值->范围”和“值与范围->边界值”示例为您提供了一些应用技术的概念


另外,请记住这一点。

不要让IDE生成代码。好的,你不必输入它,但你仍然需要阅读它。在所有这些方法中很难找到你修改过的方法。@Roel Spilker:只需将它们隐藏在类的最底层,并使用Ctrl+O来查找它们。不要让IDE生成代码。好的,你不必输入它,但你仍然需要阅读它。在所有这些方法中很难找到你修改过的方法。@Roel Spilker:只需将它们隐藏在类的最底层,并使用Ctrl+O来查找它们。