私は、Excelテンプレートファイルを埋めてExcelエクスポートを作成する抽象的なアクションを持つ古いStrutsアプリケーションで作業しています。抽象クラスの子クラスでコードの重複を避ける
各Excelエクスポートアクションは、この親クラスを拡張し、Excelテンプレートを埋め込む独自の実装を追加し、独自のテンプレートと出力ファイル名を定義します。
public abstract class ExcelExportAction extends BaseAction {
protected abstract String getInputFilename();
protected abstract String getOutputFilename();
protected abstract HSSFWorkbook modifyWorkbook(HSSFWorkbook workbook, HttpServletRequest request);
@Override
protected final ActionForward run(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws Exception {
Workbook workbook = new Workbook(getInputFilename());
workbook = modifyWorkbook(workbook, request);
addWorkBookToResponse(workbook, getOutputFilename());
return null;
}
...
}
実装は次のように見ていると、コードの重複がSonarQubeで「警告し」ている場所です:
public class BudgetReportExcelAction extends ExcelExportAction {
private static final String INPUT_FILENAME = "Report-Budget-Template.xls";
private static final String OUTPUT_FILENAME = "Report-Customerbudget.xls";
@Override
protected String getInputFilename() {
return INPUT_FILENAME;
}
@Override
protected String getOutputFilename() {
return OUTPUT_FILENAME;
}
@Override
protected HSSFWorkbook modifyWorkbook(HSSFWorkbook workbook, HttpServletRequest request) {
/* modify the workbook */
return workbook;
}
}
任意のアイデアをどのように重複を避けるため?
'ExcelExport'を拡張して共通の機能を実装し、' BudgetReportExcelAction'(および他の子クラス)を 'ExcelExport'の代わりに' DefaultExcelAction'に拡張する、ある種の 'DefaultExcelAction'を作成することができます。 – domsson
私はここに重複は見えません...はい、あなたはメソッドをオーバーライドする必要がありますが、それはOOPのポイントです。 – AxelH
SonarQubeはそうですが、他のコメントで述べたように、これは恐らく編集的な設定です... – GreenTurtle