Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
public class SomeEntityBean implements javax.ejb.EntityBean {
private boolean loadMember;
private Wrapper list;
/* ... */
public void ejbLoad() {
this.loadMember = false;
load();
}
private void load() {
/* a LOT of code */
String[] attrList = this.loadMember ? a.attrListMember() : a.attrList();
this.list = new Wrapper(attrList);
/* a LOT of code */
}
public Something getSomething() {
/* a LOT of code */
this.loadMember = true;
load();
/* do something with this.list */
this.loadMember = false;
return something;
}
}
Имена персонажей были умышленно изменены.
Разумеется, loadMember больше нигде не используется.
Яркий пример повторного использования кода.
String[] attrList = this.loadMember ? a.attrListMember() : a.attrList();
С тем же успехом заменяется на: String[] attrList = a.attrListMember();
Ибо перед вызовом метода load() из метода getSomething() loadMember всегда тру.
Да и loadMember для меня в данном коде имеет странное назначение.
Да и я не понял, зачем использовать ссылку на вызывающий объект - this. Этот момент прошу пояснить.
возможно a.attrListMember() - долгая операция, или ненужная, если вызов происходит не из getSomething(). Заметим, что метод load вызывается также и из ejbLoad(). Т. о. может это такой хитрый lazy loading?
В следующем не уверен:
Настораживает this.list = new Wrapper(attrList);
Ощущение такое, что программист очень надеется на то, что GC за ним мусор уберет.
Посмотрел что же такое Wrapper - интерфейс. Значит имело место имплементирование
class Wrapper implements java.sql.wrapper
Теперь мы можем получить объект класса.
Можно было бы придумать метод очистки содержимого объекта, а не выделять каждый раз память под новый объект. Если кто минусанет - пишите почему. Мне на карму похуй, хоть в минуса вгоните, мне важно что в коде творится на самом деле.
Да ладно Вам, тут не в этом суть. Хрен с ней с памятью, пусть GC подавиться (я, конечно, тоже обожаю С и привык аккуратно работать с памятью). Как в этом гавне разбираться, вот в чём вопрос.
Что значит "тоже обожаю Си"?
Это простое нормальное отношение к памяти. Да и где вообще логика - постоянно создавать новый объект используя конструктор с параметром. Такое ощущение, что настроить объект иначе - нельзя.
Удивляюсь, Вы всегда обращаете внимание не на то, что Вам пытаются донести. Манипуляции с памятью, на мой взгляд, именно в этом случае интересны в последнюю очередь.
Все-таки думаю, что это жертва рефакторинга (причем не одного). Скорее всего на тот момент нельзя было написать void load(boolean loadMember) {...} и явно вызывать с true или false. Возможно было использование этого флага вне метода load. Потом код рефакторили, и в конце концов все выродилось в то что есть сейчас.
П. С. За ГК не считаю. Я бы ввел термин "Жертва Рефакторинга".
На практике, не всегда все бывает так глядко. Особенно, когда над проектом работает сразу 5-7 человек. Кто-то в рамках своей задачи подрефакторил один маленький кусочек, кто-то другой. А на выходе получается то что имеем.
С тем же успехом заменяется на: String[] attrList = a.attrListMember();
Ибо перед вызовом метода load() из метода getSomething() loadMember всегда тру.
Да и loadMember для меня в данном коде имеет странное назначение.
Да и я не понял, зачем использовать ссылку на вызывающий объект - this. Этот момент прошу пояснить.
ГК, короче.
возможно a.attrListMember() - долгая операция, или ненужная, если вызов происходит не из getSomething(). Заметим, что метод load вызывается также и из ejbLoad(). Т. о. может это такой хитрый lazy loading?
Настораживает this.list = new Wrapper(attrList);
Ощущение такое, что программист очень надеется на то, что GC за ним мусор уберет.
Посмотрел что же такое Wrapper - интерфейс. Значит имело место имплементирование
class Wrapper implements java.sql.wrapper
Теперь мы можем получить объект класса.
Можно было бы придумать метод очистки содержимого объекта, а не выделять каждый раз память под новый объект. Если кто минусанет - пишите почему. Мне на карму похуй, хоть в минуса вгоните, мне важно что в коде творится на самом деле.
Это простое нормальное отношение к памяти. Да и где вообще логика - постоянно создавать новый объект используя конструктор с параметром. Такое ощущение, что настроить объект иначе - нельзя.
как будто сложно, чесслово...
хочу сырцы ЭТОГО: http://esman.su/CopyOnliOnse.png
ладно, хер с ним.
но номерок гетный, опять поне ускакал.
П. С. За ГК не считаю. Я бы ввел термин "Жертва Рефакторинга".