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来查找它们。