Passing single object vs. passing multiple parameters

后端 未结 4 890
孤街浪徒
孤街浪徒 2021-01-31 03:26

Suppose I have the following

Class A {
    Foo getFoo();
    Bar getBar();
    Baz getBaz();
}

And I need to define a function doStuff

4条回答
  •  灰色年华
    2021-01-31 03:53

    Method A (naked parameters) always has the advantages that

    • it requires the method author to type less, since they don't have to implement a Parameter Object,
    • it requires the method caller to type less, since they don't have to instantiate a Parameter Object
    • it performs better, since no Parameter Object has to be constructed and garbage collected
    • the reader can see what the individual parameters are from the method signature alone (but this is a double-edged sword; see below)

    Method B (Parameter Object) has advantages when

    • the parameters have domain meaning as a group, so the Parameter Object can be given a name that explains that meaning, saving the reader from having to read and understand each member of the group and how they relate
    • the parameter list is used in more than one method, so using the Parameter Object in each reduces duplication
    • the values in the parameter list are passed around among multiple methods as a group, which is easier when they can be passed as a single Parameter Object
    • some combinations of values are invalid; the Parameter Object can prevent those combinations
    • some values are optional, which can be provided by the Parameter Object instead of (depending on your language) default parameter values or overloaded methods
    • there is more than one parameter of the same type, making value-swapping errors more likely (although a Parameter Object is not better in this case if it has a constructor with the same parameter list as the method)

    That the Parameter Object introduces a new dependency on which caller and callee depend is not much of a disadvantage, since it is a simple class with no dependencies of its own.

    So, Parameter Object is

    • almost never worthwhile for a single parameter, sometimes worthwhile for a two-parameter method (e.g. Point is usually better than x, y) and sometimes not, and increasingly helpful with three and more parameters
    • increasingly helpful when more methods use the same parameter list

提交回复
热议问题