我需要做一个复杂的计算。在我的例子中,创建Calculator类(使用策略模式抽象)似乎是最自然的。
要执行计算,类需要接受大约20个输入,其中一些输入是可选的,其中一些输入可能在将来发生变化。一旦调用计算()方法,需要输出大约20个不同的变量。
有几种方法可以实现这一点。
所有这些方法都有优缺点。你会怎么做?
更新:谢谢你的反馈。
这个计算器的目的是生成一个引号。输入包括客户地址、利率、目标利润、附加费用、产品标识等。产出包括报价、实际利润、更多费用等。
我已经创建了ICalculateInput和ICalculateOutput接口以及它们的具体类,系统现在运行得很好。Calculator类还继承自ICalculator接口(由于所涉及的计算因产品来源于哪个公司而有很大差异)。
发布于 2008-12-08 23:11:56
大多数人建议使用“参数类”和“结果类”。我同意这种方法,但在我看来,您的参数可分为几个类别。也许您可以为所需参数创建一个参数类,为可选参数或可选参数组创建一个单独的参数类。这样,您可以根据所需的计算类型创建不同的方法;
Result calculate(RequiredArgs requiredArgs) {
...
}
Result calculate(RequiredArgs requiredArgs, OptionalArgs optionalArgs) {
}
Result calculate(RequiredArgs requiredArgs, OptionalArgs optionalArgs, OtherOptionalArgs oOpitonalArgs) {
}这将使您的API更易于使用。如果不想为不同的组创建类,也可以使用Maps,但这需要在计算引擎中编写更多的验证代码。通常,我更喜欢参数类,但必须更多地了解您的特定问题才能起决定性作用。
由于线程安全和对象可重用性,我不会将计算结果存储在计算引擎本身。维护无状态代码要容易得多。
发布于 2008-12-08 22:35:01
长参数列表变得繁重且容易出错。告诉我们更多关于应用程序和环境的信息,但是一般来说,传递某个类的对象或者使用列表之类的东西都是很诱人的。
我所做的处理它的一种相当巧妙的方法是使用复合模式。例如,在Java中,您可以创建一个参数接口,然后列出实现参数的对象列表。
发布于 2008-12-08 22:35:32
根据经验,不要创建接受3-4个参数以上的方法。
您不应该在JavaScript中做的事情:
var addUser = function (name,surname, age, add1, add2, telephone) {
//do something
};与以上所述不同,它最好这样做:
var addUser = function (userDetails) {
//Do something with userDetails.name etc...
};
//Then invoke the function by passing in an object:
var ud = {name : 'Andreas', surname : 'Grech', age : 20, add1 : 'bla', add2 : 'bla', telephone : 12343};
addUser(ud);这样,您就可以在不破坏函数的情况下按任意顺序输入参数,甚至可以跳过一些参数。
https://stackoverflow.com/questions/351165
复制相似问题