为了账号安全,请及时绑定邮箱和手机立即绑定

Java代码多分支语句优化

Java代码多分支语句优化

当年话下 2019-03-27 22:19:07
1.项目背景一个controller,一个serivce,多个dao层service里面更具用户的不同参数调用不同的dao进行实例化,时候在调用方法。2.不要问为什么设计,那是因为一个模块对应37张表,用户根据下拉选择输入不同的表单(说白点,点击页面新增弹出下拉框,让用户选择填写那张表单,再来一句,各个表之间没有相同的字段),所以此模块肯定是一个controller,一个service,各个dao对应不同的表进行增删改查操作3.所以在service层必然有一个语句需要判断实例化那个dao,用注入也行if(flag == dao1){}else if(flag == dao2){}else if(flag == dao3){}else if(flag == dao4){}else if(flag == dao5){}else if(flag == dao6){}........就要写25个(不管是switch还是if都避免不了)4.所以这样的方式有没有好一点的方式进行处理,不用写这么多的判断。
查看完整描述

7 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

我觉得应该,从前端把dao的不重复名字,通过反射调用Dao层会很好;
仅仅是个念头。

查看完整回答
反对 回复 2019-04-17
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

既然你问题里已经有好几句“不要问”“肯定是”这样的肯定句,那也不好说什么了。可以试试工厂模式或管理者模式,根据flag值获取对应的dao实例(其实只是把这段丑陋的代码挪到一个阴暗的小角落)。


查看完整回答
反对 回复 2019-04-17
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

多态,或表驱动模式(参考代码大全第十八章)


查看完整回答
反对 回复 2019-04-17
?
跃然一笑

TA贡献1826条经验 获得超6个赞

项目结构问题。想想java的特征。封装。继承多态


查看完整回答
反对 回复 2019-04-17
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

我会建一个map
map.put("dao1",dao1);
map.put("dao2",dao2);
map.put("dao3",dao3);
然后通过页面的参数选择map的key,获得dao
当然如果你用的是spring, 这个map可以直接配置在spring xml里

查看完整回答
反对 回复 2019-04-17
?
DIEA

TA贡献1820条经验 获得超2个赞

我记着if else和switch case语句都可以用命令模式来重构


interface dao

{

    crdu() ;

}


class ConcreteDao implements dao

{

    crdu(){...} ;

}


class Service

{

    private Dao dao ;


    public void set(Dao dao){}


    public void service(){dao.service();}

}


class ServiceControl

{

    private HashMap<Integer , Dao> map ;

    private Service service ;


    public ServiceControl()

    {

        //读xml表初始化标识与dao的对应

    }


    public void service(int flag)

    {

        //根据flag来选择不同的dao注入到service中

        Dao dao = map.get(flag) ;

        service.set(dao) ;

        service.service() ;

    }

}

然后control层直接嗲用servicecontrol就可以了, 这样control层就和dao解耦了, 两边的修改互不影响, 通过xml进行协调


查看完整回答
反对 回复 2019-04-17
  • 7 回答
  • 0 关注
  • 767 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信