24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
Программирование - это не столько про анальное крудошлёпство, сколько про стиль мышления. Высокоуровневая абстракция, поиск сходных черт, оптимизация - всё это высшие интеллектуальные способности, что образуют такой прочный симбиоз с программированием на Java.
- - - - 2. На днях буду изучать spring, после буду проект писать для интервью. Скажите, на spring только сайты пишут ? Или можно лаунчер для майнкрафта написать ?
- - - - 3. Аноны, есть две @Entity, скажем Person, с полями name и age, Payment с полями employeeName и amount. Как мне через JPA получить третий объект, представляющий джоин этих двух энтити?
- - - - 4. Пачиму нельзя скопировать модуль расширения dashchan встроенной функцией идеи? Выдает ошибку Error adding module to project, причём без какой-либо дополнительной инфы. Зато если в полу-ручном режиме скопировать папку и переименовать там классы с файлами, то всё работает как положено
- - - - 5. Посоветуйте, пожалуйста, хорошую книгу, чтобы понять ООП и объектный дизайн.
Пишу полтора года на спринге. С бд работаю на jooq. Думаю менять работу. Стоит выдрачивать хибер? Неохота прям сильно, но в большинстве вакансий хибер. Что еще надо на мидла?
>>2596735 Ну даже если мы предположим, что хибер есть только на легаси проектах, то легаси большинство. Ну и кстати вопрос, сильно будет после пиления нескольких микросервисов почти с нуля садиться на легаси с монолитом/микросервисами/распределенным монолитом?
>>2596748 У именно меня от светлой глаза устают. Все коллеги используют темную. Но насколько я понимаю, это индивидуально. Я себе темную поставил везде и в идее и в мессенжерах и в ос. Пробовал даже расширение для браузера, чтобы на страницах фон перекрашивало - плохо работает.
Аноны, вопрос к вам. Скоро хочу пойти и попробоваться на собесах, при себе есть один проект на гитхабе, в котором используются практически все технологии, которые знаю, но есть проблема: этот проект хуйня без задач и я вообще не ебу как его преподнести. Если вкратце, там можно оставлять комменты на отдельной странице, есть админка с возможностью редачить комменты или удалять, есть более менее норм секурити с возможностью входа через ауф, небольшой парсер новостей на главной, который далеко не идеально работает, но все же, еще пара страниц чисто для вида, типо страницы с моими линками и все. Я даже не ебу как мне этот проект описать одним словом, когда спросят, разве что начать называть сразу какие технологии там используются и какие фичи есть. Мне кажется это проблема, ведь собеседующий может посчитать, что я сделал какую-то залупу хуй знает зачем хотя на деле так оно и есть А если спросят про пользу, которую он приносит, мне на это тоже нечего ответить, даже общаться там проблематично в комментах, ибо сделан он на таймлифе. Короче хэлпуйте, может можно все-таки как-то подать этот проект, будто он совсем не бесполезный и даже имеет коммерческую перспективу это же вроде как важно заново выдумывать что-то и переписывать конечно впадлу, я на него прилично времени убил
>>2596954 так а в чем преимущество? я не понимаю. я сам не знаю так ли это, но логически если подумать, мне кажется, чем конкретнее указываешь компилятору какой тип использовать, тем более он тебе оптимизирует байт код.
>>2596965 Чтобы не писать методы для работы с каждым классом. К примеру, если пишешь калькулятор, то пришлось бы писать отдельный метод для сложения int и отдельно для double.
>>2596936 Мое мнение, что клауд не нужен вообще. С нулевыми знаниями секурити тоже можно найти место. Но лучше быть готовым что на тестовом дадут минимальную авторизацию с basic auth. https://www.youtube.com/watch?v=7uxROJ1nduk вот этого видоса будет за глаза.
>>2596982 Ваадин что-то типа WebForms, создаёт высокоуровневый абстракции над вебом, чтобы приблизить работу к десктопу. В итоге гоняет тяжёловесные пакеты между фронтом и бэком. Блейзор же - результат длительной эволюции фреймворков на базе ASP.NET. Он не скрывает детали реализации. Можно напрямую писать html, создавать свои компоненты. Это полноценная альтернатива фреймворкам типа реакта и ангуляра.
>>2596995 Можно напрямую писать html, создавать свои компоненты. То есть это шаблонизатор что-ли ебучий просто прокаченный? Нахуй он тогда нужен? Анону нужно на ресте практиковаться.
>>2596995 >в петушарп завезли тормозящий сахар рррррряя, питушарп лучший, сахарок, никакого бойлерплейта! >в петушарп не завезли тормозящий сахар ррррря, чё, не мужик что ли?))0))0 зачем тебе тормозящие пакеты какие то гонять? деды на голом хтмл писали и мы будем))00)
>>2597008 Там два варианта. Есть серверный, где клиент все нажатия кнопочек отсылает на сервер. И веб-ассембли, который полностью работает на стороне клиента. Преимущество в том, что пишешь на сишарпе и не надо учить жс/тс. Если собираешь в фуллстеки, то сразу учи жс/тс.
>>2596997 >Я даже не ебу как мне этот проект описать одним словом, когда спросят, разве что начать называть сразу какие технологии там используются и какие фичи есть. Никто ничего не спросит с вероятностью 90%. А если спросят, то только про технологии которые трогал в пете, про пользу это шиза. Если у тебя ненужные технологии типа шаблонизаторов, то страдай. Ну и просто акцентируй внимания на других технологиях из пета, более актуальных, связанных с бд например.
>>2597017 Ебаться с жс/тс - намного более адекватное вложение времени, чем вкладывать его в веб ассемблер, шаблонизатор и библиотеку-обертку для них, типа твоего вишневого блейзера.
Как я могу получить ауфентикационный юзернейм внутри метода commence(...) AuthenticationEntryPoint? httpServletRequest.getUserPrincipal() и SecurityContextHolder.getContext().getAuthentication() возвращают null.
бэкендщику надо знать про реакт и прочее гомопидорство? как происходит разработка в реальном проекте? сначала бекенд пишут, роуты, только потом фронтендщик сам подстраивается? или бекендщик подстраивается? или все роуты обговариваются заранее?
>>2597105 > бэкендщику надо знать про реакт и прочее гомопидорство? Нет. > сначала бекенд пишут, роуты, только потом фронтендщик сам подстраивается? или бекендщик подстраивается? или все роуты обговариваются заранее? Бэкендер продумывает ручки и дтохи, описывает их фронтендеру. Дальше пилят параллельно, бэкендер пишет логику, фронтендер красит кнопки и дёргает ручки.
>>2597017 >>Преимущество в том, что пишешь на сишарпе и не надо учить жс/тс. Я пишу на джаве и мне тоже не надо учить жс/тс. Для этого фронты есть. >>фуллстеки 2 мидла по цене одного, еще и дорогим сенькой никогда не станет
>>2597121 >фронтендер красит кнопки Вот ты пренебрежительно относишься к работе фронтендера, типа легкая хуйня их работа, но ведь на деле современный фронтенд будет посложнее бека.
> бэкендщику надо знать про реакт и прочее гомопидорство?
Знать штуки всегда лучше чем не знать штуки. Ауф.
>как происходит разработка в реальном проекте?
По всякому. Иногда идут от бэкенда. Иногда оба идут от API (spec-first). А иногда (вот как у нас, например), бэк и фронт идут вслепую параллельно, а потом начинается баттл-рояль под названием "интеграция фронта с бэком".
>>2597373 Спасибо, но я немного обьебался конечн, постоянно выкидывало из аккаунта внутри приложения, как я понял, это из-за того, что я сделал скейл на три инстанса на всякий, а айди сессии спринг хранит подефолту в какой-то коллекции внутри приложения я это не менял и когда перекидывало на другой инстанс, происходил редирект на логин пейдж опять. Еще сейчас понял, что сисрф задезейблен был и можно было б базу засрать через постман какой-нибудь тк валидация быоа только на формах стоит.
>>2596875 Ты не бизнес менеджер, чтоб создавать успешный коммерческий продукт. Так и преподноси, что это проект для оттачивания навыков и демонстрации разных технологий. А вот то что там общаться проблематично, это минус и претензия к тебе. То что используется таймлиф - не оправдание, зачем тогда выбрал эту технологию?
>>2597501 >Ты не бизнес менеджер, чтоб создавать успешный коммерческий продукт Да сейчас с большой неохотой берут без коммерческого опыта, а если кандидат хороший, но нигде до этого не работал, пытаются выдать его пет проект за этот опыт. У меня знакомого об этом примерно спрашивали на собесе, видимо все-таки это немаловажно.
>используется таймлиф - не оправдание Ну у меня скорее оправдание, что вкатываться в реакт как-то не хочется, убьет много времени и ничего вообще не даст в перспективе, поэтому пошел по легкому пути, который сейчас является узким горлом в моем проекте и не дает реализовывать все идеи в полной мере.
>как хостил? Просто в кубер закинул, который в отечественном клауде создал, не уверен на счет того, что так можно и нужно делать, но сделал как умею
>>2597552 >пытаются выдать его пет проект за этот опыт Это будет когда ты уже трудоустроишься и твоя аутсорс компания будет пытаться продать тебя иностранному заказчику, думаю тебе помогут с этим. А в саму компанию, в которую ты устраиваешься, нет смысла делать вид что ты сделал какой-то реальный коммерческий продукт
Я знаю как профилировать обычную программу, есть ли для веб сервисов особые профайлеры, которые как нибудь с жизненным циклом запроса интегрируются, например?
Что если у меня периодически какой-то запрос очень медленно выполняется? Только логи, метрики, инструментация в попытке найти зловредный тесткейс, или есть что-то более продвинутое? А если замедло плавающее и не зависит однозначно от параметров запроса, и локально не воспроизводится?
Я знаю как это делать по принципу здравого смысла, ака смотреть на базу в первую очередь, логи писать итд, мне интересно что вы делаете когда совсем пизда
чувствую хуйню какую-то сделал, но не знаю как лучше идея в том, что я не могу использовать 1 составную таблицу (movie и person), потому что один person может быть в одном фильме и актером, и режиссером (как пример). поэтому комбинации movie_id и person_id бы повторялись, но в таком случае нельзя было бы идентифицировать по роли person. тогда можно было бы добавить 3 колонку role_type (varchar или указывать id роли), но тогда не понятно какой составной PK делать. а PK по 3 столбцам нельзя делать (вроде)
>>2597843 т.е. вот так сделать... но как я уже сказал, составной PK не сделать в таблице movie_person но нужен ли он там вообще? я руководствуюсь лишь тем, чтобы не было дубликатов в таблице, чтобы это сделать, нужно определить PK в ней по нескольким столбцам. по всем трем нельзя. по 2 не получится тоже, потому что это не даст одному и тому же фильму с одним и тем же person создавать разные роли
>>2597843 >>2597847 >>не понятно какой составной PK делать Просто сделай суррогатный ключ и ограничение уникальности по 3 полям, not_null для каждого не забудь UNIQUE (movie_id, person_id, role_id)
>>3 колонку role_type (varchar или указывать id роли), лучше ид, если роли могут добавляться/меняться
>>нужен ли он там вообще? Теория реляционных баз данных говорит, что первичный ключ должен быть в каждой таблице. В Postgres такого жёсткого требования нет, но обычно лучше ему следовать.
>>2597847 Чел, делай всегда primary key как рандомный UUID и все твои проблемы решатся. А на столбцы, если надо будет как-то часто искать по ним, индексы просто повесишь и все. Вторая картинка выглядит лучше первой, потому что в профиле человека ты сможешь легко собрать все его роли.
>>2597861 >Examples of such Garbage Collection roots are: >Local variables and parameters of the currently executing methods Кек, на последнем собесе так и сказал, а мне в ответ "Неееет, гк работает только с хипом! Неверно!".
>>2597950 Без понятия. Спроси у шарпопетуха зачем он какой-то стремный web-ui костыль постоянно тащит, как достижение. Хотя им даже в его дотнете никто не пользуется - на 700 вакух на асп.нет блейзер есть в 40.
>>2597947 Да. Контекст это механизм, реализующий di паттерн. Контекст - это основной функционал спринга, с которого он и начинался 20 лет назад. И сейчас его функционал лежит в артефакте spring-core
поясните за микросервисы. допустим 1. у меня есть клиент, который хочет получить данные из бд 2. чтобы он это мог сделать, ему необходимо отправить куда-то запрос 3. предположим, этот запрос принял контроллер, осуществил запрос к бд и вернул ответ
таково мое понятие контроллера. т.е. это что-то, что получает запрос и дает ответ. но что в случае с микросервисами? у нас может быть много этих контроллеров, которые могут быть как-то связаны между собой. и тут уже может быть не просто запрос-ответ, а цепочка запрос-перенаправление-перенаправление-ответ... в таком случае, эти перенаправления, их выполняют те же контроллеры? или тут уже нужна какая-то новая прослойка, которая будет этим наниматься?
какие вообще есть простые архитектуры для того, чтобы можно было познакомиться с микросервисами и написать свой?
А VSCode для джавы это мем? В том же питоне, особенно в дарте, очень хорошо себя показывает. Неужели как с шарпом придётся использовать жирный кал вижуал студии, только теперь она будет зваться интелькой?
>>2589889 → не знаю чел, тут ты или нет. я только сейчас созрел, чтобы на более реалистичном примере написать микруху (1 пик представление 3 разных бд для ms1, ms2, ms3)
что имеем: 1. решил пока оставить прошлую архитектуру (пик 2), как я понял она называется Database Per Service 2. rest по фильмам (ms1) имеет зависимость от rest по статике (ms3) 3. rest по юзерам (ms2) имеет зависимость от ms1 и от ms3 (аватар юзера) 4. если гость (не пользователь) захочет посмотреть первые 10 фильмов, он делает запрос на ms1 - ms1 нужно сформировать запрос, чтобы получить все, что связано с фильмами, но для этого нужно так же обратиться к ms3 за постером, скриншотами и трейлерами - заранее этот запрос на ms3 отправить нельзя, не зная какие фильмы вернет ms1 - остается ждать ответа от ms1 и делать запрос следом на ms3 (на этом этапе пользователь получает только название фильма, имена актеров, режиссеров с затычками вместо медиа данных) - после чего выполняется запрос на ms3 для получения медиа-данных - в итоге двойной запрос, долго, вся хуйня, но я для простоты оставлю наверное пока это так... - но возникает еще вот что, трейлеры могут весить под сотку мб, их может быть несколько, в таком случае ждать их полной отправки - это еще больше потраченного времени - от сюда выходит, что хранить большие сырые данные в бд не лучший вариант - что можно в таком случае сделать? я добавил поле url, но не знаю как на практике это все правильно согласовать с микросервисами. этот url уже должен содержать путь к файлу, который должен храниться где-то? в каком-то облаке? это облако не должно относиться к моей микросервисной архитектуре? оно просто где-то там существует, как файлопомойка?
5. как вариант, добавить прослойку API (пик 3). этот паттерн называется API Composition. но что он улучшает? как по мне, он только усугубляет мою ситуацию с запросами. но может быть я его не правильно как-то пынемаю... 6. по поводу кафки и прочих MQ, разве это не есть ничто иное, как таже самая API прослойка, которая в зависимости от реализации, может так же быть хранилищем очередей запросов, за которыми сервисы будут в нее обращаться? опять же, что тогда в моей ситуации меняется? 7. вариант с дублированием таблиц из ms1 в ms2, или из ms3 в ms1 для меня кажется бессмысленным... в чем тогда суть микросервиса?
в общем, реквестирую советы, как можно несложно изменить архитектуру, при этом сохранив принцип микросервиса. моя задача: сделать пет проект, который я планирую в будущем показывать на собесах. поэтому делать один rest с одной db и одним web клиентом, как мне кажется, не раскрывает суть проекта. с другой стороны, нужно ли вообще это все работодателю? и может быть действительно достаточно ограничиться одной бд, одним рестом и одним клиентом? честно, я даже не знаю что вообще можно добавить в мою логику приложения и вынести это в отдельный сервис, с которым было бы проще работать...
все примеры в сети, которые пишут люди, построены именно так: один клиент (чаще даже вообще без него), один рест и 1 бд...
>>2598202 > оракл через консольку? Чо там в консольке можно делать? Писать запросы, редактировать таблицы мышкой. > в вебсфере нет стандартного способа дебага? Есть какая-то древняя IDE от IBM, только ну её нахуй.
Аноны хэлпуйте, спрашивали на собесе про план запросов, а я про него впервые услышал вообще, там сложно разобраться? Что вообще вкатышу там знать надо?
>>2598288 ну типо я щас читаю, там можно в постгресе эксплеин нажать и тебе напишет, как запрос будет происходить подробно, типо это полезно для анализа, наверное. вроде этот план можно даже в каких-то субд менять, но как я понял в их число постгрес не входит
выглядит вроде как хуйня, щас мож за вечерок разберусь
алсо понял, что вообще пропустил тему с индексами в бд, надеюсь там тоже немного
>>2598199 я сейчас задумался: а надо ли вообще писать микросервис в качестве пет проекта, чтобы взяли джуном??? что-то я вообще не хочу с ними на своем этапе сталкиваться... а писать "микросервис", у которого 1 rest api лежит прослойкой между клиентом и базой данных, как-то стыдно...
>>2598269 Вот забыл разраб создать индекс на нужные столбцы, пишет запрос, понимает, что тот работает медленно, смотрит план запроса и видит "full scan" на каких-то атрибутах из where. Создаёт индексы на эти столбцы, в плане уже "index range scan", работает намного быстрее, заебись, не надо обходить всю таблицу целиком. Это только в хеллоуворлдах создание индексов тривиально, но не в легаси говне с тысячей таблиц, в некоторых из которых по 50 столбцов. Да и индексы не бесплатны.
Есть кучка soap ендпоинтов, для каждого эндпоинта сделал по своему конфигу в котором свои маршалы и анмаршелы и прочее. Всё работает, но меня смущает что у меня генерится дохуя этих фабрик и ещё какой-то пароль кидает в логи. Это нормальный подход или нужно на похуях всё в одну папку закинуть и чтобы одна фабрика разбиралась со всем?
https://habr.com/ru/post/682720/ >Минутка рекламы закончена. В этот момент вы должны понять, что Docker — это хорошо, а если не поняли — закрыть статью, отформатировать свой жесткий диск и пойти мести крыши.
имагинирую ебало этого агрессивного чсвшного прыщавого додика, писавшего в этот момент эту хуету
>>2597948 А ты уверен что правильно понял смысл этой цитаты и правильно ее передал на собесе?
В цитате сказано, что локальные референсы являются источниками сборки мусора. Тот факт что они являются источниками, еще не означает то, что сборщик мусора их собирает
>>2598365 Рофл в том, что эта омежка агрессивная даже сама не поняла, как начала брызгать слюной. Даже, если не слюной, небольшой мондраж и постукивание зубами точно были. Почитай статью, там где он специально рофлит, сразу заметно по хуевому пикабушному чувству юмора. Если человек :) использует, это уже звоночек...
>>2598369 У меня были пару собесов до этого, везде спрашивали с чем работал, говорил с рестом всегда, когда молчал про соап говорили плоха. А вообще ща такие клиенты, ты вот обмажся рестами, но когда тебе 10 страховых компаний кидают только wsdl и xsd чтобы ты соап запросы им делал, то хуй им чё скажешь
>>2598376 На "проекте с соапами" есть давно устоявшийся подход, где никто не задаётся вопросами о фабриках и нормальных подходах, потому что конфиги написали динозавры 15 лет назад, а остальные просто делают всё по аналогии до тех пор, пока изживший себя соап окончательно не выпилят из проекта. >>2598390 Вызывать готовые соап-сервисы легко, там не нужно знать, как писать их самому.
>>2598442 На Википедии всё написано. IoC - это подход большинства фреймворков, когда в начале развешиваешь коллбеки и другие компоненты и дальше вызываешь main loop, который начинает обрабатывать события и сам вызывает методы твоих компонентов. DI - разновидность IoC, где компоненты указывают, какие ещё компоненты им нужны для работы, а фреймворк их ищет и передаёт компонентам так, чтобы компоненту не нужно было самому создавать и инициализировать другие компоненты и можно было сразу писать логику.
Подскажите пожалуйста. Есть приложение на javafx. Его возможно запаковать таким образом, чтобы был один файл, который бы содержал в себе уже все необходимое для работы (без установки)? Про то как запустить на разных ОС (с установкой) я так понимаю тут написано https://docs.oracle.com/javafx/2/deployment/self-contained-packaging.htm Возможно ли запаковать jar в apk для установки и запуска на android?
>>2598744 >>2598738 >>2598736 Сука, так оно и раньше было! Впрочем, не отменяет то, что нажать на большую кнопку удобнее, да и на дурак хд мониторе места не занимает лишнего меню с мавеном.
кто-нибудь использовал seata для реализации саги в микросервисах? как оно? про нее инфы нет почти, никто не обсуждает, статьями с ней не срут. неужели никто ее не использует? есть ли какие-то более известные аналоги? и что делать, когда видишь пикрил?
>>2599032 вот только примеров почему-то нигде нет. зато 1001 статья создания "микросервиса" с одной апишкой и одной бд. даже если учесть, что распределенные транзакции это анти-паттерн, то подобного рода статьи все равно не раскрывают сути микросервисов. алсо, в реальности я уверен распределенные транзакции есть, без них почти невозможно, или это уже не микросервис, а распределенный монолит с shared базой данных.
Почитал. Звучит как типа "йоу, мы взяли и переизобрели two-phase-commit". Ну молодцы, супер, чо.
>про нее инфы нет почти, никто не обсуждает, статьями с ней не срут
Проблема не столько в туле, сколько в постановке задачи. Распределенные транзакции считались ебаниной душной еще во времена EEшных серверов приложений, и остаются ебаниной душной сегодня, в эпоху микросервисов. Если есть альтернативы или допустимые компромиссы, они лучше и предпочтительнее чем ввязываться во все это. Даже ебаный монолит лучше. В распределенные транзакции идут либо от безнадеги, когда другого выхода тупо больше нет, либо по наивности.
>и что делать, когда видишь пикрил?
Для начала - чекнуть что конкретно там за "уязвимость", потому что эти механизмы частенько фолс-позитивят. Ну а потом, ждать апдейтов. Или забить проконсультироваться с СБ своей шараги.
>>2599261 я чот не понял про эту сагу. Это типа надо делать ручку для "отката транзакции" в виде новой транзакции? Сохранил заказ, потом пришла команда отмены, и в новой транзакции удаляешь этот заказ. Так чтоли?
Типа да. Но это ничего не меняет, причем неважно - делаешь ты это тулом или руками. Такие вещи - не мейнстрим. Их делают от безнадеги в узком спектре задач, и они всегда приносят боль. Здесь нет ничего элегантного, что можно было бы подсветить в статьях и словить хайп. Здесь нет хороших практик, которые "каждый должен знать". Это - просто грязная жопа, следствие чужих проебов, технического дефолта. У распределенных транзакций не может быть фанатов.
>>2599283 Нет. Это ни в коем случае не суть, не цель и не фишка хваленых микросервисов. Это как раз темная сторона микросервисной архитектуры. Как все в этом проклятом мире айти - микросервисы что-то упрощают, усложняя что-то другое.
Суть микросервисов в том, что ты делишь свою единую монолитную модель на такие контексты, в которых тебе нет нужды обеспечивать сиюминутную консистентность (и как следствие, нет нужды в распределенных транзакциях между этими двумя кусками). Данные в этих двух разделенных моделях-контекстах могут некоторое время пребывать в рассинхроне, но при этом быть eventually consistent за счет более мягких механизмов синхронизации вроде event sourcing'а. Иногда бывает так, что мягких механизмов не хватает, тогда (и только тогда) приходится городить саги, а иногда даже саг не хватает, и тогда городят, прости господи, двухфазный коммит. Но саги и расщепление транзакций - нихера не самоцель деления на микросервисы.
>>2599299 Платежи с заказами в одном сервисе. На сервис склада инфа идет не транзакционно - сообщением из кафки после транзакции на изменение заказа и платежа.
>>2599293 Чел, вот ты то мне и нужен. Чекни тут >>2598704 (OP) 1ый и 2 пик, можешь не читать пасту. Как это можно разбить без зависимостей? Я уже третий день ебу себе голову и мне буквально хуево от этого всего. Я действительно уже готов писать монолит (хз вообще с чего я решил, что написать микросервис это престижней, чем монолит в качестве пета...). Или написать микросервис, но условиться так: если админ захочет добавить новый фильм в базу через клиент, ему это нужно будет сделать в несколько этапов, сначала добавить в movie, затем только после успешного добавления вручную так же добавлять постер, скриншоты и трейлер. С удалением из бд сложней, тут таблицы не связаны локально, каскадирования нет. Потому решение такое же тупое: сначала медиа всю удалить и только после успешного удаления браться удалять сам фильм. Но тут проблема в том, что у сервиса с юзерами есть тоже зависимость с фильмами. Тогда придется вторым этапом не фильм удалять, а все зависимости у юзеров, и третьим этапом сам фильм. Но в реальности такая ситуация возможна? Т.е. ты условно админ бд с фильмами, нахуя тебе ее делать меньше? (разве что пыпа запретил фильмнейм, поэтому нада удолить)
>>2599299 >клиент создает заказ, платит деньги и получает товар
Одна такая транзакция относительно просто бьется на несколько локальных, с синхронизацией через эвенты.
Мы берем и вводим у заказа статус. Прям как в Озоне, еба. Вокруг этого статуса строим стейт-машину, переходы между которой происходят локальными транзакциями в сервисе заказы в ответ на получение эвентами подтверждений (или опровержений) из других сервисов.
Первый статус - "заказ сформирован", происходит в тот момент когда клиент засабмитил заказ.
"Заказ сформирован - заказ оплачен" в тот момент, когда платеж был совершен (локальная транзакция прошла на сервисе платежи).
"Заказ оплачен - заказ собран" в тот момент, когда на сервисе склада прошла транзакция резервирования товара.
"Заказ собран - заказ отправлен" в тот момент, когда сервис логистики отрапортовал об отправлении.
И так далее. Если какая то из вышеозвученных локальных транзакций не прошла, заказ переходит в состояние "Заказ отменен (не прошел платеж)" либо "заказ отменен (кончился товар)".
Детали могут отличаться в зависимости от конкретных требований, но суть одна.
>>2599314 Чел, я тебе ответил банальную вещь из первого абзаца любой статьи про микросервисам. А читать конкретные таблицы и схему конкретных сервисов и переразбивать их это уже работа. А у меня выходной и я на самом деле таким никогда не занимался.
>>2599322 Мне анон в прошлом треде отвечал, но я тогда не был еще готов анализировать это все. Да и бд не было как таковой. Он мне про кафку тогда говорил и эвент сурсинги, но для меня это сложно пездец еще... Блин, тот анон тоже толковый был, но он потерялся походу...
>>2599317 То есть на примере эти эвенты несколько сервисов и пишут и читают в один и тот же топик? В эвенте статус заказа айди заказа, сумма платежа, айди товара на складе. В складе и в платежах при формировании заказа формируется запись в таблице заказов, где есть айдишник и нужная сервису-консьюмеру информация. И когда они видят статус, который они не только сохраняют, но и обрабатывают, то они делают обработку и кидают сообщение с измененным статусом в тот же топик. Примерно так?
>>2599314 Мне лень читать твои простыни, но, похоже, тебе нужен микросервис-оркестратор, который будет вместо твоего web client. Там сосредоточена логика работы с многоэтапными процессами, по порядку отправляются запросы в нужные микросервисы, ответы складываются в единый результат и отправляются пользователю. При оркестрации микросервисы обычно не взаимодействуют друг с другом напрямую, всё идёт через оркестратор. Остаётся решить, как сделать так, чтобы оркестратор не превратился в очередной монолит.
>>2599344 В этом и суть, хочется без этих распределенных транзакций и их разновидностей. Без саг, оркестров, и хореографов. Я пытался найти хоть какие-то примеры кода в купе со спрингом, как это правильно и лучше сделать. Но ничего не нашел абсолютно. Пытался понять чем тут может помочь кафка, но не осилил. Базовую идею вроде понял, но потом начинается какой-то пиздец, суть теряется, и уже даже не уверен способно мне это как-то помочь в моем случае или нет. Если решений в принципе простых нет для такого рода дел, то я походу скорее всего плюну и напишу монолит, либо сделаю менеджмент фильмами, как писал выше - в несколько этапов. Я еще думал, может просто бд хуево как-то разбил, но иначе там никак, без зависмостей не обойтись все равно.
>>2599337 Топология эвентов - отдельная большая тема.
1. Общий топик на все сервисы - геморрой. Как вариант, если взять брокер rabbitmq, можно сделать по очереди для каждого отдельного сервиса, откуда он будет читать свои "входящие", по exchange для каждого сервиса (или даже каждого типа сообщения), который шлется этим сервисом, куда сервис будет писать свои "исходящие", и биндить конкретный exchange на конкретные очереди, тем самым определяя маршрут по которому сообщение пойдет.
2. В сообщении - только та инфа, которая нужна получателю (получателям). Если "заказам" от "склада" нужно только подтверждение резервации, в сообщении от "склада" будут айдишник заказа и тип "резервация прошла успешно/резервация отклонена".
>>2599386 Ну я просто с раббитом не работал, только с кафкой. Там вроде вместо очереди на каждого консумера принято делать один жирный топик на весь эвент, с лишними сообщениями, просто каждый тип эвентов идет в отдельную партицию, а потом консумер читает только нужную партицию.
Сука, когда нибудь я дочитаю кабанчика и перейду к книжке по микросервисам, по эвент-дривен девеломпенту и кишкам постгри.
Что джуну могут дать написать в первый день на работе? Всегда интересно было... Вот я прихожу - чел, который только крудошлепить мог простые запросы. Что мне делать? Я открываю проект, и ахуеваю. Неиронично, даже за неделю, я вряд ли смогу понять там хоть что-то, если буду постоянно просто смотреть код.
>>2599358 Опиши словами, какие у тебя пользовательские сценарии. Не картинками со схемой БД как в ОП-посте, без технических и микросервисных терминов. Словами кабана-заказчика, который в душе не ебет за микросервисы и за джаву.
И тогда можно будет рассуждать.
Мимо эвент-сорсинг-чел с прошлого треда, никуда не терялся.
>>2599394 >Там вроде вместо очереди на каждого консумера принято делать один жирный топик на весь эвент, с лишними сообщениями, просто каждый тип эвентов идет в отдельную партицию, а потом консумер читает только нужную партицию.
>>2599358 Никак ты это без саг не сделаешь. Все используют саги. Потому и примеров нет, что без них никак. Монолит писать все умеют, там же ничего сложного. Продолжай ебаться с микросервисами, изучишь много того, что пригодится потом. И нет никаких "сегодняшних реалий", монолиты никуда не денутся, их так и будут писать, потому что микросервисы нужны далеко не всем. Нет такого, что "монолиты только в легаси", сейчас пишут и будут писать новые монолиты.
>>2599395 В первый вообще какую-нибудь дрисню. Конфиги поправить например в 10 сервисах. Тесты написать к уже готовой апишке. Могут вообще тестовую задачу дать. Ну а потом через пару неделек поле добавить в сущность. Миграциями в бд, потом в модельку, в репошку, если запрос не генерится, в дтошки. Добавить фильтры или сортировку в готовый эндпоит. Потом через месяца два добить новый эндпоит.
Это мы так в маленькой команде на 7 джавистов на новом проекте к джунам относимся. В больших командах, да еще и с большим легаси или с бюрократией, как в банках наверно все немного иначе.
>>2599396 Сценарий такой: 1. Возможность найти любой фильм, посмотреть его описание, обложку, скрины из фильма, трейлер, если есть, т.е. обычный функционал подобных сервисов 2. Возможность регистрации пользователя 3. Редактирование профиля пользователя (имя, почта, аватар...) 4. Пользователь может добавить фильм в "любимые" 5. Пользователь может написать обзор на фильм 6. Пользователь может оценить фильм и обзор 7. Админ может добавлять/удалять фильмы через свою админ панель, а так же медиа данные к нему (трейлер, постер, скрины)
Я это все разделял логически на 3 базы данных: 1 - фильмы (жанр, заголовок, актеры, рейтинг...) 2 - пользователи (логин, пасс, емеил, фэворит листы фильмов, их оценки фильмам, их обзоры на фильмы...) 3 - статика с медиа данными (скрины, трейлеры, аватары, постеры)
>>2599410 А зачем тестовую давать, если тебя уже приняли? Или ора сложней будет? Что бывает, если ты за весь день никакого результата не добился? Например >Конфиги поправить например в 10 сервисах. Вот как ты это себе представляешь? Я пришел, о проекте не знаюнихуя. Что я им там могу даже в теории поправить? Порт что ли? Гыгыгы Я им скорее вообще весь конфиг наебну и они не смогут собрать проект
>>2599395 В первый день? Ничего, я всю неделю ждал, когда исполнят все заявки, принесут пекарню, выдадут все права и доступы, установятся все программы (которые тоже через заявки, самому ставить нельзя), потом три дня ебался с развёртыванием проекта, который поднять - целая наука. Потом тимлид научил меня дебажить, я этим не пользовался в пет-проектах и всё отлаживал через System.out.println. А дальше всё как у этого анона >>2599410 , исправление опечаток в текстах ошибок, написание тестов, добавление новых полей в отчёты. Где-то через месяц начали давать более крупные задачи, типа реализовать CRUD-справочник.
Но это у нас большая команда из 50 разрабов, большое легаси и бюрократия, потому что банк лол
>>2599415 > Я пришел, о проекте не знаюнихуя. Что я им там могу даже в теории поправить? Порт что ли? Так тебе в джире задачу распишут очень подробно, какие строки смотреть, на что заменять. Твой код будут ревьюить, т.к. в основную ветку без аппрува ты не можешь подмержить.
>>2599418 Если они сами знают что, где и как поменять, нахуя мне это давать? Чел, который писал этот туториал, мог уже сам все это исправить. Или это западло? Лол. Ну или это специально так мои навыки проверяют? Но о каких правда навыках в такой ситуации может быть речь я хз... По бумажке любая кухарка может буковки подправить.
>>2599415 Тестовый сервис, чтобы новичок ознакомился с стеком и подходами, кодстайлом, гитфлоу и тп. Даю ему сервис с прода для примера, даю упрощенную задачку для сервиса. Задание на неделю. Раз в день-два подхожу, спрашиваю промежуточные результаты. >Я пришел, о проекте не знаюнихуя. Что я им там могу даже в теории поправить? ну примерно. надо во всех сервисах что-то скопипастить. Ну и даешь ему сервис откуда копипастить и сслыку репошки сервисов. Он читает коммит откуда копипастит, и делает 10 копипаст, 10 коммитов и 10 мров.
Давал недавно джуну баг найти поправить. Он не смог сходу разобраться. Пришлось за него разобраться и код ему под диктовку надиктовать.
>>2599419 Ну да, у джунов все таски так проходят. Все понимают, что джуны сами не разберутся и правильно не сделают. Джуна надо обучать, чтобы он начинал приносить пользу проекту, иначе смысл его брать.
>>2599421 Чтобы тебя обучить. Общеизвестно, что джуны в самом начале убыточны и приносят мало пользы, потому надо обучать. Дальше так подробно расписывать не будут, потому что ты уже это умеешь. Сеньоры, конечно, всё знают и всё могут сами сделать, но на все задачи у них тупо не хватит времени.
>>2599401 > Никак ты это без саг не сделаешь. Все используют саги. Потому и примеров нет, что без них никак. Не понял логики. Если это делают все, то почему до сих пор ни одного реального кода в качестве примера? Почему 100500 однотипных говно примеров говно микросервисов с одной бдшкой, где даже намека нет на общение между микросервисами?
>>2599424 Ну так я диктовал, потому что он не понял что делать за 2 дня. Не выгонять же его сразу. Если к концу испытательного не перестанет так сильно тупить, тогда и выгоним. Ну и я хотел все за него просто написать, сэкономил бы час из трех потраченных на него, но после написания под диктовку он хоть что-то понял. Ну и собесил его тимлид, а онбордингом занимаюсь я, вчерашний джун.
Я тебе еще в том треде сказал. И в этом повторю. С чего ты взял, что зависимости между сервисами недопустимы вообще ни в каком виде? Зависимости - это нормально. Просто природа этих зависимостей между сервисами другая.
> таблицы не связаны локально, каскадирования нет Да, все так. Да, это доставляет ряд неудобств и имеет ряд недостатков. Но в то же время имеет и ряд достоинств. Так как у тебя нет между моделями общих констрентов, эти модели могут располагаться в разных СУБД на разных хостах - СУБД перестает быть боттлнеком. Ради этих достоинств и делят на микросервисы. Ты этих бенефитов не прочувствуешь на своем пете, потому что ты - не "кинопоиск", и у тебя еще не скоро настанет момент когда ты в СУБД упрешься, но это не значит что идея априори бессмысленна.
>если админ захочет добавить новый фильм в базу через клиент, ему это нужно будет сделать в несколько этапов, сначала добавить в movie, затем только после успешного добавления вручную так же добавлять постер, скриншоты и трейлер
Ну да. Так а в чем сомнения? Или ты как себе в монолите это видел - админ одним запросом всю это пачку добавляет? А если один из файлов не загрузится - всю транзакцию дропнешь? Представляешь ебало админа в такой момент - ему заново надо будет анкету заливать? Админу тупо самому будет удобнее наполнять контент поэтапно.
>С удалением из бд сложней
А давай представим что админ удалил фильм, но контент по этому фильму из сервиса "ассеты" еще не удалился. Ответь себе на вопрос - насколько это - проблема? Ну открывает юзер страничку с фильмом. Получает 404, потому что на сервисе "фильмы" такого фильма не знают. Все. Какая разница что контент фильма сиюминутно не дропнулся? Ну дропнется попозже, когда от сервиса "фильмы" до сервиса "ассетов" дойдет уведомление что фильм дропнулся. Юзер этого даже не заметит.
>Но тут проблема в том, что у сервиса с юзерами есть тоже зависимость с фильмами
Ок, погнали думать. Вот у юзер заходит на страничку своих фаворитов. Скорее всего эта страничка будет делать следующее: 1. С сервиса "пользователи" загрузит айдишники фильмов-фаворитов 2. Затем, используя сервис "ассетов", страничка будет в фоне подгружать постеры и трейлеры, а с сервиса "фильмы" - тайтл и актерский состав.
Предположим один из таких фоновых запросов сказал - "все, фильма нет". Ну и хуй с ним. Опять же вопрос - такая ли уж большая проблема что айдишник одного из фаворитов пользователя больше не резолвится? Берешь и рисуешь заглушку, что "этого фильма нет", оставляя на этой заглушке кнопку "удалить из фаворитов". Или вообще не показываешь несуществующий фильмв списке, а в бэке подписываешься сервисом "пользователи" на события удаления фильмов из сервиса "фильмы".
>>2599429 Все так делают в проде. Примеры для новичков пишутся авторами, которые сами недалеко ушли, но очень сильно хотят писать статьи. А опытным разрабам, которые могут дать больше конкретики, не до вкатунских пет-проектов, они на работе все заняты. Вообще, давно заметил, что нормальных примеров мало по чему угодно, разве что по вебговну с реактами ищется всё.
>>2599436 Почему я примеры, как писать изъебистые запросы на малопопулярной nosql субд могу найти, какую нибудь хуйню по эврике или настройке метрик и трейсов могу найти, а саги эти есть только в теоретических книжках?
>>2599442 Там архитектура, а тут конкретные технологии. По технологиям есть единая документация, где и так всё это описано, а в архитектуре никакой общепринятой документации с описанием единого подхода нет и быть не может. Остаётся задаваться теоретико-философскими изысканиями. >>2599448 Я потому и говорю, что сказать тут действительно ничего нельзя. Анон задаётся вопросом уровня "как писать на джаве так, чтобы не юзать паттерны". Очевидно же, что никак.
>>2599432 >Или ты как себе в монолите это видел - админ одним запросом всю это пачку добавляет? Ну, вообще, да. Даже, если не одним, т.е. есть возможность потом добавить картинки и видео, все равно должна быть возможность добавить это все сразу. Но если под капотом это будет N отдельных запросов в разные сервисы, то снова все упирается в распределенные транзакции. Потому что без транзакции у тебя 1 запрос успешно выполниться, а другой нет (или вообще потеряется где-то из-за сбоев в сети), но ответ придет от первого ОК. Ты будешь думать, что все действительно ок, а на деле даже не будешь знать о том, что нихуя не ок, пока сам не решишь проверить.
>Представляешь ебало админа в такой момент - ему заново надо будет анкету заливать? Тут больше от клиента зависит, можно же не удалять последние заполненные поля формы.
> А давай представим что админ удалил фильм, но контент по этому фильму из сервиса "ассеты" еще не удалился. Ответь себе на вопрос - насколько это - проблема? Настолько, что в бд плавает мусор, который никак не связан с фильмом. И никто не вспомнит даже о нем и не найдет, только если случайно, а он тем временем будет нагружать бд. Если таких "зомби" в бд будет много, то в этом явно ничего хорошего не будет.
> Ну дропнется попозже, когда от сервиса "фильмы" до сервиса "ассетов" дойдет уведомление что фильм дропнулся. Юзер этого даже не заметит. Какое уведомление? Мы ведь рассматриваем ситуацию, когда нет никаких mq или кафок, нет никаких саг? Тут и проблема основная кроется, что нужно как-то следить за всем этим мусором... Примера реализации даже самой простой саги я не смог найти.
> Или вообще не показываешь несуществующий фильмв списке Это, если удаление фильма админом дошло до завершающей стадии, которая удалила и ассеты и сам фильм. А если удалились только ассеты? Там просто будет непрогруженный фильм, что будет выглядеть криво. Допустим, админ снова подумал, что удалил фильм успешно, а на самом деле это не так. И он таким же мусором, только без ассетов, плавает в бд. Мы ведь говорим все еще о ситуации без mq, кафки?
>, а в бэке подписываешься сервисом "пользователи" на события удаления фильмов из сервиса "фильмы". Опять же, не совсем могу представить это событие. Как вообще из пользователей можно удалить фильм? Т.е. обычный пользователь чекал свой список, увидел что какой-то фильм - больше не фильм, удалил его из своего списка и тем самым сгенерировал запрос на удаление остатков из бд с фильмами?
>>2599450 > Я потому и говорю, что сказать тут действительно ничего нельзя. Анон задаётся вопросом уровня "как писать на джаве так, чтобы не юзать паттерны". Очевидно же, что никак. Вот только примеры паттернов есть и их много разных. А примеров этого говна даже в самом простом виде нет нигде. Если я раньше любил писать говнокод и изобретать велосипед, то сейчас я этого не просто не люблю, но и боюсь. Боюсь утонуть в собственном говне, потерять тонны времени на решение проблемы в проблеме в проблеме в проблеме, в итоге придти на двач (единственное место, где мне могут помочь), но вместо помощи меня только еще сверху калом закидают и потроллят. Я вообще никого не обвиняю из анонов итт, если что. Исключительно констатирую факт, что писать велосипеды, особенно, механизм которых достаточно сложен и запутан - боюсь.
>>2599458 Даже с паттернами не всё так просто. Часть паттернов легко понять и объяснить с примером в 30 строчек. А есть паттерны, которые вызывают скрытые проблемы, и о них надо знать, далеко не в каждой статье про паттерны они вообще упоминаются, не говоря уж о подробном их рассмотрении. Есть и Егор Бугаенко с элегантными объектами и своим собственным видением паттернов. Наконец, есть такие штуки, как MVC и REST, их в каком-то смысле тоже можно отнести к паттернам. MVC далеко не все понимают и пишут SQL-запросы в контроллерах, ещё многие задаются вопросом, как соответствующие классы правильно располагать в проекте, и там нет универсального ответа, кто-то вспоминает про DDD. И REST, который вызывает ещё больше вопросов, никто не знает, как его правильно готовить, в бугурт-треде уже третий год не устают про это сраться. А микросервисы не изучить так же просто, как обычные технологии, где загуглил готовый пример и всё понял. Надо погружаться, понимать, что делаешь и зачем, много думать, над какими-то вопросами думать неделями, много раз психануть, всё удалить и начать писать заново, читать книги, очень много экспериментировать. Примеры, впрочем, найти можно на каком-нибудь гитхабе, но и там большинство проектов будет единственным микросервисом с одной БД.
>>2599454 >все равно должна быть возможность добавить это все сразу.
Ты щас пытаешься со мной спорить на предмет требований, что бессмысленно. Из нас двоих требования сейчас определяешь ты, и если ты сказал что должна быть одна транзакция, я тебе отвечу что хуй с тобой, тогда делай монолит. Но это не имеет никакой корреляции с реальностью: в реальности требования определяет клиент, и ему будет по большей части похуй на такие нюансы. Ты привык что в мире монолитов и реляционок целостность данных - ультимативная ценность. Но для клиента это - не совсем так. Клиенту важно, чтобы твой кинопоиск обслуживал миллионы запросов в секунду, и тут уж хошь не хошь, а на компромиссы идти придется.
>Настолько, что в бд плавает мусор, который никак не связан с фильмом. И никто не вспомнит даже о нем и не найдет, только если случайно, а он тем временем будет нагружать бд. Если таких "зомби" в бд будет много, то в этом явно ничего хорошего не будет.
ПО-ХУЙ! Во первых - ты еще доживи до того момента, когда это станет проблемой. Во вторых - проблема мусора решаема. Проведи аналогию с джавой: в джаве же тоже есть мусор. И ничего, никому он не мешает. Где есть мусоро, есть и мусор-коллектор.
>Мы ведь рассматриваем ситуацию, когда нет никаких mq или кафок
Ну возьми да заведи крон таску по поиску и чистке мусора в ассетах на основе того, какие фильмы есть в "фильмах". Или заведи табличку РКНнутых фильмов для того, чтобы в этой таске отслеживать какие фильмы были РКНнуты. Да, это будет долгая операция - ну повесь ее в три ночи, когда все твои юзеры спят. Или разбей ее на куски, типа, еженочно мы чистим ассеты только в течение часа - сколько за час успели почистить, столько и почистится. Eventually мусор соберется.
Ну и стоит отметить, что отсутствие кафок и mq - всего лишь наша с тобой условность. В реальном проекте этой условности тупо не будет, вот и все. Обмен сообщениями между сервисами - обычное дело.
>А если удалились только ассеты?
А ты скажи что "фильмы" - единственный source of truth. РКНнутым фильм считается только если он дропнут из "фильмов", а ассеты - независимая сущность с независимым лайфциклом, который админ вправе менеджить отдельно.
Короче - резюмируя вышесказанное: пока ты мыслишь единой моделью данных со строгими констрейнами, ты не найдешь для себя ответов. Так и будешь мучиться и страдать, пытаясь развязать неразвязываемое, мечась между привычным тебе монолитом и микросервисами, которые ты пытаешься для себя постигнуть.
Посмотри на реальные сервисы. Посмотри на ютуб. Видео из ютуба может быть давным давно грохнуто админами, но при этом найтись через поиск, или быть частью какого нибудь плейлиста (где будет торчать вместо него плашка что оно удалено администраторами). Посмотри на гугл. Он спокойно может отдавать тебе ссылки из своих индексов на интернет ресурсы, которые больше не существуют. Steam, который на фоне РФ-санкций может показывать тебе игру в поиске, плашку игры в магазине, фаворитах и прочих местах, но при переходе на страничку этой игры сказать, что ее не существует в регионе.
Консистентность в реальных проектах - не аксиома, а такой же трейдофф как и все остальное.
Проблема паттернов в том, что они описывают решение в отрыве от контекста. Людям непосвященным в контекст проблемы, паттерны создают иллюзию панацеи - типа "делай как пишут умные дядьки, и вкатишься твой проект будет работать так же хорошо как у них". Это пиздецки паршивый ит заразный эффект, из-за которого вся айтишка сегодня состоит из фанбоев и их каргокультов по интересам.
Никакая статья не раскроет вкатуну адекватно контекст проблемы, стоящий за тем или иным паттерном, ИМХО это тупо невозможно. Суть паттерна постигается когда человек сталкивается сам с проблемой и решает ее, но когда он ее решает, роль паттерна в его познании уже и не такая ключевая. Нахуй ему паттерн, если он и так разобрался. Ну разве что для того чтобы находить общий язык с себе подобными.
Но тогда нахуй паттернами грузят вкатунов, если у них все равно нет ни единого шанса их постичь? Я не знаю. Наверное это очередной жалкий потуг индустрии сделать разработку дешевле.
>>2599464 У меня опыта коммерческого вообще нет. Я и на джаве-то еще толком ничего не писал, только теорию всякую нонстоп занюхиваю уже месяц. Поэтому я представляю, что в реальном проекте все гораздо строже. Ты говоришь, что тот же мусор в бд - не проблема. А я все равно не понимаю: почему? Ведь на хранилища выделяют деньги, если у тебя даже 10% забито мусором, разве это не значит, что освободив это место от него, бизнесу не придется покупать новое хранилище что сохранит +0,05% прибыли? Я сомневаюсь, что кабан не удавится за эти проценты.
Тогда по хорошему, надо действительно какой-то сервис, который будет следить за порядком в бд... Но это все равно какое-то кривоватое решение что ли... Хз даже, честно. Я если что с тобой не спорю, просто пытаюсь понять почему все то, о чем ты говоришь - норма в продакшене. Мне вообще даже кажется, если бы у меня спрашивали на собесе "почему ты решил оставлять этот мусор в бд в своем пет проекте?", а я отвечаю "гуглу можно, а мне что нельзя что ли?", меня скорее всего бы уже захотели слить побыстрей.
>>2599468 Ну мне к вышесказанному больше добавить нечего. Насколько я тебя понял, у тебя скорее остался страх перед интервьюерами быть неспособным пояснить за свое решение, нежели вопросы к самим микросервисам. Тогда просто не свети пет в резюме. Джунов по архитектуре обычно не пытают.
>Ты говоришь, что тот же мусор в бд - не проблема. А я все равно не понимаю: почему? Ведь на хранилища выделяют деньги, если у тебя даже 10% забито мусором, разве это не значит, что освободив это место от него, бизнесу не придется покупать новое хранилище что сохранит +0,05% прибыли? Я сомневаюсь, что кабан не удавится за эти проценты.
Ты судишь об этом так, потому что ты с ними еще не имел реальных дел. Но в реале - ты удивишься насколько не все так просто.
>>2599471 Да не, проблема точно не в страхе перед интервьювером. Если я к какому-то выводу или решению пришел, то в 99% я смогу пояснить, почему я так сделал. Мне даже будет не зазорно признаться, если я просто не знал, как можно иначе решить проблему. Проблема больше в том, что я думаю, что там в продакшне все стремятся к идеальным решениям, дрочат девопсов (иначе нахуя им столько платят?), чтобы все работало максимально хорошо, не допускают ни малейшего проеба, а по факту это далеко не всегда так. Я привык постоянно сомневаться в себе и ровняться на те же статьи в инете, воспринимая их как эталон, потому что сравнить не с чем, нет работы в реальных проектах. Всегда кажется правильным - поверить какому-то бородатому дядьке с умным видом. А читая доку спринга, постоянно думать: ну там же не дураки сидят, а знающие люди, поэтому хуйни не напишут. Я думаю такое со временем проходит, когда этот опыт появляется.
С микросервисами сейчас так же. Кажется, что я не раскрываю их суть, если не использую распределенные транзакции или евент сорсинги. Моя цель по большому счету: просто показать завершенный пет проект, который не монолит, а микросервис (просто потому что это модно, епта). Но углубляясь в эту всю тему, я только понимаю, что проектировать приложение, а особенно эти микросервисы - это нихуя не просто. Поэтому, на этом сделаю акцент и решу для себя, что микросервис в любом виде в качестве пета - всегда хорошо. Спасибо, анон, за то что дал какое-то свое виденье. Появилось больше уверенности, что я не делаю хуйню.
>>2599477 Если ты вкатун, то тебе скорее всего должно быть до пизды на микросервисы. Потому что тебе дадут маленькую таску в одном или парочке сервисов. А что там снаружи ты и не узнаешь, если сам не полезешь в свое личное время читать доки и код всех сервисов. Даже если сервис будет новый, то архитектуру таблиц, интеграций и эндпоинтов нарисуют за тебя. А мнение об общей архетиктуре спросят ну очень нескоро. Лучше больше задрачивай взаимодействие с базой, с сериализатором в json, с http, с фишками контекста и конфигурации спринга и особенно с тестами. Я бы на твоем месте начал бы писать второй пет, где не трогал бы микросервисы, но поигрался бы с запросами посложнее, с конфигами сериализации, написал бы миграции, валидации и тесты.
Аноны, вот вы недавно писали про первые джуновские таски, читал не без интереса и даже сейчас немного отлегло, до этого боялся, что вообще не справлюсь с работой. поэтому сейчас даже кажется, что пересидел уже
Но из-за анона, написавшего про тупящего джуна, который таску под диктовку делал, у меня возник вопрос: где проходит та грань, перейдя которую, тебя попрут с испытательного? Типо, что нужно сделать, чтобы тебе сказали пиздовать на улицу, мб два раза так протупить как описывал анон выше? Или нужно все три месяца косячить, самому вообще ничего не написав? Вообще часто бывают такие прецеденты, что джуна шлют к херам в первые недели-месяцы? Может у кого-то тоже есть какие-то подобные случаи, которые вы лично наблюдали или слышали от кого-то, было б интересно почитать, чтоб избежать этого, если когда все-таки получиться дорваться до заветной работки
>>2598377 Я даже так и сказал, что сначала определяются руты таким вот образом, на что последовал данный панч, и после этого перехотелось уже что-то доказывать
>>2599493 Тебе это вряд ли грозит. С таким джунами очень сложно столкнуться лично, почти все отсеиваются на этапе собеседования. Какой-то процент тех, кто целенаправленно учится наёбывать собеседующего, всё же может попасть на работу, но и они обычно сами съёбывают через пару месяцев.
Как в webflux подключится к докер контейнеру через имя контейнера? Прописываю нормально, как в каждом туториале говорится WebClient webClient = WebClient.create("http://test-service:8081/test); В докере в логах смотрю получаю 500 потому что к имени контенера откуда-то приставился айпи адресс этого контейнера т.е вот так failed: Connection refused: test-service/196.25.0.3:8081 Это webflux как-то подставляет это? Откуда это берётся?
>>2599507 Там нетворки нужно еще чтоб согласованы были, возможно стоит копнуть в этом направлении, хотя я не уверен, просто что-то подобное было, когда я начал поднимать все не через композ, а по отдельности и тоже не находило нихуя по имени сервиса
>>2599510 Да я и композ с туториалов взял. Даже chatgpt попросил написать мне, думал может как всегда в туториалах говно не рабочее, да нет, выдал тоже самое, только версию бампнул с 2 до 3
>>2599484 Я тоже об этом думал, что лучше уделить внимание больше какому-нибудь спрингу или хибернейту. Под http ты что подразумеваешь? Как работает протокол? Алсо, теорию tcp/udp надо хорошо знать? Просто в вакансиях такого даже не встречал, хотя, это вроде как одна из баз. Или та же модель osi? Раньше ее часто встреаал упоминание, сейчас уже тоже не вижу.
>>2596713 (OP) Попал на проект, где интегрируются с огромной легаси-хуиткой, которая стартует полчаса и жрет столько ресурсов, что рабочий мак начинает задыхаться. Раньше просто мокал зависимости через ваейрмок или мокито, но тут развесистая логика на стороне той хуитки и мокать замучаешься, т.к. дергая одну ручку она создает кучу сущностей на своей стороне. Как лучше всего организовать процесс тестирования? Охуел, что в команде есть выделенный микрочелик, который ручками тыкает запросы на отдельном тестовом контуре. Разработка фичи может растягиваться на месяцы...
>>2599601 Хотелось бы поиметь автотесты, которые бы гонялись на CI, но если хуитка будет крутиться на тестовом серваке и туда будут ломиться запросы при прогоне тестов, то все похерится, когда будет выполняться много тестов с разных пулл-реквестов. Хз как стейт чистить после каждого теста...
у вас бывает такое, что сидя кодить не хочется прям вообще, но в постельке полежать - покодить было бы норм, но ноута нет? что делаете в такой ситуации?
>>2599616 Конечно бывает. Потом я вспоминаю, что мне нужны деньги, чтобы оплатить аренду квартиры, ипотеку, что-то купить пожрать, стоматолога оплатить и еще отложить на черный день и всю эту дурь как ветром сдувает.
>>2599621 >работа должна приносить удовольствие Распространенное заблуждение, между прочим. За годы гребли попалась реально классная команда и интересный проект. В основном гребешь на унылых проектах, которые тебе не интересны, а работа вызывает отвращение. Но что поделать - нужно же на что-то жить.
>>2599625 >вкладываются в эффективность в перспективе. Буквально единицы вкладываются в оснащение офисов и продуктивность разработчиков. Покупают дорогие кресла, мощные ноутбуки/рабочие станции и т.д. Большинство выдает забитые пылью ноутбуки HP/DELL, которым сто лет в обед и которые начинают завывать когда разворачиваешь проект.
Объясните, плиз, что именно делает JPA/Hibernate, за что отвечает? Я пишу код для работы с бд, но хер знает что есть хибер, а что нет? @Entitiy это хибернет? Когда пишет какой-нибудь кастомный метод в имплементацию CrudRepository вроде findByField, это хибернейт? Что именно он делает и где его границы.
>>2599548 Имею ввиду как spring mvc работает с http запросом. Боди, параметры, хедеры, корсы. Интерсепторы, фильтры, адвайсы. Все на практике потыкать. Ну и теорию с диспетчер сервлетом. Нет, tcp/udp знать не надо.
>>2599688 это попытка совместить объекты и реляционные базы, чтобы автоматом гонялось туда обратно. Получилось не очень, но на примитивных операциях данных оно работает
>>2599688 Все просто, чекай пакеты. Если пакет начинается с javax.persistence (как у Entity), значит это JPA. Если org.hibernate - значит хибернейт. Ну а если org.springframework.data - значит Spring Data.
>>2599493 >где проходит та грань, перейдя которую, тебя попрут с испытательного? Это не обязательно испытательный срок и не обязательно джюн. У каждого проекта есть заказчик, сроки и бюджет. Если вы в команде не укладываетесь по срокам, то будь ты хоть мидлом или сенькой - разговор будет один. Сначала тебе прямо говорят, чтобы ты наверстывал темп и быстрее и качественнее делал задачи. Если ты не понимаешь или не вывозишь и из-за тебя команда продалбывает очередной спринт, то тебе просто говорят писать по собственному и все.
>>2599527 Ну так у меня они и сидят на одной докерой сети, нет? spring-cloud-network. >>2599528 Ну в application.yml он стоит 8091, но ведь сам докер контейнер же хостится на 8081, везде говорится по порту контейнера подключаться. Это вот я так я думал до того как ты написал, попробовал поставить 8091 и оно теперь мне другим ебёт мозг. Выдаёт 400 Bad Request (а реквест то рабочий, без контенерезации всё норм) Пиздец я ебал эту ебалу, ща буду по флешке архивы передавать. Спасибо за подсказку, буду разбираться
а как в спринг jpa можно суррогатный ключ описать? везде вижу только составной ключ. мне надо, чтобы в таблице можно было создавать уникальные комбинации по 3 столбцам.
делать из 2 айдишников 1 составной, потом из 1 составного и оставшегося айдишника делать снова составной? мне кажется это хуйня какаято-то...
>>2599910 >Ну так у меня они и сидят на одной докерой сети
Да, верно, я не сразу заметил. Более того, айпишник то он тебе, судя по тому мессгау из логов, зарезолвил. А вот на порту 8081 никого не нашел.
>но ведь сам докер контейнер же хостится на 8081, везде говорится по порту контейнера подключаться.
Я всех деталей щас не вспомню, но скорее всего это работает немного не так как ты думаешь. Директива ports в докер-композе - это биндинг портов контейнера на докер-хост (докер-хост - это твой пека, на котором докер развернут). На биндинг портов внутри контейнера эта директива никак не влияет: они там будут биндиться ровно туда, куда ты спрингу скажешь, вне зависимости от того, есть у тебя ports в докер композе или нет
Короче, попробуй порт в урле вебфлакса поменять на 8091.
>>2599805 У меня собес шёл где-то 1.5 часа, задавали много несложных вопросов по стеку, спрашивали теорию про нормальные формы, вычислительную сложность алгоритмов и подобное. Решал две задачи с алгоритмами. Ещё по приколу спросили, знаю ли я C++, и дальше несколько вопросов про отличие умных указателей от сборки мусора и про отличие шаблонов от дженериков.
пытаюсь руками сделать двухфазный коммит. Выяснил, что нужен датасорс с XA имплементацией. Нагуглилось некий Atomikos. Но не вижу где тут руками ставить PREPARE TRANSACTION Что за говно
>>2600007 ощущение что я копаюсь в глубинах какого-нибудь древнего сервера приложений. Тут оказывается нет задания урл базы, только название ibm сервера
>>2600034 В C++ есть шаблоны (template), их можно использовать примерно как джавовские дженерики, внешне выглядят похоже, но есть много своих нюансов. Например, они при компиляции копируют шаблонный код, подставляя туда типы, с котороыми это шаблоны использовали, и после компиляции получается несколько копий одних и тех же классов и функций с разными типами, это похоже на макросы. Шаблоны бывают рекурсивными, через них можно реализовать вычисление выражений при компиляции и ещё много чего. В любом случае, если о C++ ты знаешь только то, что существует такой язык, задаваться этими вопросами не нужно.
как такие таблицы правильно называть? 1. абстрагироваться по смыслу? в таком случае, ее можно было бы назвать movie_person 2. или опираться на техническую составляющую? т.е. если она ссылается внешним ключом на какую-либо таблицу, то указывать ее в названии "movie_person_role" (на пике сейчас этот вариант)
>>2600064 не понял вопроса. ты имеешь ввиду, чтобы было так? _movie_id___|___person_id__|_role_name_| ____1_______|_____50_______|____actor___| ____1_______|_____51_______|__director___| так составной ключ будет по movie_id и person_id только, тогда не получится делать так _movie_id___|___person_id__|_role_name_| ____3_______|_____55_______|____actor___| ____3_______|_____55_______|__director___| плюс дублировать строку - тяжелее по ресурсам, чем ссылаться на int
>>2600114 На уровне, достаточном для работы, знаю только джаву. А так много чего тыкал, и петухон с машобом, и JS с реактами, и шарп, и андроид, даже с хаскеллем когда-то игрался. Времени было очень много.
я же правильно понимаю, что вторая строка должна удалять существующие таблицы и создавать их заново? если я прав, то почему он не удаляет старые таблицы? если не прав, то как это сделать?
Такой вопрос к джавогосподам. Почему ваша жава - такое неструктурированное добро? Один проект - не похож на другой. Смотришь в код, а там каждый ТВОРЕЦ, блядь. Один так положит файлики, другой - так. Один так обзывает, другой так. Я не знаю. Но блин. Я вот, как шарпоняшка, просто горю с того, как среднестатистический проект устроен. Будто разраб на джаве - испытывает некую неудовлетворенность и желание быть таким же крутым как С++'ер, и намеренно код распихивает максимально дурацки. Но я могу ошибаться. Возможно, в этом есть либо какой-то смысл, либо это какие-то особенности языка. А потому - хотел бы от вас услышать ответа. Но просто взгляните на этот пиздец в сравнении. Абсолютно же ебануться можно, пока найдешь то что тебе надо.
>>2600224 Так исторически сложилось, и ничего не сделать. Никому это не нравится, хуй вспомнишь, в какой из сотен пакетов засунули нужный класс, из-за чего всем приходится юзать автоимпорты, в итоге без IDE код писать невозможно.
>>2600233 В том то и прикол, что у нас есть IDE, а не виндовс блокнот для написания кода, и нам можно куда угодно сувать классы (в теории, на практике - оно непосредственно связано с качество дизайна, ведь расположение классов напрямую берётся из того, как разработчик себе представляет проект, структура пакетов - это что-то того рисунка проекта на бумажке, поэтому и у спринга такое говнорасположение классов, потому что он сам говно и сборник кала от десятка тысяч серунов).
А для посвящения в проект профанов должна быть ВИКИ, не надо заставлять их понимать, как работает проект по сурсам.
>>2600224 >Почему ваша жава - такое неструктурированное добро? Один проект - не похож на другой. Смотришь в код, а там каждый ТВОРЕЦ, блядь. Один так положит файлики, другой - так. Один так обзывает, другой так. хуйню несешь дальше не читал твой жир
>>2600227 Я ж не про это. А про какие-нибудь практики, которые должны быть общими для разработчиков внутри экосистемы. Вот на шарпе - есть гайд от майков, как называть что. В шарпе - есть общие правила по названиям папочек и общей структуре проектов. Ты открываешь один проект - и быстро "просекаешь", как оно работает. А в джаве - я буквально несколько проектов открывал и часа 4 потратил, чтобы понять где что лежит. Думал, ну, наверное так принято у них. Открываю другой - совсем иначе штуки лежат. Открываю третий - опять. Еще: один - делает вложенные классы. Другой - не делает. Третий делает иногда. В шарпе, для публичных штук это считается харамом. >>2600241 Вот я открыл https://github.com/spring-projects/spring-framework. Вот я открыл https://github.com/thingsboard/thingsboard В каких местах они похожи? >>2600239 Ну вот я - сижу в деревне на удаленке. Мне прилетает уведомление на телефон, нужно чет быстро поправить. На шарпе я просто вимом открываю папку с проектом, нахожу быстро нужное место, правлю, делаю pr и иду дальше коров доить. Как я блин должен это сделать на джаве?
>>2600245 >Ну вот я - сижу в деревне на удаленке. Мне прилетает уведомление на телефон, нужно чет быстро поправить. На шарпе я просто вимом открываю папку с проектом, нахожу быстро нужное место, правлю, делаю pr и иду дальше коров доить. Как я блин должен это сделать на джаве? Ну это же совсем жирофрения уже.
>>2600249 Так реальный кейс... Когда на ковиде разогнали - уехал в родную деревню и там сидел с ноутбуком, ставить студию - было влом. Нормально делал задачки.
>>2600245 >Ты открываешь один проект - и быстро "просекаешь", как оно работает. Ты хочешь сказать, что благодаря тому, что на петушарпе не делают вложенных классов (между прочим, которые на джаве пишут как раз для увеличения читабельности кода в исключительных случаях, когда класс не нужен за пределами того, в котором он объявлен) и перед названиями интерфейсов пишут уродскую букву I, там становится гораздо легче разобраться в работе проекта по сурцам? Жирный, плиз.
алишев за пару часиков рассказал мне про спринг жопа в то время я нахуй весь день потратил на создание пары таблиц со всеми видами отношений хотя во время просмотра все изи казалось ебало мое?
Подскажите литературу по JVM в разрезе программирования. Чтобы было расписано как выделяется память под объекты, массивы всякие. Как мусор собирается. Желательно, ещё как JVM взаимодействует с внешним миром (с ОС).
>>2600256 Благодаря тому, что структура проектов похожа один на другой. Ты открываешь проект на шарпе номер раз. Открываешь проект номер два. Открываешь проект номер 3. Везде видишь папочки Model Events Controllers Services Resources Utils
В библиотеках: Internal Hosting Extensions
Короче. Все +- одинаково, специфичные части - легко заметить. Именование тоже +- одинаковое у всех. Из-за этого ты знаешь куда первым делом смотреть. Знаешь где какого рода штуки лежат. И быстро вникаешь. В жаве, я часа 4 потратил чтобы просто найти, где ж там модельки лежат.
надо ли под каждую сущность делать свой сервис с бизнес-логикой? или лучше один общий сервис для одного контроллера? или лучше контроллеров под каждый сервис?
>>2600274 джава проекты тоже делаются так, просто мы используем специальный шифр, который рассылаем каждому джависту. шифр меняется в 0:00 каждого дня. делается это для того, чтобы пидорасы типо тебя горели и не могли понять что насрано в проекте
>>2600268 у меня больше проблем вызвало то, что я постоянно путался со связями один-к-одному/один-ко-многим/многие-ко-многим. не привычно было так же воспринимать отсутствие непосредственно поля в таблице, на которое ссылается другая таблица. т.е. я сначала пытался это все представить так, потом только начал потихоньку понимать и уходить от навязчивой мысли засунуть поле в таблицу. вместо этого абстрагировался. поле как бы есть, но оно в другом месте (внешний ключ)
>>2600274 Нашел, чем гордиться. Структура должна быть такой, чтобы классы как можно меньше работали с классам из других пакетов - то есть основное сообщение с однопакетниками, чуть поменьше с теми, кто в одном пакете более выского уровня, ещё меньше с теми, кто вообще далеко, и так далее. Внешние библиотеки стоят особняком, потому что их структура не видна при работе.
Такой подход позволяет достигать максимальной инкапсуляции, выполняя то, зачем вообще нужна структура пакетов - структурирование проекта прежде всего в голове разработчика. А у тебя что? Ущерб дизайну в угоду надоям.
>>2600281 >постоянно путался со связями один-к-одному/один-ко-многим/многие-ко-многим Потому что фримверк сделан нелогично и просто нет логике в этих OneToMany и ManyToOne. А все ошибки ты ловишь в рантайме. Пока проект маленький, то фидбек получаешь мгновенно. Когда он разрастается, то ты можешь ждать по минуте, чтобы потом получить огромную портянку из стектрейсов в которых будешь копаться еще минут 5 в попытках правильно расставить аннотации. А когда ты столкнешься с проблемой N+1 и попробуешь решить ее с помощью хубирнейта, то вообще на стены полезешь с диким воем.
>>2600290 я больше не с фреймворком ебался, а с представлением самих таблиц в башке. фреймворк больше сбивает количеством аннотаций, которые надо сразу все как-то в голове уложить и понять что каждая делает. я правильно понял, что можно указывать однонаправленную связь и хибер под капотом сам все поймет, но лучше всегда делать двунаправленную для читаемости кода?
>>2600275 Пока тута, объясню как в шарпе делается. Хотя не уверен, что одними и теми же словами то же самое называем. Сущности - анемичны. Просто набор свойств обычно. Иногда атрибутами - ограничения могут устанавливаться. Сервис - объединяет в себе какую-то бизнес-область. Типа сервис оплаты. Сервис управления пользователями. Сервис выдачи заказов. Внутри одного сервиса могут использоваться различные сущности. Контроллеры - просто передают запрос нужному сервису, получив ответ - отдает клиенту. На уровне фильтров/миддлваря - происходит базовая валидация запроса. На уровне сервиса - может быть валидация по правилам предметной области. Как-то так. Да.
Ну да ладно. Я так понял, меня почему-то посчитали троллем. Я не хотел таким показаться. Просто последнее время - нужно много кода на джаве смотреть. И меня просто смутило, что все проекты по разному выглядят. Такие вот дела.
>>2600297 Там несколько сотен кейсов, которые нужно держать в голове. Чуть накосячил и хубирейнт тебе нагенерит говна, что потом будешь в 4 утра в понедельник разгребать на проде.
А вообще. Чет вы мне понравились. Я наверное начну джаву учить и буду перекатываться. Все равно, считаю, что сидеть 5 лет на одном стеке - такое. С плюсов на шарп перекатился, думаю пора опять перекатываться. Так что если что - буду к вам захаживать. Да.
>>2600334 оказалось что жук платный. Бесплатная версия - самый минимум, скомпиленный под новейшей жабой (19). А чонить опенсорсное есть? Помню была queryDsl
>>2600403 У меня проект в продакшене на 11 жаве на фри жуке. Какие функции тебе обязательно нужны из платных версий? Лично я не заметил ничего прям совсем нужного.
>>2600430 Kotlin, scala, js+ts, чистый си, питон, го. Ну в крайнем случае плюсы. Шарп джависту учить смысла явно нет. На нем никаких общеинфраструктурных вещей не написано, в связке они с джавой не нужны. А ниша по сути та же - тырпрайз веб + умирающий виндовый десктоп и юнити. А просто учить голый язык без экосистемы - это бесполезно. Так можно и хаскель какой-нибудь разучивать.
>>2600444 На свежем у меня сервис на 17. 3.17 внутри активно использует 17 джаву(sealed types, records, instanceof pattern matching). На 11 жук 3.16 годовалый где-то. Генерация это основная фишка для запросов. Она и обеспечивает всю типобезопасность маппинга. Маппинг имен таблиц/колонок и типов колонок задается на уровне кодогенерации. И когда ты все сгенерил, ты не передашь в запрос хуй знает что в строчках, если пользоваться типобезопасными апишками. Но можно и так как на пике 2 писать, не понимаю, что у тебя не получилось. Апи без генерации приходится использовать для временных таблиц, типа сте или для создания таблиц или колонок в рантайме. И еще фишка генерации - все констрейнты и индексы тоже генерятся в код. Их поля, типы констрейнтов и имена. На уникальных констрейнтах и уникальных частичных индексах у меня завязана кое-какая логика.
>>2600460 Игры это по сути гуй. А игровые движки - специфичные гуй библиотеки. У жабы с гуем не задалось, особо удачных библиотек никогда не было. Шарп всегда был ориентирован на виндовый гуй.
Почему майнкрафт не берем в расчет? Чем он тебе не гейдев?
Так то на джаве игры встречаются время от времени, даже в стиме. Сходу помимо кубача вспомню project zomboid и mindustry. Просто так кости упали, что на джаве не нашлось завирусившегося игрового движка уровня unity, и как результат, не сложилось конкурентного коммьюнити, вот и все. А вообще - есть и движки на джаве (jmonkeyengine3), и нативные биндинги на графику (lwjgl). Какую нить индюшатину по фану слабать можно и сегодня.
>>2600473 Гуй формошлепский с гуем (или даже лучше сказать - HUDом) в играх не имеет вообще ничего общего. Ни целей, ни подходов к дизайну, ни решений. Бессмысленно пенять на свинги.
>>2600468 Тормозной твой батя был 16 лет назад, а джава со всеми новейшими оптимизациями побыстрее плюсов будет.
И геймдев есть, и майнкрафт как раз берём в расчёт - его доля на рынке больше чем всех юнитиподелий вместе взятых, умноженных на 10 раз. Так что это на петушарпе геймдева нет, а не на джаве. На джаве он как раз есть.
>>2600468 Тормоз - это ты. А в джаве с вычислениями все вполне себе неплохо, с учетом JITа, интринсиков, оптимизаций и всяких биндингов на нативные либы. Даже CUDA при желании прикручивается.
>>2600501 Ну вообще хз насколько это не тенденция. Возможно, тут сролял тот факт, что игорьки в основном всегда писались на плюсах под виндой, и все игровое коммьюнити разрабов уже тогда (когда не то что юнити - даже шарпов не было) все ходило под майками. А майки в свою очередь уже в дошарповые времена были ниибаца доминаторами в нише разработке на плюсах под виндой. Такой тандем явно имел в нише геймдева фору над sun/oracle, которые в игорьки никогда не играли.
Но ты прям ниибаца упрощаешь, говоря что:
>игровые движки - специфичные гуй библиотеки.
Это прям пиздец как неточно. Настолько неточно, что можно сказать - пиздеж, сорян. Каким бы клевым шарп ни был для проектирования десктопных приложух, никакое преимущество ему это не дает при разработке игр.
>>2600507 >>2600508 Когда юнити появился играми заведовали сони. У майков был писи рынок, который мало прибыли приносил. И только первый иксбокс, который и в подметки не годился второй плойке по охвату аудитории и прибыльности от игр.
>>2600519 Ну такое. Я вот посмотрел и первый год юнити вообще был онли под мак. А то что ты говоришь похоже на очередную теорию заговора по завоевание мира злым майкрософтом.
>>2600520 >Я вот посмотрел и первый год юнити вообще был онли под мак. Как будто что-то отменяет. Ты логику вообще понял, или лишь бы пукнуть?
>на очередную теорию заговора по завоевание мира злым майкрософтом. Какая ещё теория заговора, лол блядь? Это очевиднейшие, открытые факты, которые никто даже не скрывает.
Чел, ты смешон. Либо очередной неприкаяный вкатун, который никогда в реальном проекте не работал, но лезет к взрослым дядькам разжигать.
Какие нахуй гайды от майков. Какие харамы, что ты несешь, болезный? О чем ты вообще. Все гайды - хуйня, маня. На какой бы язык они не писались, если этот язык их не энфорсит, и не ебет программистов по рукам линейкой, валя к хуям компиляцию в случае хоть малейшего нарушения, никто никогда их соблюдать не будет. Просто прими это как факт - так работает мир разработки реальных приложений для человеков, с техдолгом и кранчами. Стайлинг решается лишь аппаратно-техническими средствами, и эти средств в джаве хоть жопой жуй. Были еще гоферы, пытались решить проблему стайлинга через ортогональность прям языка нахуй. Хуй их знает насколько у них это получилось. Но вот уж с кем с кем, а не с нубом-шарпистом говорить об ортогональности, ты и слова то такого наверное не знаешь.
Все остальные твои претензии - чисто твои загоны. Ты привык читать шарповый код, поэтому код на джаве априори будет для тебя непонятнее. Для меня - наоборот. И хули тогда остается ответить на твои выгладки и полотна, кроме как не послать тебя нахуй?
>>2600526 >Какие нахуй гайды от майков. Ты так говоришь, как будто бы эти гайды не хуйня из под коня и которые вообще нихуя не преимущество петушарпа. Обоссывание майкобляди стоит начинать не с того, что он пиздит, а с того, что даже если его манямирок это правда - это всё ещё хуйня.
>>2600517 Еще раз, чел. Майки были доминаторами в плюсах, и их доминаторство в этой нише было чуть ли не со времен первых виндовсов. Их плюсовый компилятор был лучшим среди конкурентов и единственным в своем роде. Все игры компилировались им, и линковались с их SDKями. Под майками был DirectX, выдававший в те времена лучшую производительность и не имевший конкуренции, на нем работали литералли все игры. Они на геймерском дерьме собаку сьели.
Причем тут влажные фантазии сонибоев с их соснолью и ее временным периодом успеха? Сколько сони существует со своим поленом, и сколько - майки.
>>2600528 > это всё ещё хуйня Ну не знаю... Когда в коммунити - люди плюс-минус в одном стиле пишут, имеют похожие структуры проектов, похожие структуры файлов с исходным кодом и т.д. как-то проще я считаю.. Вот опять же, в шарпе принято: class ClassName { //события //поля //конструкторы //свойства //публичные методы //приватные методы //реализации интерфейсов } Вот такая структура файла класса - в абсолютном большинстве исходников на шарпе. И это позволяет сразу открыть файл и понять куда смотреть. Я хз че такого плохого, когда в коммунити - есть принятый стиль и люди стараются его придерживаться.
>>2600526 > никто никогда их соблюдать не будет В коммунити шарпа - соблюдают в массе. В абсолютном большинстве проектов следуют гайду от майкрософта. А молодых сильно ругают, чтобы они тоже следовали. А упрощается следование тем, что в шарпе на уровне проекта, можно настроить кодстайл и отход от него будет генерировать варнинги. При этом - можно сделать так, чтобы варнинги воспринимались как ошибка, и соответственно твой проект просто не соберется, если ты сильно много себе вольностей в плане стилистики позволяешь.
>>2600557 Ну и нахуя ты опять натягиваешь сову на глобус? Ты сначала привел как пруф, что в джавовских проектах нет единой структуры проектов (и слава богу!), а теперь высираешься за порядок данных в классе, что и в джаве есть и что контролируется идеей, как будто я сказал, что слава богу что такой структуры нет.
Иди нахуй, пиздабол. Соблюдают в массе эти правила до первого кранча, когда всех на уши поднимут овертаймить и лишние условности отходят на второй план.
>А упрощается следование тем, что в шарпе на уровне проекта, можно настроить кодстайл и отход от него будет генерировать варнинги.
А в джаве значит по твоему такого нет? Одни шарписты до такого по твоему додумались, это ты мне хочешь чтоли сказать, кусок ты предвзятого дерьма блять?
Ты хули вообще включил евангелистскую шарманку то, чмо? Ты мне шарп свой нахуя продать пытаешься? Я и без тебя знаю что в любом серьезном языке существуют стайлинг-чекеры, мне твоя вот эта вот лекция обзорная по возможностям шарпа не нужна. Мой тезис не про то, у кого код чище. Мой тезис - в том, что ты - кусок дерьма, а твой гнилой наброс - продукт твоего воспаленнного надмозга, не имеющий никакой корреляции с реальностью, и не несущий никакого конструктива. Есть что по существу ответить? Нет? Вот и иди нахуй.
Почему шарперы за 25 лет так и не отошли от комплекса того, что они на клоне джавы пишут? Причем не только местные шизики шарписты. Вот дослушал https://youtu.be/1PvzqL2xdX8 и нарратив продолжается. >У нас это как в джаве >А это как в джаве, но лучше >А этого вообще нет в джаве >А этого, как в джаве нет, но потому что это нинужна. Откуда такая джавазависимость? А если зритель с джавой не знаком? Я вот десятки видосов про джаву видел. И нигде не упоминается Шарп. Всем тупо насрать на него.
Еще один с ебанутыми конспирологическими теориями, с целью разжечь.
Какой в пизду комплекс? Комплексы - у местных шизов-двачеров. А докладчики просто этим трюком расширяют целевую аудиторию доклада, чтобы не только шарписты могли понять о чем речь, но и джависты приобщиться. Или по твоему что - подкаст подлодки исключительно шарпистская тусовка чтоли?
Таких же отсылок к джаве можно найти в докладах по котлину и скале. По той же причине.
>>2600593 Послушай рассказ про джаву Тагирки там же. Джава в свое время отталкивалась от плюсов. Но он это в начале сказал и о плюсах забыл. А тут я про джаву слышал постоянно. Этот подкаст для не знакомых с языком. И если бы не был знаком с джавой, писал бы только на питоне или жсе для меня бы эти отсылки к джаве только добавляли непоняток. Я слушал их подкаст про го, питон и ерланг и нигде нету таких постоянных ссылок на другой язык.
>>2600597 И на основе этого всего ты сделал вывод о каком то комплексе? Ты дипломированный психолог? Или как это у тебя работает?
>И если бы не был знаком с джавой, писал бы только на питоне или жсе для меня бы эти отсылки к джаве только добавляли непоняток
Ну так поэтому их там и не делают. Питон в каком месте на джаву похож? Вообще и в каком. А в шарпе с джавой очень много схожих черт, поэтому джависты отсылки поймут - можно и вставить. То же самое и с Тагиркой. Какой смысл делать много отсылок на плюсы, если джава с плюсами практически ничего общего не имеет?
>>2600593 >>подкаст подлодки исключительно шарпистская тусовка чтоли? это ж вроде какие то яндексоиды? в любом случае про жабу там вряд ли будет что то толковое, лучше жокера навернуть
>>2600598 А кто основные столпы джавы, кроме оракла, редхата, вмваре и ибма? Нетфликс и линкедин пилят инфраструктурные продукты. У Амазона есть jdk. Гугл вроде уменьшает вложения в экосистему джавы. Эпл и Фейсбук что-то внесли в джаву?
>>2600602 >>Питон в каком месте на джаву похож? в котлине >>поэтому джависты отсылки поймут но зачем жавистам слушать про пеушарп? Я уж лучше го поковыряю или жс обмажусь - пользы и то больше будет.
>>2600623 Спринг: >>2600621 И какая польза от этих ждк? Никто ими не пользуется, а если и пользуется, то за секунду перейдут на какой нибудь беллсофтовый или боже упаси оракловый.
>>2600621 Не скажи. Основные контрибьютеры крупных штук типа спринга как раз в основном сидят на зарплате. Рандомные челики забегают чето фиксить в основном тогда, когда сталкиваются сами с каким нибудь дерьмом и им нужен фикс лично.
Обычно ждк в основе своей - тот же самый хотспот что и опендждк. Но дополнительно эти кастомные ждк могут добавлять свои уникальные фишки, типа AOT (Excelsior Jet) или GC (Azul). В перспективе наработки этих вендоров могут уходить в апстрим.
>>2600621 >99,(9) спринга пилится Командой, которая сидит на зарплате у VMWare. Какой-нибудь Netty пишется челиками из Гугла, Эппла и прочего фаанга, которые там на зарплате и используют эту либу для своих поделок. Лид проекта вообще сидит на зарплате у Эппл. Какой-нибудь gRPC пилится инженерами из гугла и всякие клиенты для того же котла или джявы снова пишут зарплатные из гугла. ELK стек пилится инженерами из самого эластика, которые там на зарплате. Кейклоак, кваркус, инфиниспан - редхат, хейзелкаст - снова ребята на зарплате.
Сап, двач! Имеется: разраб на удаллёнке в одной маленькой конторе в г. Казань Стек разраба: Java + Postgres Стаж: около 2-х лет (2 года ровно в мае) ЗП в конторе: 75к на руки Параллельно проверяю java-домашки по Spring на местном сайте с обучением программированию На следующей неделе должны в конторе повышать ЗП. Перед повышением хотят услышать мои ожидания. А я без понятия сколько можно просить? Хочется 150+, но не нагло ли просить в 2 раза больше? Есть страх отказа и что буду смотреть на меня косо, если назову слишком большую цифру Как грамотно просить повысить ЗП? Знакомые получают все по-разному, но все больше, чем я (с аналогичным стажем или меньше) Сейчас джуны, у которых я домашки проверял, на 70 - 100 к залетают
>>2600848 Называешь цену, например 300к, тебе говорят максимум 150к, говоришь b + (a - b)/2 (где а - твоя последняя цена, b - их последняя цена) итого 225к, если отказывают и не предлагают новую цену, решаешь соглашаться или нет. Если предлагают новую цену выше, например 180, говоришь 202,5 и т.д. пока не сойдетесь
Насколько реально нарваться на обман в вакансиях, где вкатыша могут эксплуатировать и нахуй послать? Попадаются периодически подозрительные вакансии, где единственными требованиями стоит наличие любого опыта на хотя бы одном из представленных яп, адекватность и желание учиться? Ага блядь, вот так просто взяли вкатуна и начали ему попку подтирать? В чем подвох? Там могут неиронично выбирать лучшего из 10к резюме месяцами?
>>2600848 Идёшь собесишься и получаешь офферы на 300к/сек, после идёшь к своему начальству и говоришь, что меня зовут на 300к/сек, а тут я получаю копейки. Они сразу тебе предложат больше, если захотят удержать, если же нет, то пишешь заявление и уходишь.
>>2601039 Сложно найти применение плюсов для джависта. Разве что писать инфраструктурные штуки, где нужны будут платформозависимые байтоебские вставки. Или лезть читать кишки jvm. Больше кейсов не могу придумать.
Есть 2 сервиса в одном приложении, есть webflux. Для каждого из сервиса делать по своему webfluxconfig-у с разными baseurl и некоторыми мелочами или делать один конфиг и потом отличия ручками прописывать во время деланья реквестов? Какой в этих случаях best-practice?
>>2601028 Свинья смеется над убогим выебоном омежки вместе с кабаном. На ближайших 50 дейликах как минимум раз тебя да вспомнят. На 51 день кабан ебёт свинью и платит ей за это 450к.
>>2601332 я дебажил... я не понимал нихуя что происходит, он меня по хз чьему коду дрочил. дебажить фреймворки - это не мой лвл. я по старинке через sout проверял, объекты с бд приходили, а ответа от сервака не было, что добавляло только больше вопросов...
>>2601332 >toString я видел, что его всегда переписывали, но я думал это просто для удобного вывода объекта в консоль, а мне это не нужно было, поэтому я не стал его переопределять
>>2601369 да, причем скорее всего одним из самых неоптимальных способов. При том что взаимодействие с бд это бутылочное горлышко. А чтобы заставить jpa делать оптимальные запросы, нужно хорошо знать sql + очень хорошо знать кишочки хибернейта и его грабли и ограничения. Сперва вкатуны радуются что всё работает, а вот потом с опытом приходит понимание, что за это нужно платить, и плата слишком высока
у меня получается хуевый json, но зато с таким подходом в бд меньше места занимает хранение. если role убрать из movie_person_role и добавить в person, то будет все наоборот. какая практика лучше?
>>2601400 т.е. всегда можно по сути написать свой запрос? при чем лучше не доверять это хибернейту, а самому его написать? как на пикриле? просто не понятно зачем jpa использовать, если ты запросы сам пишешь все равно? в любом случае, если sql знаешь, написать свой запрос не сложно и не долго, в чем тогда преимущество jpa?
>>2601413 >в чем тогда преимущество jpa? ну типа там автоматически работают инсерт, апдейт и дилит, не надо их руками писать. Ещё getById есть искаропки. Ну ещё может что сущность не надо руками собирать, все поля автоматом проставляются из результата запроса
>>2601403 >у меня получается хуевый json >с таким подходом в бд меньше места занимает хранение
JSON на рестах и сущности на уровне БД не имеют, не могут иметь и не должны иметь ничего общего. У тебя явно есть косяк где то в декомпозиции на слои. Ты сущности ORM случайно не отдаешь как респонз из рестов?
Чтобы у тебя не возникало таких дилемм, никогда не делай ORMные сущности ДТОшками на рестах. У рестов должны быть свои структуры, у базы - свои. Тогда ты сможешь БД и ресты развивать независимо друг от друга.
Выгрузил сущности из сервиса, преобразовал их в рестовые сущности, отдал. Преобразовывать можно руками, удобно это делать через стримовые map. Еще слышал об инструменте object mapper, который вродле как и создан для таких преобразований, но я его не пробовал.
>>2601463 >Выгрузил сущности из сервиса, преобразовал их в рестовые сущности, отдал. т.е. это надо в слое контроллера делать? не лучше в том же сервисе?
>>2601476 >т.е. это надо в слое контроллера делать? не лучше в том же сервисе?
Это вопрос дискуссионный. Я оставлю ответ на него на твое усмотрение, ибо считаю что на новичковом уровне ответ на него не так сильно важен. Попробуй так и эдак, огреби граблей, тогда и обсудим.
Что нужно знать в кафке, чтобы добавить ее в резюме вкатышу? Достаточно набросать пет с консумером и продюсером, прокинуть пару раз мессаге или там чет еще есть из обязательного к ознакомлению?
>>2601476 Мой подход в том, что в контроллере только то что нельзя спустить на уровень сервиса. Аннотации с хттп маппингами параметрами, аннотации валидации и отлов их ошибок, всякие аннотации свагера. Логирование запроса. Все остальное, включая маппинг дто лучше спустить на уровень сервиса. По формированию конечной дто. Тебе в дальнейшем возможно придётся дообогащать свой ответ ещё запросами в базу или в другой сервис. И вызов других сервисов и репошек это явно не дело контроллера. Советую попробовать моделмаппер. Он медленнее чем мапстракт из-за рефлексии, но проще в использовании.
>>2601561 >>а если у тебя сучность на 20+ полей? Назови поля в дто также как в сущности - и оно само смапится. С агрегированными данными тоже канает. Типы жук сам подгонит, если надо.
>>2601565 >>моделмаппер. Он медленнее чем мапстракт из-за рефлексии, но проще в использовании. Мне он тоже казался проще, но с мапструктом сложно только в первый раз. Потом уже не оторваться.
>>2601561 Если у тебя полный update, всех полей или insert, то там вовсе не обязательно сетить по одному. Преобразуешь сущность в jooq рекорд и сохраняешь все. https://stackoverflow.com/a/54131550
>>2601566 Хз как. Меня на нынешней работе с жуком гоняли по хиберу на собесе. Не сильно конечно, но я тогда жука не знал. Проходил кстати стажировку на одном легасиговне. И там кроме хибера были хранимки на 100 строчек в jdbcTemplate
>>2601591 У меня на проде бесплатный и не помню случаев чтоб платный нужен был. Разве что для жсонб постгреса методов у него нет, но не факт что в платном они есть - решается просто постановкой стринги с sql запросом. Но такой автомапинг это магия, надо соблюдать осторожность - проебешься с неймингом и не покроешь тестами - словишь нулы в неожиданных местах.
>>2601403 похоже, с моими связями в таблице, используя маппинги хибера невозможно сделать так, чтобы дубликаты персон удалились, а их роли объединились в список и были добавлены в объект персоны.
для такой реализации, как минимум нужно добавлять поле List<Role> в сущность Person, а так нельзя, потому что Person уже связан с Role через MoviePersonRole... т.е. остается только убирать связь role ---< movie_person_role и делать role ---< person? но тогда, как я уже говорил, это будет неэффективно с точки зрения занимаемого места в бд... ебнуться просто
>>2601635 хочу, чтобы возвращался один шварц, со списком ролей внутри себя (снова пики скину).
как уже выяснили, мой жсон сейчас работает исключительно по связям таблиц. т.е. хибер возвращает результат из бд, а джэксон (или кто там этим управляет?) собирает мне жсон на основе ответа. так делать не надо, лучше создать DTO, которое я буду возвращать пользователю.
я сейчас пытаюсь это DTO собрать, пока оно у меня такое (пик3). и тут начинается проблема, Person у меня не содержит List<Role> , вместо этого он связывается с MoviePersonRole (пик 4), собственно поэтому я и имею пик 1.
чтобы MovieDTO работало так, как мне надо, мне надо либо поменять эту связь Person с Role через MoviePersonRole, что приведет к неэффективному хранению на бд (так что этот вариант не подходит), либо... либо я должен как-то собрать этот объект сам, чтобы его структура была какая мне надо persons: [ _person: { __firstName: "asda" __roles: [ ___ .... __] _} ] и я уже голову всю сломал, как это можно сделать стримами, плюс сам их синтаксис кажется какой-то кашей, в которой только путаешься больше. бля... это даже объяснить все сложно... либо я упускаю какой-то момент и не понимаю
>>2601641 Либо мне надо создать какой-нибудь PersonDTO, где будет List<Role> и который я буду передавать в MovieDTO ( List<PersonDTO> )? DTO - это же по сути просто вспомогательные классы? т.е. это даже не сущности? и связей в них нет никаких? я просто думаю как эту структуру описать в этом MovieDTO, не меняя связей в бд....
>>2601695 Перенеси это на уровень сервисов, в контрллере логики быть не должно.
var uniquePersonMap = moviePersonRoles .stream() .collect( Collectors.groupingBy(x->x.getPerson(), Collectors.mapping(x->x.getRoles)) пишу без ИДЕ - сам поправишь/допишешь под свои классы
var personsDto = uniquePersonMap.entrySet() .stream() .map(m -> newPersonDto(m.getKey().getName,m.getValue())) .collect(Collectors.toList())
Ну и далее в таком духе. Стримы это стильно, модно, молодежно. А циклы и мутабельные листы - ебанина какая то.
PS какая версия жабы? Если 11+ используй var, а то рябит от типов. Идея подсветит что там в варе, если запутаешься.
>>2601794 и что не так? к чему доеб вообще? если ты к самой конструкции, то она вся такая. ты мои связи в таблице видел вообще для начала? а писал я это в лоб через циклы, чтобы хотя бы написать в принципе эту хуйню
>>2601768 ты вообще иди на хуй, у меня 5 часов утра уже было, и до этого я сидел без вылазно 18 часов, прогал свою хуйню, я даже не помню как его ставил вообще
>>2601729 тут кто-то писал уже что его настраивать сложно, поэтому не стал. про modelmapper тоже читал, немного, не понял преимуществ, поэтому пока не стал юзать (потом мб попробую получше вникнуть в эти мапперы)
>>2601746 проблема еще в том, что я стримы не особо знаю. не знаю их всех возможностей, до этого пытался только через map и distinct решить задачу, но получалась лапша вложенная, от которой башка взрывалась только. у них синтаксис пиздец специфичный для меня
>>2601821 >у меня 5 часов утра уже было Ты просто не понимаешь как работает спрэнг, чел... Просто не лезь в айти. Иди лучше таксуй или грузаном в пятерочку - пользы кратно больше будет.
>>2601836 >>и что не так? к чему доеб вообще? - Глобальные переменные, некогда объяснять, вы будете локальными. Ты, List<Role> roles будешь списком, то есть списочным массивом с одним элементом, увидимся на следующем шаге.
>>2601821 >>и что не так? к чему доеб вообще? - Глобальные переменные, некогда объяснять, вы будете локальными. Ты, List<Role> roles будешь списком, то есть списочным массивом с одним элементом, увидимся на следующем шаге.
>>2601858 так я должен же как-то проинициализировать значение в мапе, когда его добавляю впервые, оно у меня - список. он может быть как из 1 элемента, так и из нескольких (у одной персоны может быть несколько ролей). о каких глобальных переменных вообще идет речь? ты хочешь сказать, что List<Role> должна быть глобальной? или что?
Не отвечайте этому вкатуну с кинопоиском, он уже неделю со своей хуйней анонов доебывает, хотя по-моему уже всем очевидно, что он там себе надумал исполнить нихуя не сможет. А если вы за него все сделаете, то он энивей ничему не научится. Пусть пиздует разбираться а стримах и прочей хуйне, которую не знает.
>>2601872 с чего ты взял вообще что за меня тут кто-то что-то делает? я только спрашиваю про практики и другие улучшения того, что уже сам сделал, потому что хочу знать как правильно. >Пусть пиздует разбираться а стримах и прочей хуйне, которую не знает одно другому не мешает, нахуя ты меня ограничиваешь источником инфы? ты вообще знаешь сколько у меня вкладок блядь открыто с разной инфой? скажи, ты шиз? тебе внимания не уделяли в детстве? или с чего твоя жопа так подорвалась?
>>2601746 я в итоге так переписал, стало чуть лучше, вроде... алсо, к стримам надо привыкнуть и про их методы почитать. groupingBy оч полезным в данной ситуации оказался
>>2601880 Вкатун с кинопоиском, все ты правильно делаешь, ты молодец. Не слушай хуесоса выше. Разве что простыни текста мог бы делать покороче, читать очень сложно. Я бы тебе помог, но хибера почти не знаю.
>>2601880 Такой дроченый маппинг, тем более написанный руками точно должен быть в сервисе. Контроллер по-хорошему вообще не должен видеть класс с сущностями, только дтошки.
а как насчет такой практики? я вообще решил создать конструктор для того, чтобы можно было в контроллере просто передать Movie, который преобразуется в MovieDTO и возвращается клиенту >>2601880
>>2601954 я уже задавал этот вопрос итт, мне сказал один анон, что надо на практике самому и так и так попробовать, а когда с проблемами столкнусь, тогда и можно будет порассуждать на тему как лучше - в сервисе или в контроллере. алсо, я тоже логически больше склонен к слою в сервисе, но с другой стороны от сервиса же по сути требуется только вернуть обработанные данные, но под обработкой я подразумеваю какие-то специфичные обработки, типа исключения чего-то не нужного, объединения, добавления, запросы мб какие-то другому сервису. а контроллер по сути просто должен или не должен преобразовать эти обработанные данные в DTO.
еще такой вопрос, если из бд приходит сразу все что нужно, например всего два поля с id и name, нужно ли сверху еще наворачивать абстракцию в виде DTO, которая будет возвращать абсолютно те же данные? я понимаю, что если есть вероятность изменения этих DTO, то об этом можно заранее позаботится, но если такое неизвестно заранее?
Ребята-програмята, я устал. В 2020 году начал свой вкат - и сначала я вкатывался в Python, хотел сделать свой YouTube на Django. Потом вкатывался в JS. Потом - в Android-разработку, учу Java и Kotlin. Потом решил вкатиться в блокчейн-разработку - и учил Rust с Solidity. Теперь, наслушавшись историй про то что IT-рынок сейчас в кризисе, решил идти на бэкенд-разработку - ведь в ней, по словам экспертов, возможности получить работу выше. Но не могу определиться, куда пойти: в Java Spring или в C# .NET Core.
Параллельно теплится в душе надежда сделать игру на C# Unity и заработать на ней миллионы долларов - после чего стать директором своей Rockstar Games и прикуривать от стодолларовых купюр.
Помогите мне, дайте совет: куда пойти и что делать? Инбч иди нахуй
>>2601975 >>сказал один анон, что надо на практике самому и так и так попробовать Анон какой то хуеплет попался. Ты конечно можешь как хочешь писать, но каждый первый, кто увидит код, будет тебя заебывать вопросом, а почему у тебя толстые контроллеры, что мешало убрать все в сервисы. Бест практис или шаблонное мышление - уже другой вопрос.
>>от сервиса же по сути требуется только вернуть обработанные данные там вся логика, он для этого как бы и нужен. У тебя при правильном подходе там ничего и не будет - достал и репозитория, передал мапперу, вернул результат. Но в проде там могут быть еще какие то запросы в другие сервисы, проверка доступов и ролей (чтоб не выдавать фильмы 18+ если ты не указал возраст, например), все что придумает кабаныч
>>а контроллер по сути просто должен он должен передать запрос в сервис и отдать то что получил, изредка если что то и преобразует это не связано с логикой, а с форматом отображения, ресурсом и тп.
>>преобразовать эти обработанные данные в DTO. это делает маппер на уровне сервиса. В контроллере тоже конечно можно, эта не считается ошибкой, но маппер может менять данные перегоняеммые между методами внутри сервиса и зачем его тогда лишний раз размазывать по слоям и подключать везде
>>что думаешь про это? я б мэпстракт использовал, но если не умеешь - то можно конечно и так.
>>нужно ли сверху еще наворачивать абстракцию в виде DTO ты ж на джаве пишешь - всегда нужно больше абстракций
>>2601975 >если из бд приходит сразу все что нужно, нужно ли сверху еще наворачивать абстракцию в виде DTO Ну за всех сказать не могу, но у нас обязательно. Для контроллеров есть интерфейсы и они лежат в отдельном апи мавен-сабмодуле, вместе с дтошками. А вся реализация в сабмодуле импл. Ну и апи ничего не знает про импл, импл зависит от апи. Поэтому я вообще не могу отдавать не-дтошки. Но видел продовый код, где таким не заморачиваются. >>2601958 В архитектуре, на которой я работаю так сделать нельзя, дто ничего не знают про энтити. Можно сделать наоборот, ебануть конвертер внутри энтити, но это тоже не очень. Лучше иметь отдельный метод контвертер в сервисе или класс-конвертер, или маппить с помощью библиотек.
Абстракции конечно хуево ооп пидоры до сих пор лепят интерфейс для единственного сервиса, но джава это обычно сурьезный бизнес и попавшая на слой представления ентити может потом создать проблемы, поэтому лучше сразу привыкать писать везде полностью контролируемые дто.
Народ,вы писали диплом на джаве? У вас его хоть раз запускали или тупо пролистали код? Мне лень хуячить фронт к диплому и я думаю тупо сделать пустую формочку и нафотошопить туда данных,бэк делаю по честному. Какие подводные?
>>2602881 Все просто, чекай пакеты. Если пакет начинается с jakarta.persistence (как у Entity), значит это JPA. Если org.hibernate - значит хибернейт. Ну а если org.springframework.data - значит Spring Data.
А вот ответь, козлина, кому тогда отвечать то? Очередному сотому по счету нытику, проходящему в прямом эфире пять стадий принятия, задерживаясь на торге и депрессии, вместо того чтоб взять и хоть что то попытаться сделать? Кинопоиск-анон хоть пытается понять и хоть пробует штуки, собирает грабли и учится, вместо того чтобы в тысячный раз на двощах разжечь тупой и бессмысленный срач с шарпистами, выклянчить роадмап или поплакать о том, что вакух на стажерство не осталось в РФ.
Презираю таких как вы. Кинопоск-куну мое уважение.
>>2601958 Согласен с предыдущим аноном. Если есть какая-то логика в маппинге, то у нас на проекте создается маппер-сервис и в нем методы toDto(), toEntity(). Если логики нет, то просто используй jackson, встроенный в спринг. new ObjectMapper().convertValue(entity, EntityDto.class) алсо new ObjectMapper() можно просто инжектнуть
Сам ты хуеплет блять. Хули толку челика вдобавок еще и бестпрактисами душить? Таких душнил и без тебя у него на будущей работе хватать будет, он еще тридцать раз от них выгорит и станет постоянным клиентом у какого нибудь психотерапевта, ибо иначе с вами уродами работать тупо не возможно.
У него и без практисов щас приключений хватает. Пусть доделает проект до конца, хоть по-говенному, но до конца, чтоб работало.
>>2603062 Хуя ты порвался, большинство сами сидят и разбираются, а не на двощах срут своими простынями. Надеюсь этот вкатун к тебе в контору попадет и будет подходить каждый час спрашивать как комит сделать, спок, шиз.
>>2603072 >>бестпрактисами душить? Чел не знает как правильно и спрашивает совета, а ты ему говоришь "делай как хочешь" - считай что нахуй посылаешь. Он сам не знает как хочет.
>>Таких душнил и без тебя у него на будущей работе хватать будет Хуй знает повезло мне так или нет, но мне ни раньше ни сейчас никто почти не говорит как же правильно. Может "душнить" не хотят, а может и сами нихуя не знают. А может просто всем похуй - твой код ты и ебись. Критика по существу лучше равнодушия.
>>он еще тридцать раз от них выгорит Потому и выгорит, что не знает как надо. На работке и так куча всего нового будет, чтоб еще и охуевать, что последний год делал все неправильно и теперь надо переучиваться.
>>иначе с вами уродами работать тупо не возможно. Тут двачую, спрашиваешь как правильно принято у вас уебков, а такой тебе отвечает "пук среньк делай как считаешь правильным". Всегда проще сначала научиться идти по рельсам, а не блуждать в потемках.
>>У него и без практисов щас приключений хватает. Ему эти беспрактисы помогут пройти приключения проще. Их не просто так придумали и назвали соответсвенно..
>>2603182 Ну и заебись. Я много людей менторил и онбордил, мне не западло на вопросы вкатунам отвечать. А вот с таким гнильем как ты я бы предпочел никогда не работать.
>>2603195 Ок, как скажешь. Считай так если хошь, я буду считать иначе.
Мне это дерьмо джавистское под названием "бест практисы" всегда мешало. А решенная до конца задача - всегда мотивировала двигаться дальше. И по настоящему расти в синьорность я стал только тогда, когда пришел для себя к выводу, что "бестпрактисы" - всего лишь не имеющий под собой никаких обьективных обоснований свод пустых стереотипов. Фанаты "бестпрактисов" и их поделки, попадавшиеся мне по пути, редко из себя представляли хоть что-то достойное, поэтому сорян за мой скепсис, я никогда не стану пропагандировать это дерьмо. Сами варитесь в этом котле. Я - по обьективным вещам, а не по фанбойству.
Вики по вкатыванию в джаву: https://github.com/java2ch/java-thread/wiki
- - Пять вопросов из предыдущего треда:
- - - - 1. Кто-то пробовал mjc school? Стоит того?
- - - - 2. На днях буду изучать spring, после буду проект писать для интервью.
Скажите, на spring только сайты пишут ? Или можно лаунчер для майнкрафта написать ?
- - - - 3. Аноны, есть две @Entity, скажем Person, с полями name и age, Payment с полями employeeName и amount. Как мне через JPA получить третий объект, представляющий джоин этих двух энтити?
- - - - 4. Пачиму нельзя скопировать модуль расширения dashchan встроенной функцией идеи? Выдает ошибку Error adding module to project, причём без какой-либо дополнительной инфы. Зато если в полу-ручном режиме скопировать папку и переименовать там классы с файлами, то всё работает как положено
- - - - 5. Посоветуйте, пожалуйста, хорошую книгу, чтобы понять ООП и объектный дизайн.
Предыдущий: