All streams
Search
Write a publication
Pull to refresh
44
0

Разработчик

Send message

Две недели уже Навальный в Германии, а диагноз так и опубликован, следствие не окончено, но "для всех умных людей заказчик очевиден" (с)

Ну не знаю, как по мне принцип единой ответственности и прочее, как и ТБ писаны кровью, чересчур вольное обращение с ними чревато.


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


Бенчмарк показывает существенную дороговизну проекций по сравнению с DTO


                                   (count)       Score      Error   Units

findAllByName                            1      16.188 ±    0.643   us/op
findAllByNameUO                          1      13.991 ±    0.208   us/op
findAllByName                          100     235.077 ±    2.407   us/op
findAllByNameUO                        100      65.713 ±    1.618   us/op

findAllByName:·gc.alloc.rate.norm        1   20842.539 ±   24.394    B/op
findAllByNameUO:·gc.alloc.rate.norm      1   13802.823 ±   29.680    B/op
findAllByName:·gc.alloc.rate.norm      100  519894.926 ± 1588.438    B/op
findAllByNameUO:·gc.alloc.rate.norm    100   41812.605 ±   40.003    B/op

К слову, если в сканере аннотаций ввести ключевое слово volatile в объявление


private Set<String> annotations=null;

то явное присваивание нула (значение поля по умолчанию) нужно выбросить.

Понимаете, какая тут загогулина: фактические userDao.findById(userId) возвращает сущность (если я правильно понял userDao — это реализация JpaRepository).


Теперь представьте, что одним из свойств, входящих во множество, отдаваемое клиенту, является ленивой дочерней сущностью или @Lob. В этом случае мы получим LazyInitException с сообщением "No session", т.к. область действия транзакции прекращается по выходу из findById.


И тут одной из трёх: либо добавлять @Transactional на контроллер, что является грубейшим нарушением принципа разделения слоёв приложения, либо явно загружать ленивую сущность (нужно приседать с графами или явно прописывать fetch), либо возвращать не сущность, а DTO.


Поэтому идея кажется сомнительной, как и внедрение дао/репозиториев в контроллер.

С интернированием есть нюанс: и-ние с помощью String.intern() — это зло, см. https://youtu.be/SZFe3m1DV1A?t=1912


Если очень нужно, то лучше взять самописное решение (есть по ссылке)

Рад, что советы оказались полезными :) Пользуйтесь!

Для хранения цены мы используем тип данных Double, но в реальных проектах вы должны использовать BigDecimal.

Вот не надо так, даже в тестовых проектах лучше сразу вырабатывать привычку и писать в боевом режиме.

не нужны мепперы (филдсет сериализуется автоматически)

Получается, что котроллер фактически отдаёт наружу доменный объект, я правильно понимаю?

Если всё в одной транзакции, то большой разницы по идее быть не должно.

Код в примере с EjbComponentAnnotationScanner очень странный: зачем там вообще нужно ленивое создание? Ради набора из 4 коротких и по умолчанию разных строк? Для этого вовсе не обязательно городить HashSet, Arrays.asList() будет легковеснее, а поиск строки в массиве длинной 4 скорее всего будет быстрее, чем вычисление хэш-кода, потом поиск нужной корзины и сравнение с находящейся там строкой. Объявив поле private volatile Set<String> annotations как private final List<String> annotations мы получим гарантированное безопасное создание и отсутствие волатильного доступа при чтении.

Ого, какой забористый трэш с "Крым.Реалии"


Населения республики на 1 января 2014 года составила 1 958 504 человека. "ООН в одном только 2015 году насчитали 800 тысяч внутренних переселенцев, большая часть — из Крыма" — это значит, что выехало не меньше 400 тыс, получается, ООН считает, что выехала 1/5.


А если мы возьмём данные украинских властей из википедии, то "В 2014—2016 годах, по данным украинских властей, со времени присоединения Крыма к России, с территории полуострова на Украину переселилось 22 437 человек", что составляет аж целых 1.15%.


Далее из вики: По данным украинских властей на 12 августа 2018 года на учёте в качестве «внутренне перемещённых лиц» стоят 33,5 тысяч лиц из Крыма, что составляет аж целых 1.71%.


получении украинского заграна с безвизом

Всё правильно делают, с паршивой овцы — шерсти клок :)

дефолтная конституционность решений Верховной Рады Украины. Но не ВСАРК.

Все животные равны, но некоторые — более равные.

Спецназ и пулемёты — это юридическое подкрепление?

В той же степени, что и коктейли Молотова, горящие покрышки и дубинки.


Это вы про Крым? Не ошибся?

Не ошиблись, я много раз был там "до" и "после". Разница на лицо, а массовой эмиграции в "свободную и евроинтегрированную Украину" от "ужасов оккупации" почему-то не наблюдается. А ФМС украинских нелегалов время от времени выдворят, хотя казалось бы.

ВСУ многократно нарушил действующую конституцию при поддержке народа, ВС АРК сделал то же самое


Интервью читал, честь ему и слава. Обеспечил юридическое подкрепление воли народа, который не захотел более связывать своё будущее с Украиной. Последующие 6 лет убедительно показали, что народ не ошибся.


Я понимаю, что это для вас болезненный и неожиданный сюрприз, но что поделать — так и есть.

Если уж закон превыше воли народа

Я предпочту принять на вооружение ваш тезис о том, что источником власти является народ, а не Конституция.

В обоих случаях не имел, но раз в первом случае воля народа важнее, то можно применить этот же подход ко второму случаю.

Решение приняли депутаты ВС АРК.


А вы уверены, что точно и правильно понимаете смысл слова «суверенитет»?

Конечно, декларация про суверенитет УССР была принята в 16.07.1990, но ещё более года она была частью СССР.

Information

Rating
Does not participate
Registered
Activity