给定Web服务方法:
public void FindSomeEntities(int? Id, string param1, int? param2, ...)
重构:
public void FindSomeEntities(SelectionParameters selectionParameters)
class SelectionParameters
{
public int? Id;
public string param1;
public int? param2
...
}
优点:
缺点:
答案 0 :(得分:2)
我不确定这种重构有多大价值,因为正如你所说,支持类的数量将是/可能是一个痛苦的维护,并没有其他目的。
如果参数具有不同的用途,例如在您的示例中,ID' ID'那么我认为将它们分开是明智的,以便在方法体中轻松识别它们以及你想用它们做什么。
但是,如果您的参数只是一组在方法体中执行类似/相同功能的值,您可以查看使用params
关键字并定义您的方法:
public void FindSomeEnteties(params object[] theParameters)
这取决于你是否想要挖掘一个数组以取出索引0并将其视为ID等等,或者你的方法是否只想对所有传递的参数做同样的事情。
答案 1 :(得分:2)
此重构称为Introduce Parameter Object。如果参数自然地彼此相关,则可能是个好主意,特别是如果它们经常一起用作多个方法的参数列表。
答案 2 :(得分:0)
如果有任何理由相信其他Web服务共享相同(子)参数集,这是合理的。
无论你是否这样做,你都有一个defacto结构作为参数列表。这个观察是在我们的PARLANSE编程语言中实现的,它总是有一个函数的参数,名为'?' (有点像OO中的“自我”)。那个论点有一个类型;它可以是标量或复杂变量(int或string),也可以是struct。通常,一个结构声明定义一个结构;在PARLANSE中,编写看似多个参数的内容隐式定义了一个结构。在将参数列表传递给子函数的情况下,可以简单地在'?'上调用该子函数。并传递整个参数列表。