在一种方法中重构许多变量的初始化的良好实践

时间:2019-04-03 13:30:48

标签: java

我正在与rest服务一起编写一个rest控制器,它将使用遗留代码,该遗留代码仍在应用程序的不同位置使用。其目的是导出Excel文件。 为了使代码更简洁(在这种情况下尽可能干净,我不想重新编写整个应用程序)并简化单元测试,我在进行一些重构。

因此,假设我有一个方法,该方法使用基于过滤器(输入)的参数调用许多服务,然后使用它生成excel文件。有什么好的清洁方法?

我将感谢一些提示和技巧,以及很好的讨论;)

    @Override
    public Downloadable<Workbook> getExcel(ExcelFilterTO filter) {

    List<String> someList= someService.getString(filter.getParam1(), filter.getParam2()).stream().collect(toList());

    List<Integer> someList2 = someService.getInt(filter.getParam1(), filter.getParam2(), filter.getParam3(), filter.getParam4());

       TranslationSet translationsSet = translationService.getTranslationsSet(filter.getParam4(),
            TranslationsGroup.SOME_TYPE);

       SomeClass classObject = someService.doSomething(filter.getParam1());

    ...
    ...
    String fileSuffix = ExcelUtils.EXCEL_EXPORT_FILE_NAME_SUFFIX;

    ResourceBundle resourceBundle = ResourceBundle  .getBundle(BundleNames.getBundle(filter.getParam2()).getName());


    Workbook workbook = excelExport.exportExcel(someList, someList2 , fileSuffix, translationsSet, filter.getParam3());

    String fileName = excelExport.getExcelFileName(resourceBundle, someList3, filter.param6(), classObject);

    return new DownloadableResource<>(fileName, XLS.getContentType(), workbook);
    }`

2 个答案:

答案 0 :(得分:-1)

我猜您可以将所有List<Sting>对象用逗号括起来并在前面的行中对其进行初始化。例如List<String> obj1, obj2, obj3, ...;

答案 1 :(得分:-1)

您可以通过添加实用程序方法来缩短初始化时间,但我想这只是一个问题。

// utility method
List<Integer> intList(Supplier<String> param1, Supplier<String> param2) {
    return someService.getString(param1.apply(filter), param2.apply(filter)).stream().collect(toList());
}

// utility method
List<String> stringList(Supplier<String> param1, Supplier<String> param2) {
    return someService.getString(filter.getParam1(), filter.getParam2()).stream().collect(toList());
}

所以你可以拥有

List<Integer> someList2 = intList(filter::getParam1, filter::getParam2);
List<Integer> someList4 = intList(filter::getParam4, filter::getParam3);

List<String> someList = stringList(filter::getParam1, filter::getParam2);
List<String> someList3 = stringList(filter::getparam6, filter::getParam5);

在您的构造函数中。