찾다

 >  Q&A  >  본문

if - Java代码多分支语句优化

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

PHP中文网PHP中文网2827일 전563

모든 응답(8)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-17 17:41:01

    다오 이름을 앞단에서 반복하지 않고 리플렉션을 통해 다오 레이어를 호출하는 것이 좋을 것 같습니다.
    그냥 아이디어일 뿐입니다.

    회신하다
    0
  • 黄舟

    黄舟2017-04-17 17:41:01

    귀하의 질문에는 이미 '묻지 마세요', '확실히' 등의 긍정문이 여러 개 포함되어 있어 다른 말씀을 드리기가 어렵습니다. 플래그 값을 기반으로 해당 dao 인스턴스를 얻기 위해 팩토리 모드나 관리자 모드를 시도할 수 있습니다(실제로는 이 보기 흉한 코드를 어두운 구석으로 옮기면 됩니다).

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-17 17:41:01

    다형성 또는 테이블 기반 모드(코드 컬렉션 18장 참조)

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-17 17:41:01

    분명히 디자인 문제이고 아직은 좀 고집스럽네요

    회신하다
    0
  • 迷茫

    迷茫2017-04-17 17:41:01

    프로젝트 구조 문제. 자바의 특징을 생각해 보세요. 캡슐화. 상속 다형성

    회신하다
    0
  • 迷茫

    迷茫2017-04-17 17:41:01

    인젝션이라는 단어를 언급했으므로 Spring 프레임워크를 사용하고 있다고 가정하고 Spring의 applicationContext는 컨테이너에 의해 초기화된 모든 Bean을 얻을 수 있습니다. 일반적으로 프레임워크에는 BaseDao와 같은 데이터 액세스 계층 추상화가 있습니다. , 그런 다음 baseDao=applicationContext.getBean("beanName")을 사용하고 원하는 대로 수행할 수 있습니다

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:41:01

    지도를 만들겠습니다
    map.put("dao1",dao1);
    map.put("dao2",dao2);
    map.put("dao3",dao3);
    그런 다음 페이지의 매개변수를 통해 지도의 키를 선택하고 dao를 가져옵니다
    물론 spring을 사용하는 경우 이 지도를 spring xml에서 직접 구성할 수 있습니다

    회신하다
    0
  • PHPz

    PHPz2017-04-17 17:41:01

    if else와 switch case 문 모두 명령 모드를 사용하여 재구성할 수 있다는 것을 기억합니다

    으아악

    그러면 컨트롤 레이어는 servicecontrol을 직접 사용할 수 있습니다. 이러한 방식으로 컨트롤 레이어는 dao에서 분리되고 양쪽 수정 사항은 서로 영향을 주지 않으며 xml을 통해 조정됩니다.

    회신하다
    0
  • 취소회신하다