Java:何时使用字段与参数?
我当前的IVR应用程序使用一个包装类和几个方法来调用web服务,然后解析其结果。每个类都有一个“invoke”方法,该方法调用web服务,然后调用后续子方法将解析分解为逻辑块 每当一个或多个子方法中需要一个新的输入参数时,以前的开发人员都会将其作为参数添加到调用中,然后将其作为参数添加到子方法中 这是正确的方法吗?还是最好在类上设置一个字段,然后在必要时引用它 而不是:Java:何时使用字段与参数?,java,coding-style,methods,Java,Coding Style,Methods,我当前的IVR应用程序使用一个包装类和几个方法来调用web服务,然后解析其结果。每个类都有一个“invoke”方法,该方法调用web服务,然后调用后续子方法将解析分解为逻辑块 每当一个或多个子方法中需要一个新的输入参数时,以前的开发人员都会将其作为参数添加到调用中,然后将其作为参数添加到子方法中 这是正确的方法吗?还是最好在类上设置一个字段,然后在必要时引用它 而不是: invoke (oldField1, oldField2, newField1) submethod1 (result
invoke (oldField1, oldField2, newField1)
submethod1 (results, oldField1, oldField2, newField1)
submethod2 (results, oldField1, oldField2, newField1)
如果是:
invoke(oldField1, oldField2, newField1){
OldField1=oldField1
OldField2=oldField2
NewField1=newField1
}
submethod1(results)
submethod2(results)
甚至:
new (oldField1, oldField2, newField1){
OldField1=oldField1
OldField2=oldField2
NewField1=newField1
}
invoke()
submethod1(results)
submethod2(results)
谢谢 第一种解决方案允许将对象设为无状态,并允许对所有调用使用唯一实例,即使是并行调用 第三种方法允许使对象有状态但不可变。它可以用于使用同一组字段的多个调用,即使是并行调用(如果设置为不可变) 这两种解决方案都是可以接受的。对象的状态越少,使用它就越容易,特别是在多线程环境中 对象的易变性越小,使用它就越容易
第二个使其成为有状态的可变对象,不能由多个线程使用(没有同步)。在我看来,它没有其他两个干净。这取决于您的参数是数据还是识别模式/开关 我建议一个参数用于数据结构类型,另一个参数包含不同操作的枚举类型 然后根据枚举类型或操作模式,您可以选择执行类的策略
要限制这种增加参数的方法,可以提供一个接口。并迫使执行部门遵守这一点 我的一般规则是尽可能避免面向服务类中的状态性。尽管Java本身并不真正支持函数式编程,但最简单、最可伸缩的实现是第一种方法,它不使用成员变量 如果您的目标是避免频繁更改方法签名,则可以尝试使用更通用的字段封装:
public class Invoker {
public static void invoke(ResultContainer result, List<String> parameters) {
submethod1(result, parameters);
submethod2(result, parameters);
}
}
公共类调用程序{
公共静态void调用(ResultContainer结果,列表参数){
子方法1(结果、参数);
子方法2(结果、参数);
}
}
我还建议你看一下这本书,了解更多的想法