Rumah  >  Soal Jawab  >  teks badan

java - Penduaan kod dan mencari cara untuk memperbaikinya

    @Override
    public Option getTrafficChartOption(String type, ReportType reportType, Integer deviceId, Integer direction) {
        Integer device = deviceId + 1010000;
        List<ChartData> data = chartDao.getTrafficChartData(reportType,device,direction);
        String title = Titlehelper.getChartTitle(reportType);
        String subtitle = Titlehelper.gettrafficSubText(reportType.getReportTime(),deviceId,direction);
        Option option = new Option();
        switch (type){
            case "bar":
                option = BarOption.BarOptionBuiler(title, subtitle, data);
                break;
            case "line":
                option = LineOption.OptionBuilerhelp(title, subtitle, data);
                break;
            case "pie":
                option = PieOption.PieOptionbuilder(title, subtitle, data);
                break;
        }
        return option;
    }

    @Override
    public Option getAmmeterChartOption(String type, ReportType reportType, Integer deviceId) {
        List<ChartData> data = chartDao.getAmmeterDataChartData(reportType,deviceId);
        String title = Titlehelper.getChartTitle(reportType);
        String subtitle = Titlehelper.gettrafficSubText(reportType.getReportTime(),deviceId,1);
        Option option = new Option();
        switch (type){
            case "bar":
                option = BarOption.BarOptionBuiler(title, subtitle, data);
                break;
            case "line":
                option = LineOption.OptionBuilerhelp(title, subtitle, data);
                break;
            case "pie":
                option = PieOption.PieOptionbuilder(title, subtitle, data);
                break;
        }
        return option;
    }

Struktur kod sangat serupa, kecuali lapisan dao mengambil data secara berbeza Selain itu, adakah ruang untuk penambahbaikan dalam suis ini, saya tahu bahawa eumn digunakan untuk menghitung, tetapi saya tidak menulisnya untuk mengurangkan kod yang tidak berkaitan.

PHPzPHPz2712 hari yang lalu834

membalas semua(5)saya akan balas

  • 怪我咯

    怪我咯2017-05-17 10:06:56

    Kod anda adalah untuk mencipta kelas Option, yang sesuai untuk pemfaktoran semula menggunakan kaedah kilang.

    //方法参数尽量少于3个,3个以上时建议使用组合对象
    class OptionParam {
        private String type;
        private ReportType reportType;
        private Integer piceId;
        private Integer direction;
       //getter and setter
    }
    
    //Option抽象工厂,每个具体工厂都必须继承自抽象工厂
    public abstract class AbstractOptionFactory {
    
        @Autowired
        ChartDao chartDao;
    
         //希望具体工厂实现的方法,交于具体工厂实现
        abstract List<ChartData> getData(OptionParam optionParam);
    
        abstract String getSubtitle(OptionParam optionParam);
    
       //公共逻辑代码,创建对象调用该方法
        public Option create(OptionParam optionParam) {
            assert optionParam != null;
            assert optionParam.getReportType() != null;
            String type = optionParam.getType();
            List<ChartData> data = getData(optionParam);
            String title = Titlehelper.getChartTitle(optionParam.getReportType());
            String subtitle = getSubtitle(optionParam);
            Option option = new Option();
            switch (type) {
                case "bar":
                    option = BarOption.BarOptionBuiler(title, subtitle, data);
                    break;
                case "line":
                    option = LineOption.OptionBuilerhelp(title, subtitle, data);
                    break;
                case "pie":
                    option = PieOption.PieOptionbuilder(title, subtitle, data);
                    break;
            }
            return option;
        }
    
    }
    
    @Component
    class TrafficChartOptionFactory extends AbstractOptionFactory {
    
    
        @Override
        List<ChartData> getData(OptionParam optionParam) {
            return chartDao.getTrafficChartData(optionParam.getReportType(),
                    optionParam.getpiceId(),
                    optionParam.getDirection());
        }
    
        @Override
        String getSubtitle(OptionParam optionParam) {
            return Titlehelper.gettrafficSubText(
                    optionParam.getReportType().getReportTime(),
                    optionParam.getpiceId(),
                    optionParam.getDirection());
        }
    }
    
    @Component
    class AmmeterChartOptionFactory extends AbstractOptionFactory {
    
        @Override
        List<ChartData> getData(OptionParam optionParam) {
            return chartDao.getAmmeterDataChartData(optionParam.getReportType(), optionParam.getpiceId());
        }
    
        @Override
        String getSubtitle(OptionParam optionParam) {
            return Titlehelper.gettrafficSubText(optionParam.getReportType().getReportTime(),
                    optionParam.getpiceId(),
                    1);
        }
    }

    Saya tidak akan menerangkan secara terperinci tentang faedah menggunakan kaedah kilang Anda boleh membaca blog saya untuk butiran

    balas
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-17 10:06:56

            String title = Titlehelper.getChartTitle(reportType);
            String subtitle = Titlehelper.gettrafficSubText(reportType.getReportTime(),deviceId,1);
            Option option = new Option();
            switch (type){
                case "bar":
                    option = BarOption.BarOptionBuiler(title, subtitle, data);
                    break;
                case "line":
                    option = LineOption.OptionBuilerhelp(title, subtitle, data);
                    break;
                case "pie":
                    option = PieOption.PieOptionbuilder(title, subtitle, data);
                    break;
            }
            return option;

    Cukup keluarkan baris ini dan panggil mereka dalam kaedah

    balas
    0
  • 迷茫

    迷茫2017-05-17 10:06:56

    Anda boleh mencuba corak reka bentuk templat, yang mengekstrak algoritma biasa ke dalam kelas induk dan meninggalkan bahagian yang berbeza kepada subkelas untuk menulis semula. Jika terdapat lebih sedikit tempat sedemikian, lebih mudah untuk mengekstrak kaedah awam.

    balas
    0
  • 高洛峰

    高洛峰2017-05-17 10:06:56

    Apa yang dinyatakan di atas boleh dilaksanakan, ekstrak bahagian awam dan masukkan ke dalam kaedah awam.

    balas
    0
  • ringa_lee

    ringa_lee2017-05-17 10:06:56

    Kaedah perahan awam yang dinyatakan di atas adalah mudah dan praktikal, tetapi jawapan di tingkat satu terlalu mendalam dan perlu difikirkan dengan teliti

    balas
    0
  • Batalbalas