Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / как реализовать Шаблонный метод в spring / 5 сообщений из 5, страница 1 из 1
24.01.2014, 23:01
    #38537480
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как реализовать Шаблонный метод в spring
Используется spring, в реализации одного сервиса есть два метода, которые имеют довольно объемный код и отличаются одной строкой. В этой строке вызываются разные методы другого сервиса (otherService) с разным типом параметров.
Вопрос как это можно переделать, чтобы не дублировать код)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
@Service("a")
class ServiceAImpl implements ServiceA {

@Autowired
private utilService;

@Autowired
private otherService;

@Override
public action1(Type1 paramType1) {


utilService.method1();
//....
utilService.method2();
//....

//Отличие метода action1 и action2 в этой строчке
otherService.methodA(paramType1);

utilService.method3();
//....
utilService.method4();
//....

}

@Override
public action2(Type2 paramType2) {


utilService.method1();
//....
utilService.method2();
//....

//Отличие метода action1 и action2 в этой строчке
otherService.methodB(paramType2);

utilService.method3();
//....
utilService.method4();
//....

}
    


}
...
Рейтинг: 0 / 0
24.01.2014, 23:23
    #38537483
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как реализовать Шаблонный метод в spring
Так и напрашивается Action<Type> отдельным классом. Стоило привести реальные имена классов и методов, тогда бы было очевиднее как сделать лучше. А на пальцах можно много способов придумать.

Например

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public action(Runnable runnable) {
    utilService.method1();
    utilService.method2();

    runnable.run();

    utilService.method3();
    utilService.method4();
}

public action2(Type2 paramType2) {
   action(new Runnable(){
       public void run(){
             service.methodA(paramType2);
       }
   }
})




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
actionMap.put(Type1.class, new ExactAction());


void action(Type type){
    Action action = actionMap.get(type.getClass());
    action.actionPerformed();
}

class  AbstractAction<T>{

abstract void specialMethod(T t);

public void actionPerformed(Type type) {
    utilService.method1();
    utilService.method2();
    specialMethod();
    utilService.method3();
    utilService.method4();
}

class ExactAction extends AbstractAction<Type1>{
    void specialMethod(Type1 t){
        otherService.methodA(t);
    }

}

}
...
Рейтинг: 0 / 0
24.01.2014, 23:41
    #38537489
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как реализовать Шаблонный метод в spring
В первом варианте я могу получить доступ к otherService (анонимный класс) если я правильно понимаю. Но через Runnable это не слишком грубо?

Во втором варианте я не очень понимаю как я получу доступ к сервису otherService, который в вашем примере используется в абстрактном классе. Объявлять каждый такой класс (как ExactAction) как @Component или @Service, чтобы аннотация @Autowired сработала? И как это воспримет Spring? Использовать оператор new при добавлении в actionMap не получиться.
...
Рейтинг: 0 / 0
25.01.2014, 01:44
    #38537521
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как реализовать Шаблонный метод в spring
AOP может подойти при определенных условиях
...
Рейтинг: 0 / 0
25.01.2014, 01:47
    #38537522
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как реализовать Шаблонный метод в spring
пока я воспользовался первым вариантом предложенным Blazkowicz, хотя меня смущает необходимость объявлять параметры как final
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / как реализовать Шаблонный метод в spring / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]