【发布时间】:2021-12-06 02:30:44
【问题描述】:
我的 Java (Spring) 应用程序中有以下 2 种方法(为简洁起见省略了一些代码),我想减少这些方法中的重复块。至此,经过一番研究,有人提出了Builder Pattern,也有人提出了类似的Template Method。我也认为,我可以简单地创建 2 个单独的方法并将每个重复的代码块移动到这些方法中。
但是,我对这个问题没有经验,我想先请你遵循最正确的方法。那么,我应该如何减少以下2种方法中的代码重复?我也想使用继承,但我真的很困惑找到合适的方法。
不是:为了简洁起见,我省略了我的代码并使用了一个简单的代码:
@Override
public MultipartFile exportAaaaa() throws IOException {
// repeated code block I
workbook = new XSSFWorkbook();
sheet = workbook.createSheet(TextBundleUtil.read(TITLE));
rowCount = new AtomicInteger(0);
//
// private block to this method
final Page<Aaaaa> page = aaaaaService.findAll());
// ...
// repeated code block II
outputFile = File.createTempFile(TextBundleUtil.read(TITLE), EXTENSION);
try (FileOutputStream outputStream = new FileOutputStream(outputFile)) {
workbook.write(outputStream);
} catch (IOException e) {
LoggingUtils.error("Writing is failed ", e);
}
final FileInputStream input = new FileInputStream(outputFile);
final String fileName = TextBundleUtil.read(TITLE).concat(EXTENSION);
return new MockMultipartFile(fileName,
fileName, CONTENT_TYPE, IOUtils.toByteArray(input));
//
}
@Override
public MultipartFile exportBbbbb() throws IOException {
// repeated code block I
workbook = new XSSFWorkbook();
sheet = workbook.createSheet(TextBundleUtil.read(TITLE));
rowCount = new AtomicInteger(0);
//
// private block to this method
final Page<Bbbbb> page = bbbbbService.findBy Uuid(uuid));
// ...
// repeated code block II
outputFile = File.createTempFile(TextBundleUtil.read(TITLE), EXTENSION);
try (FileOutputStream outputStream = new FileOutputStream(outputFile)) {
workbook.write(outputStream);
} catch (IOException e) {
LoggingUtils.error("Writing is failed ", e);
}
final FileInputStream input = new FileInputStream(outputFile);
final String fileName = TextBundleUtil.read(TITLE).concat(EXTENSION);
return new MockMultipartFile(fileName,
fileName, CONTENT_TYPE, IOUtils.toByteArray(input));
//
}
【问题讨论】:
-
我建议您为code review 发布您的实际工作代码。
标签: java spring inheritance design-patterns interface