2014-11-17 1 views
0

У меня есть следующий фрагмент кодаКак избежать дублирования кода в цепочке if-else?

if(!setPass){ this.teacher = Ev_TeacherTestUtil.createTeacher (sess, 'TestTeacher1', Ev_TeacherService.NOMINATED, Ev_TeacherService.EMPLOYEE_NO, Ev_TeacherService.PASS_NO); }else{ this.speaker = Ev_TeacherTestUtil.createTeacher (sess, 'TestTeacher1', Ev_TeacherService.NOMINATED, Ev_TeacherService.EMPLOYEE_NO, Ev_TeacherService.PASS_YES); }

Единственное изменение в состоянии еще является Ev_TeacherService.PASS_YES (в состоянии, если он установлен в Ev_TeacherService.PASS_NO), остальное просто дублируются! Как я могу избежать этого? Заранее спасибо за помощь!

ответ

0

Как об этом:

this.teacher = Ev_TeacherTestUtil.createTeacher 
        (sess, 'TestTeacher1', 
        Ev_TeacherService.NOMINATED, 
        Ev_TeacherService.EMPLOYEE_NO, 
        (setPass) ? Ev_TeacherService.PASS_YES : Ev_TeacherService.PASS_NO); 
0
this.teacher = Ev_TeacherTestUtil.createTeacher 
       (sess, 'TestTeacher1', 
       Ev_TeacherService.NOMINATED, 
       Ev_TeacherService.EMPLOYEE_NO, 
       (!setPass)?Ev_TeacherService.PASS_YES:Ev_TeacherService.PASS_NO); 
0

Я не уверен, какой язык, но обычно вы можете использовать

public void main() { 
     if(!setPass){ 
      this.teacher = create(false); 
     } else { 
      this.speaker = create(true); 
     } 
    } 

    public Teacher create(boolean setPass) { 
     return Ev_TeacherTestUtil.createTeacher 
        (sess, 'TestTeacher1', 
        Ev_TeacherService.NOMINATED, 
        Ev_TeacherService.EMPLOYEE_NO, 
        setPass ? Ev_TeacherService.PASS_YES : Ev_TeacherService.PASS_NO); 
    } 

Другими словами, одну строку, если заявление, должно решить это.

setPass ? Ev_TeacherService.PASS_YES : Ev_TeacherService.PASS_NO 

Другой вариант, это строитель шаблон

http://en.wikipedia.org/wiki/Builder_pattern