2014-09-23 4 views
0

Это базовая структура кода на проекте я содействие:производительность Java - хорошая практика (с использованием ссылок)

protected ModelAndView showForm(ActionContext ctx) throws Exception { 
    Command cmd = ctx.getCommand(); 
    SubCommand subCmd = cmd.getSubCommand(); 
    doSmth(cmd, subCmd); 
    doSmthElse(ctx); 
    doSmthElse2(ctx); 
} 

и каждый doSmthElse(ctx) начинается с

Command cmd = ctx.getCommand(); 
SubCommand subCmd = cmd.getSubCommand(); 

для меня это Непонятно, почему это выглядит так, и его нужно изменить так, как он выглядит в doSmth. Пожалуйста, поправьте меня, если я ошибаюсь, но я думаю, что он работает медленнее, как сейчас.

+4

без разделения кода опережать getCommand и getSubCommand мы не можем быть уверены. Это может быть хорошо, если его справедливая стоимость возвращается. – JIV

+0

возвращает ссылку на большой объект (~ 150 переменных большой bean) – WrRaThY

+2

Если это просто геттер, я сомневаюсь, что это проблема производительности - особенно в контексте сети. Если у вас проблема читаемости, обязательно - рефакторинг. – vikingsteve

ответ

1

Если getCommand так же просто, как return command;, то разница в производительности не будет.

С точки зрения дизайна, если doSmthElse нуждается только в подкоманде для выполнения своей работы, тогда вы действительно можете передать то, что ей нужно, и только то, что ему нужно, а не «общий» контекстный объект, содержащий ненужную информацию, - это позволит более легкое тестирование. Если это так, было бы целесообразно позвонить doSmthElse(subCmd).

Но это будет означать, что если вам понадобится дополнительная информация на более позднем этапе, вам нужно будет изменить подпись метода.

Другими словами, как это часто, это зависит ...

0

Я бы сказал, что основной момент не производительность как таковой, но это концептуальная/ясная вещь. Если команды и подкоманды всегда идут вместе, то имеет смысл заменить doSmth(cmd, subCmd) на doSmth(ctx).

Что касается производительности, если объект предварительно сконструирован (то есть он не восстанавливается при вызове геттера), не имеет значения, сколько ссылок на него имеется.

Смежные вопросы