|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
Всем привет! Необходимо с помощью метода 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.
или Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 14:08 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
Предпочтительнее тот что без багов и выполняющий свою задачу, при этом работающий в соотвествии с нефункциональными требованиями. Уже вроде не первый год на форуме этом, уже пора научиться правильно задавать вопросы ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 14:17 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
Molasar, Конечно без синхронизации. Ты же не даказал что она нужна. А без нужды это тормоза. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 14:19 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
забыл ник, +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 14:19 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
забыл ник Предпочтительнее тот что без багов и выполняющий свою задачу, при этом работающий в соотвествии с нефункциональными требованиями. Уже вроде не первый год на форуме этом, уже пора научиться правильно задавать вопросы Оба варианта без багов и выполняют свою задачу. Лаконичнее и быстрее 2-й вариант, но смущает выбрасывание исключения в конструкторе при обращении к БД. Т.е. что правильнее: ловить исключение при создании объекта или вызове метода? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 14:25 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Molasar, Конечно без синхронизации. Ты же не даказал что она нужна. А без нужды это тормоза. Синхронизация нужна, т.к. возможен вызов метода из 2-х и более мест в коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 14:27 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
Molasar Синхронизация нужна, т.к. возможен вызов метода из 2-х и более мест в коде. И как по-твоему синхронизация тебе поможет? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 14:37 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
Molasar Т.е. что правильнее: ловить исключение при создании объекта или вызове метода? Правильнее ловить исключение там где можно его обработать. Тебе лучше знать какой код юзает твой функционал. стань на место девелопера, который вынужден вызывать твой код ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 14:39 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
Molasar PetroNotC Sharp Molasar, Конечно без синхронизации. Ты же не даказал что она нужна. А без нужды это тормоза. Синхронизация нужна, т.к. возможен вызов метода из 2-х и более мест в коде. Прогеры не пишут на слово "возможен". Они делают эту ситуацию чтобы тестировать. Показывай, как могут из двух мест вызвать хибер код. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 14:41 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Показывай, как могут из двух мест вызвать хибер код. Тут интереснее услышать какие могут быть проблемы при чтении рид-онли стейта из базы данных ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 14:44 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
забыл ник, А я до этого даже не дошел)))). Я смысл вопроса пока не уловил)) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 14:51 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
забыл ник PetroNotC Sharp Показывай, как могут из двух мест вызвать хибер код. Тут интереснее услышать какие могут быть проблемы при чтении рид-онли стейта из базы данных Два потока одновременно вызывают getEventEntity() у одного и того же экземпляра класса, оба попадают на eventEntity == null. Сначала один поток прочитал одно значение, потом произошли изменения в БД, далее 2-й поток прочитает уже другое значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 14:54 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
PetroNotC Sharp забыл ник, А я до этого даже не дошел)))). Я смысл вопроса пока не уловил)) Смысл вопроса в том, правильно ли в конструкторе создавать объекты, при этом читая их из БД? Или сначала конструктор, а потом геттером или сеттером создать объект? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 14:56 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
Molasar, Пока нет смысла вопроса. Откуда потоки в ОРМ? Если брать хибер, то там потоки не так разруливаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 15:00 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
Molasar Два потока одновременно вызывают getEventEntity() у одного и того же экземпляра класса, оба попадают на eventEntity == null. Сначала один поток прочитал одно значение, потом произошли изменения в БД, далее 2-й поток прочитает уже другое значение. А теперь плавно переходим к вопросу - если есть возможность что данные меняются - то на кой их кэшировать в памяти? м? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 15:00 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
Molasar, Свой ОРМ строим? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 15:01 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
PetroNotC Sharp забыл ник, А я до этого даже не дошел)))). Я смысл вопроса пока не уловил)) Смысл вопроса в том, что "слышал про потокобезопасность, перфоманс и что они как-то связаны, но особо не понял, памагити" Первое что надо это сделать это нарисовать в голове схемы взаимодействия. Кто как и когда меняет данные, какие у них инварианты и как их можно нарушить. Потом подумать надо ли их синхронизировать вообще, и только потом уже можно думать о скорости выполнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 15:03 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
забыл ник Molasar Два потока одновременно вызывают getEventEntity() у одного и того же экземпляра класса, оба попадают на eventEntity == null. Сначала один поток прочитал одно значение, потом произошли изменения в БД, далее 2-й поток прочитает уже другое значение. А теперь плавно переходим к вопросу - если есть возможность что данные меняются - то на кой их кэшировать в памяти? м? Важно, чтобы было сохранено значение после первого чтения из БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 15:06 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
Molasar забыл ник пропущено... А теперь плавно переходим к вопросу - если есть возможность что данные меняются - то на кой их кэшировать в памяти? м? Важно, чтобы было сохранено значение после первого чтения из БД. Куда? Зачем? Прогеру важно быстрее отдать что прочитал. Зы. Строим новый ОРМ. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 15:17 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
Molasar Важно, чтобы было сохранено значение после первого чтения из БД. Важно кому? Хорошо, раз ты упорствуешь, переходим к следующему вопросы - что такое первое чтение? Как ты отличишь первое от второго? Допустим, поток послал запрос в базу и ждет, пришел второй - послал запрос сразу получил ответ проинициализировал объект. тут просыпается первый... Так какое чтение первое?:) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 15:41 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
ну это если не касаться вопроса - почему же все-таки первое чтение важно, а второе уже нет и его можно закэшировать, даже нафантазировать такой кейс не могу(в многопоточной среде) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 15:43 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
IMHO пример из стартового поста автора похож на какой-то недо-синглетон ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 16:02 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
забыл ник Molasar Важно, чтобы было сохранено значение после первого чтения из БД. Важно кому? Хорошо, раз ты упорствуешь, переходим к следующему вопросы - что такое первое чтение? Как ты отличишь первое от второго? Допустим, поток послал запрос в базу и ждет, пришел второй - послал запрос сразу получил ответ проинициализировал объект. тут просыпается первый... Так какое чтение первое?:) Тяжело общаться начинающим с академиками) Как всегда все ваши наводящие вопросы заставляют более глубже проникать в задачу. На этом спасибо. Я неправильно сформулировал вопрос. Я больше спрашивал про то, стоит ли усложнять конструктор инициализацией объектов с чтением из БД. Ответ: не стоит. Лучше простой конструктор и далее через методы. Ваши замечания относительно synchronized.. пока не могу ответить, т.к. не знаю точно, как будет использоваться мой код. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 16:13 |
|
Создание объекта в конструкторе
|
|||
---|---|---|---|
#18+
Ну вот, теперь поел разговор по делу) Molasar Я неправильно сформулировал вопрос. Хорошо, что осознал. На самом деле самое главное умение для программиста - правильно задать вопрос. Molasar Я больше спрашивал про то, стоит ли усложнять конструктор инициализацией объектов с чтением из БД. В отрыве от контекста - скорее всего не стоит, но не исключаю что такие случаи возможны. Надо смотреть код в целом и как его будут юзать. Допустим чтение десятка справочников которые ридонли может и имеет смысл. или заполнение кэша или еще что. Molasar Ответ: не стоит. Лучше простой конструктор и далее через методы. Да, так проще и понятнее по дефолту. К конструктору можно прибешать если только очень надо и доказано самому себе что по-другому никак. Molasar Ваши замечания относительно synchronized.. пока не могу ответить, т.к. не знаю точно, как будет использоваться мой код. Вот, поэтому и были все эти намеки. Когда будут конкретные ответы - возвращайся. По дефолту - синхронизация не нужна если не доказано обратное. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 16:32 |
|
|
start [/forum/topic.php?fid=59&msg=39909942&tid=2120968]: |
0ms |
get settings: |
17ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
145ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
380ms |
get tp. blocked users: |
1ms |
others: | 6ms |
total: | 560ms |
0 / 0 |