Java代码多分支语句优化

发布于 2022-09-02 13:07:16 字数 545 浏览 51 评论 0

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.所以这样的方式有没有好一点的方式进行处理,不用写这么多的判断。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

有深☉意 2022-09-09 13:07:16

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

攒眉千度 2022-09-09 13:07:16

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

痕至 2022-09-09 13:07:16

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

猫瑾少女 2022-09-09 13:07:16

很明显是设计问题,还有点顽固不化

め七分饶幸 2022-09-09 13:07:16

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

影子是时光的心 2022-09-09 13:07:16

既然你说到了注入这个词,那我默认你是用Spring框架,而Spring的applicationContext里面可以获得容器已经初始化的所有bean,通常框架里面都会有一个BaseDao之类的数据访问层抽象,那你就可以使用baseDao=applicationContext.getBean("beanName"),随后你想做什么就做什么

攀登最高峰 2022-09-09 13:07:16

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

孤星 2022-09-09 13:07:16

我记着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进行协调

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文