記錄一次項目中代碼大致優化方向

簡單來說就是優化後臺文件下載的,主要因爲文件類型多,有的文件需要動態寫入值(報表),有的不需要,有的能下載有的只能在線打開,可採用策略+工廠方法優化一下代碼

結構:

 

@Data
@Slf4j
public class ExcelFile implements FileInterface{
    private FileBase fileBase;

    @Override
    public String anlysql() {
        log.info(fileBase.getId());
        return "Excel anlysql";
    }

    @Override
    public String writeFile() {
        log.info(fileBase.getId());
        return "Excel writeFile";
    }
}

@Data
@Slf4j
public class WordFile implements FileInterface{
    private FileBase fileBase;

    @Override
    public String anlysql() {
        log.info(fileBase.getId());
        return "Word anlysql";
    }

    @Override
    public String writeFile() {
        log.info(fileBase.getId());
        return "Word writeFile";
    }
}
@Data
@Slf4j
public class PdfFile implements FileInterface{
    private FileBase fileBase;
    @Override
    public String anlysql() {
        return null;
    }

    @Override
    public String writeFile() {
        return null;
    }
}
public interface FileInterface {
    String anlysql();
    String writeFile();
    FileBase getFileBase() ;
    void setFileBase(FileBase fileBase) ;
}
@Component
public class FileFactory {

    public List<FileInterface> getFile(List<FileBase> fileList){
        List<FileInterface> list = new ArrayList<>();
        for (FileBase fileBase : fileList) {
            //查詢數據庫
            switch (fileBase.getType()){
                case 1:
                    FileInterface excelFile = new ExcelFile();
                    ((ExcelFile) excelFile).setFileBase(fileBase);
                    list.add(excelFile);
                    break;
                case 2:
                    FileInterface wordFile = new WordFile();
                    ((WordFile) wordFile).setFileBase(fileBase);
                    list.add(wordFile);
                    break;
                default:
                    break;
            }
        }
        return list;
    }
}
@RequestMapping("/webDownLoadFile")
    public Object test()throws Exception{
        //查某用戶在某個業務下的文件,得到文件ID:
        ArrayList<String> listString = new ArrayList<>();
        QueryWrapper<FileBase> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("id","type","url","sqls");
        List<FileBase> list = fileBaseMapper.selectList(queryWrapper);

        //工廠類根據type進一步創建具體對象
        List<FileInterface> file = fileFactory.getFile(list);

        for (FileInterface f : file) {
            FileBase fileBase = f.getFileBase();
            String anlysql = f.anlysql();
            fileBase.setSqls(anlysql);

            f.writeFile();
        }




        return null;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章