如何使用大型参数列表设置方法的格式

2022-09-01 23:03:59

我从来没有见过一种方法可以很好地做到这一点,我有兴趣看看别人是如何做到的。目前我把它格式化成这样:

public Booking createVehicleBooking(Long officeId, 
                                    Long start, 
                                    Long end,
                                    String origin, 
                                    String destination, 
                                    String purpose,         
                                    String requirements, 
                                    Integer numberOfPassengers) throws ServiceException {
/*..Code..*/
}

答案 1

像这样的大型参数集通常(但并非总是)表明您可以使用对象来表示参数集。如果出现以下任一情况,则尤其如此:

  • 有几个方法具有类似的大参数集,可以替换为采用参数对象的单个方法。

  • 该方法称为create...

所以你上面的代码可能会变成(原谅我C++,我是Java开发人员):

class BuildVehicleBooking {
    Long officeId;
    Long start;
    Long end;
    String origin;
    String destination;
    String purpose;             
    String requirements;
    Integer numberOfPassengers;

    Booking createVehicleBooking () throws ServiceException { ... }
}

这就是生成器模式。此模式的优点是,您可以分段构建一组复杂的参数,包括参数相互关联的多种变体,甚至在新信息可用时覆盖参数,然后在最后调用方法之前。create

另一个潜在的优点是,您可以添加一个方法,该方法在到达最终对象之前检查它们的一致性。这适用于创建对象涉及不可逆步骤(如写入文件或数据库)的情况。verifyParameterscreating

请注意,与所有模式一样,这并不适用于所有情况,也可能不适用于您的模式。如果你的代码足够简单,那么这种模式可能会过度设计它。如果代码变得混乱,重构到此模式可能是简化它的好方法。


答案 2
public Booking createVehicleBooking(
    Long officeId, 
    Long start, 
    Long end,
    String origin, 
    String destination, 
    String purpose,                 
    String requirements, 
    Integer numberOfPassengers)

throws ServiceException {
/*..Code..*/
}

推荐