powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Создание объекта в конструкторе
25 сообщений из 25, страница 1 из 1
Создание объекта в конструкторе
    #39909852
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Необходимо с помощью метода getEventEntity() получать объект класса EventEntity. При 1-м вызове getEventEntity() объект должен прочитаться из базы через EventDAOFactory.getInstance().getByType(eventType) и сохраниться в поле eventType. Дальнейшие вызовы метода должны возвращать значение поля eventEntity.

Придумал два варианта: 1-е чтение из конструктора и 1-е чтение через синхронизированный метод.
Какой вариант предпочительнее?


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class BaseEvent extends Event {

    private final EventType eventType;
    private EventEntity eventEntity;

    public BaseEvent(EventType eventType) {
        this.eventType = eventType;
    }

    public synchronized EventEntity getEventEntity() throws DAOException {
        return eventEntity == null
                ? eventEntity = EventDAOFactory.getInstance()
                        .getByType(this.eventType)
                : eventEntity;
    }

}


или
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public class BaseEvent extends Event {

    private final EventEntity eventEntity;

    public BaseEvent(EventType eventType) throws DAOException {
        this.eventEntity = EventDAOFactory.getInstance().getByType(eventType);
    }

    public EventEntity getEventEntity() {
        return eventEntity;
    }

}
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909855
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предпочтительнее тот что без багов и выполняющий свою задачу, при этом работающий в соотвествии с нефункциональными требованиями.

Уже вроде не первый год на форуме этом, уже пора научиться правильно задавать вопросы
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909856
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar,
Конечно без синхронизации. Ты же не даказал что она нужна. А без нужды это тормоза.
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909857
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,
+1
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909859
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
Предпочтительнее тот что без багов и выполняющий свою задачу, при этом работающий в соотвествии с нефункциональными требованиями.

Уже вроде не первый год на форуме этом, уже пора научиться правильно задавать вопросы

Оба варианта без багов и выполняют свою задачу.
Лаконичнее и быстрее 2-й вариант, но смущает выбрасывание исключения в конструкторе при обращении к БД.
Т.е. что правильнее: ловить исключение при создании объекта или вызове метода?
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909862
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Molasar,
Конечно без синхронизации. Ты же не даказал что она нужна. А без нужды это тормоза.


Синхронизация нужна, т.к. возможен вызов метода из 2-х и более мест в коде.
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909870
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar


Синхронизация нужна, т.к. возможен вызов метода из 2-х и более мест в коде.

И как по-твоему синхронизация тебе поможет?
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909873
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar

Т.е. что правильнее: ловить исключение при создании объекта или вызове метода?

Правильнее ловить исключение там где можно его обработать. Тебе лучше знать какой код юзает твой функционал. стань на место девелопера, который вынужден вызывать твой код
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909877
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar
PetroNotC Sharp
Molasar,
Конечно без синхронизации. Ты же не даказал что она нужна. А без нужды это тормоза.


Синхронизация нужна, т.к. возможен вызов метода из 2-х и более мест в коде.

Прогеры не пишут на слово "возможен".
Они делают эту ситуацию чтобы тестировать.
Показывай, как могут из двух мест вызвать хибер код.
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909880
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp

Показывай, как могут из двух мест вызвать хибер код.

Тут интереснее услышать какие могут быть проблемы при чтении рид-онли стейта из базы данных
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909886
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,
А я до этого даже не дошел)))).
Я смысл вопроса пока не уловил))
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909887
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
PetroNotC Sharp

Показывай, как могут из двух мест вызвать хибер код.

Тут интереснее услышать какие могут быть проблемы при чтении рид-онли стейта из базы данных

Два потока одновременно вызывают getEventEntity() у одного и того же экземпляра класса, оба попадают на eventEntity == null.
Сначала один поток прочитал одно значение, потом произошли изменения в БД, далее 2-й поток прочитает уже другое значение.
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909889
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
забыл ник,
А я до этого даже не дошел)))).
Я смысл вопроса пока не уловил))

Смысл вопроса в том, правильно ли в конструкторе создавать объекты, при этом читая их из БД?
Или сначала конструктор, а потом геттером или сеттером создать объект?
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909892
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar,
Пока нет смысла вопроса.
Откуда потоки в ОРМ?
Если брать хибер, то там потоки не так разруливаются.
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909893
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar

Два потока одновременно вызывают getEventEntity() у одного и того же экземпляра класса, оба попадают на eventEntity == null.
Сначала один поток прочитал одно значение, потом произошли изменения в БД, далее 2-й поток прочитает уже другое значение.

