这是一个设计问题。设计是伪代码,代表一个小例子,但我可能会在未来添加更多的方法,数据和逻辑。
在这个例子中,我正在考虑两种方法。在下面的execute方法中,我应该使用execute方法的输出返回不可变的“data / bean / model”对象,还是更新BusinessLogic类的状态。
两者都实现了相同的目标,我想要执行结果,数据应该包含在bean容器中,或者包含在BusinessLogic类的内部。
我更喜欢使用BusinessLogic类,因为SomeObject只是一个没用的bean。
你有什么想法?
public class SomeObject {
private String data1;
private String data2;
}
public class BusinessLogic {
private final IWebObject webObject;
/* String data1; String data2 */
public BusinessLogic(final IWebObject webObject) {
this.webObject = webObject;
}
// Approach 1
public SomeObject execute() {
return new SomeObject();
}
or
...
...
// Approach 2
public void execute() {
// Do something
this.data1 = "data1";
this.data2 = "data2";
}
public String getData1() { }
public String getData2() { }
} // End of the Class //
方法2的唯一问题是data1和data2不会是不可变的。我可以任意调用execute并更改这些值。
答案 0 :(得分:4)
如果该方法的主要目的是执行而不返回任何内容,我个人会采用您的第二种方法并将数据保留在BusinessLogic
类内部。
答案 1 :(得分:1)
在大多数情况下,我会说它取决于调用execute()方法的代码的性质。如果它只是按原样读取结果,那么将它保存在BusinessLogic类中就可以了。如果您要将结果传递给不同的方法,您应该将结果放在一个单独的类中(您可以让BusinessLogic实现一个仅包含结果方法的接口,但这可能会模糊BusinessLogic实现的位置之间的界限)结束,结果实施开始的地方)。
首先,最好将其保持在内部 - 遵循“你不需要它”的原则。当您可以看到 需要将结果传递给其他方法和其他对象时,您可以根据自己的需要对其进行重构。
答案 2 :(得分:1)
这不是一般的面向对象设计问题 - 它取决于您尝试建模的域。
execute
是否应该更改状态BusinessLogic
? (选项2)