Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Цепочный стиль, Влияет ли на производительность? 
V
    Опции темы
Platon
Дата 13.3.2008, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Здравствуйте, уважаемые.

Мне очень интересно узнать, стиль типа 
Код

MyObjectResult res = new MyObject().setSection(1).setVolume(14).configureBuild(MyObject.LAZY).... .execute();

на сколько расточителен и стоит ли его использовать?
Я знаю что hibernate активно использует этот стиль к примеру для Criteria...
А если подумать на сколько такой подход замедляет ход, если вообще замедляет?
PM MAIL ICQ   Вверх
LSD
Дата 13.3.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Замеляет по сравнению с чем? По сравнению с:
Код

MyObject myObject = new MyObject();
myObject.setSection(1);
myObject.setVolume(14);
myObject.setSection(1);

?

Мне такой подход очень нравится, в некоторых случаях читаемость получается весьма хорошая читаемость:
Код

  @Override
  public String toString()
  {
    return new ToStringBuilder(this)
      .append("trackId", trackId)
      .append("deliveryState", deliveryState)
      .append("summaries", summaries)
      .toString();
  }



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Platon
Дата 13.3.2008, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Да именно. но, если к примеру, функция только устанавливает значение:

Код

setValue(int value) { this.value = value; }

получается операций в 2 раза больше. Так скажем, делаешь цепочку, и оборачиваешь поля в методы, только лишь потому, что так намного удобней писать.

Добавлено @ 14:28
Кстати, данная тема навеяно этой темой
Работая с GridBagConstraints пришел к выводу, благодаря w1nd конечно, что с нами тоже можно работать, только немножко обернуть поудобней.
Так вот там вместо прямого доступа к полям я сделал такие цепочки.

Это сообщение отредактировал(а) Platon - 13.3.2008, 14:28
PM MAIL ICQ   Вверх
LSD
Дата 13.3.2008, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Работать то конечно будет помедленней, но не думаю, что это то место которое стоит оптимизировать.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Platon
Дата 13.3.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Хорошо, спасибо за ответ.
PM MAIL ICQ   Вверх
niasilil
Дата 13.3.2008, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.6.2007
Где: USA

Репутация: 8
Всего: 9



кстати, одно из предложений для java 7 - чтобы все void методы по умолчанию возвращали this. Тогда такие цепочки будет легко писать. Читается тоже легко. 
http://tech.puredanger.com/java7#chained


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
serger
Дата 14.3.2008, 06:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



Угу, а если перемешать с методами, которе возвращают не this? тоже легко читается?!


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
niasilil
Дата 14.3.2008, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.6.2007
Где: USA

Репутация: 8
Всего: 9



Цитата(serger @ 14.3.2008,  06:18)
Угу, а если перемешать с методами, которе возвращают не this? тоже легко читается?!

Думаю нет, мне эта идея не по душе. Уж если void, то и не должен ничего возвращать. Но меня не спросят. Сделают - будем пользоваться. smile 


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
Platon
Дата 15.3.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Цитата(serger @  14.3.2008,  07:18 Найти цитируемый пост)
Угу, а если перемешать с методами, которе возвращают не this? тоже легко читается?!

Как вы собираетесь что-то мешать? Методы, которые возвращают не this будут не void.
PM MAIL ICQ   Вверх
LSD
Дата 15.3.2008, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Platon @  15.3.2008,  13:43 Найти цитируемый пост)
Как вы собираетесь что-то мешать? Методы, которые возвращают не this будут не void.

Он имеет в виду, что если в цепочке:
Код

new MyObject().setSection(1).setVolume(14).configureBuild(MyObject.LAZY).... .execute();

попадется, метод который возвращает не void, то результат будет не совсем таким как може показаться на первый взгляд.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Platon
Дата 15.3.2008, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Ха, в таком случае, текущий пример с таким же успехом может возвращать не текущий объект, что нибудь другое, вот execute() к примеру возвращает не MyObject, а результат работы.
В общем, serger, не аргумент.

Это сообщение отредактировал(а) Platon - 15.3.2008, 13:56
PM MAIL ICQ   Вверх
LSD
Дата 15.3.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Platon @  15.3.2008,  13:55 Найти цитируемый пост)
Ха, в таком случае, текущий пример с таким же успехом может возвращать не текущий объект, что нибудь другое, вот execute() к примеру возвращает не MyObject, а результат работы.

В этом случае читаемость тоже будет ужасная. Если вначале цепочки мы конфигурируем один объект, потом получаем другой объект и уже работаем с ним, то это станет источником потенциальных проблем. Т.к. не сразу заметно то место, где от одного объекта перешли к другому. Так лучше не делать.

Одно дело если это применяется к месту. Совсем другое дело когда это можно будет делать повсеместно благодаря тому, что вместо void мы будем получать this.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Platon
Дата 15.3.2008, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Цитата(LSD @  15.3.2008,  15:12 Найти цитируемый пост)
Одно дело если это применяется к месту.

Однозначно к месту!!! Цепочный стиль как рас сделан для удобного письма и чтения.

Мы же все прекрасно понимаем, что даже самое чистое и невинное можно запятнать и опошлить.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1314 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.