А теперь плавно переходим к вопросу - если есть возможность что данные меняются - то на кой их кэшировать в памяти? м?
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909895
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar,

Свой ОРМ строим?
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909896
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
забыл ник,
А я до этого даже не дошел)))).
Я смысл вопроса пока не уловил))

Смысл вопроса в том, что "слышал про потокобезопасность, перфоманс и что они как-то связаны, но особо не понял, памагити"

Первое что надо это сделать это нарисовать в голове схемы взаимодействия. Кто как и когда меняет данные, какие у них инварианты и как их можно нарушить. Потом подумать надо ли их синхронизировать вообще, и только потом уже можно думать о скорости выполнения.
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909899
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
Molasar

Два потока одновременно вызывают getEventEntity() у одного и того же экземпляра класса, оба попадают на eventEntity == null.
Сначала один поток прочитал одно значение, потом произошли изменения в БД, далее 2-й поток прочитает уже другое значение.

А теперь плавно переходим к вопросу - если есть возможность что данные меняются - то на кой их кэшировать в памяти? м?

Важно, чтобы было сохранено значение после первого чтения из БД.
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909904
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar
забыл ник
пропущено...

А теперь плавно переходим к вопросу - если есть возможность что данные меняются - то на кой их кэшировать в памяти? м?

Важно, чтобы было сохранено значение после первого чтения из БД.

Куда? Зачем?
Прогеру важно быстрее отдать что прочитал.
Зы. Строим новый ОРМ.
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909922
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar

Важно, чтобы было сохранено значение после первого чтения из БД.

Важно кому?
Хорошо, раз ты упорствуешь, переходим к следующему вопросы - что такое первое чтение? Как ты отличишь первое от второго? Допустим, поток послал запрос в базу и ждет, пришел второй - послал запрос сразу получил ответ проинициализировал объект. тут просыпается первый... Так какое чтение первое?:)
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909924
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну это если не касаться вопроса - почему же все-таки первое чтение важно, а второе уже нет и его можно закэшировать, даже нафантазировать такой кейс не могу(в многопоточной среде)
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909934
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO

пример из стартового поста автора похож на какой-то недо-синглетон
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909942
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
Molasar

Важно, чтобы было сохранено значение после первого чтения из БД.

Важно кому?
Хорошо, раз ты упорствуешь, переходим к следующему вопросы - что такое первое чтение? Как ты отличишь первое от второго? Допустим, поток послал запрос в базу и ждет, пришел второй - послал запрос сразу получил ответ проинициализировал объект. тут просыпается первый... Так какое чтение первое?:)

Тяжело общаться начинающим с академиками) Как всегда все ваши наводящие вопросы заставляют более глубже проникать в задачу. На этом спасибо.

Я неправильно сформулировал вопрос. Я больше спрашивал про то, стоит ли усложнять конструктор инициализацией объектов с чтением из БД.
Ответ: не стоит. Лучше простой конструктор и далее через методы.

Ваши замечания относительно synchronized.. пока не могу ответить, т.к. не знаю точно, как будет использоваться мой код.
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909953
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, теперь поел разговор по делу)
Molasar

Я неправильно сформулировал вопрос.

Хорошо, что осознал. На самом деле самое главное умение для программиста - правильно задать вопрос.

Molasar

Я больше спрашивал про то, стоит ли усложнять конструктор инициализацией объектов с чтением из БД.

В отрыве от контекста - скорее всего не стоит, но не исключаю что такие случаи возможны. Надо смотреть код в целом и как его будут юзать. Допустим чтение десятка справочников которые ридонли может и имеет смысл. или заполнение кэша или еще что.


Molasar
Ответ: не стоит. Лучше простой конструктор и далее через методы.

Да, так проще и понятнее по дефолту. К конструктору можно прибешать если только очень надо и доказано самому себе что по-другому никак.

Molasar

Ваши замечания относительно synchronized.. пока не могу ответить, т.к. не знаю точно, как будет использоваться мой код.

Вот, поэтому и были все эти намеки. Когда будут конкретные ответы - возвращайся. По дефолту - синхронизация не нужна если не доказано обратное.
...
Рейтинг: 0 / 0
Создание объекта в конструкторе
    #39909954
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar,
В общем случае, конструктор лучше всегда без ошибок. А это значит, никаких чтений из внешних мест.
Лучше потом init() метод.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Создание объекта в конструкторе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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