
Летний тред лучшего языка на планете.
1. Ресурсы:
— https://learn.microsoft.com/en-us/dotnet/
— https://ru.stackoverflow.com/a/416585/422180
— https://metanit.com
— https://professorweb.ru
— https://github.com/uhub/awesome-c-sharp
— https://sharplab.io/
— https://www.jimmybogard.com/you-probably-dont-need-to-worry-about-mediatr/
— https://cezarypiatek.github.io/post/why-i-dont-use-automapper/?utm_source=chatgpt.com
2. С# для веб
— https://docs.microsoft.com/ru-ru/aspnet/core
3. C# для десктопа
— https://docs.microsoft.com/ru-ru/dotnet/desktop
4. С# для игр
— https://ru.stackoverflow.com/a/609901/422180
5. С# для мобильной разработки
— https://docs.microsoft.com/ru-ru/dotnet/maui
6. Годные ютуб-каналы
— https://www.youtube.com/c/CODEBLOG
— https://www.youtube.com/c/AndreyShyrokoriadov
— https://www.youtube.com/c/DevJungles
— https://www.youtube.com/user/Shmachilin
— https://www.youtube.com/c/Elfocrash
— https://www.youtube.com/user/IAmTimCorey
Шапка: https://pastebin.com/HT7Hi6FD
Прошлый тред: https://2ch.hk/pr/res/3395748.html (

> Предлагаешь ручками писать конвертеры дтошек?
предлагаешь ручками писать конфигурации маппингов конвертеров дтошек?
А почему на ОП пикче голанг разработчик?
>писать на подмелкомягком платформозависимом вбенчмаркахсосущем гетсетожужжащем языке в 2025
В конфиге автомаппера приходится РУКАМИ писать методы-конвертеры.
То есть кода с говёным автомаппером получается БОЛЬШЕ, чем без него.
Впрочем, за это его и любят нубы: нахуярил конфигов и можно коммитить - вроде как не бездельничал.
Сишарп*
Например, нужно читать большие файлы в десятки гигабайт и обрабатываться чанками.
Вот так написал хейтер new:
while ...
byte[] bytes = reader.ReadBytes(count);
После чего был обоссан, выебан ножкой от стула и выгнан на мороз с волчьим билетом.
Если размер файла 16 Гб, а count = 16K, то получаем всего лишь миллион аллокаций массива. Зато new нет...
с new было бы в два раза больше аллокаций
byte[] buffer = new byte[count];
while ...
int n = stream.Read(buffer, 0, count);
Единственная аллокация с new.
Да, можно пойти ещё дальше, сделав буфер полем класса, статическим полем класса или, более того, заюзав пул, но это уже мелочи.
Факт в том, что хейтеры new - имбецилы. И пока вы существуете, я ценюсь выше как специалист.
если это на разок считать данные скриптом - то и похуй. Главное, что ЗАПАХОВ кода нет. По хорошему, надо спрятать метод ReadBytes за автомаппером чтобы был достаточный уровень абстракции
Абстракции всегда текут. ИЧСХ, текут говном. Там не просто ЗАПАХ, там ВОНИЩА!

Я же вчера скидывал, как правильно делать. Просто рефлексией пробегаешься по всем классам в сборке и конфигурация готова
> пишет мапперы
Я, если без шуток, в ахуе, откуда берётся столько маппинга у людей.
Видел на проектах вплоть до 6-7 слоёв. А всё потому что ебутся с медиатром, в котором нельзя методы вызывать по нормальному и все аргументы надо объектом передавать.
ПРосто выкидываешь медиатр, и автомаппер автоматически становится не нужен
То ли дело лобком генерировать гетсеты и не иметь ни одной нормальной комьюнити иде с коробочным спрингом...
>подмелкомягком
У дотнета лицензия то посвободней будет чем у наших дорогих друзей
>платформозависимом
Вылезай из криокамеры
Потому что джависты перекатывают, у них аллергия на джаву здорового человека
Про ArrayPool слышал, обоссышь?

Умение способный уникальное учен
ик. Мы втроем шли по тропинке ноги топали по мягкой мокрой грязи издавая шлепающий звук Сегодня днем шел дождь и от него земля была грязной а ноги липкими Ботинки были порваны
>Установите в IDE расширение
Какое? Вроде такой функции нет и там минимальная поддержка. А так да, бывают сложные мапперы и нужно как следует посидеть и тщательно написать код, а затем тесты на мапперы
Ну и нахуя перекатили? Чтоб ещё пару ебланов закатились и себе жизни поломали? На Линкедине половина вакансий создана чтоб обучать нейроHRов, четверть чтоб компании показывали свой рост перед инверсторами. Оставшаяся четверть ищют людей-оркестров с функционалом айтиотдела на зп в 2к баксов.
Потому что круговорот финтеха, где сидят одни и те же 50 летние жабисты/плюсисты этот круговорот начавшие. В геймдеве на позиции шарпистов нормально мест есть, про бугор ваще молчу.
В гейдеве традиционно низкие зп и ублюдочные мрази на менеджерах. Без исключений.
За бугром дотнет умер. Из реальных вакансий либо знание какого-нибудь нахуй не нужного датского и ворк пермит с хождением в офис в Эйхуйнахуйховене, либо ебаный человек-оркестр в стартап за три копейки, чистить говна за паджитами.
>В гейдеве традиционно низкие зп
База. В гейдеве найти норм зп это как в лотерею выйграть. В ентерпрайзе в 10 раз легче.
>За бугром дотнет умер.
База x2. Зряплаты на уровене таксистов уже давно.
Опять тег проебали.
Ну хуй знает, с чем ты там сравниваешь. Я уже почти десять лет работаю за бугром в нормальных компаниях.
Да. Одно только включение автомаппера в код добавляет сомнений и тряски над каждым свойством
А что если это свойство используется неявно...
А что если это свойство НЕ ИСПОЛЬЗУЕТСЯ неявно, но это так и должно быть...
Особенно какая-нибудь ебень, когда автомаппер встроен в дженериковый метод, типо "GetEntityById". Это вообще пиздец, можно сразу вешаться

про необходимость накрутки стажа осведомлен
И дополнительный вопрос. У большей части просмотренных вакансий есть пункт "знание реакта - большой плюс", или что-то такое. Нахуя им нужно мое знание джавы, если вакансия для шарписта? Мне ее действительно нужно хотя бы до базового уровня довести будет, или можно забить на первых порах?
Заранее спасибо
>чтобы хотя бы на стажировку залететь самоучке без бумажке
Да нахуй ты нужен? Ну ты, конечно, можешь попробовать прикоснуться к прекрасному, но я бы нахуй послал разгребать пейфон и джаваскрипты

>Т.е. ваш говномаппер в рантайме через рефлексию поля сетает, лол
В этом его главное приемущество. Благодаря позднему связыванию объекты не зависят друг от друга, а разработчик может не беспокоиться о том, какие свойства куда замаппятся.
Всё работает само и бесплатно, а тебе только остаётся зарегистрировать маппинг один раз при старте проекта.
>в рантайме через рефлексию
>бесплатно
>один раз при старте проекта
хорошо, что вас, мерзких гандонов, не пускают на нормальные проекты. сидите дальше црмки пилите, уроды
>выбрал c#.
Беги пока еще не поздно, свичься в джависты и живи нормально с освоеным спрингом, жрать везде найдешь (кроме геймдева, но там впринципе жрать нехуй)
>Нахуя им нужно мое знание джавы, если вакансия для шарписта?
Потому что ищут фуллстеков за 3 рубля и хотят натравить тебя на то что паджиты не доели, ибо недурные. По делу - забей на рекакт и просто освой js, он простой и тебе хватит, а все их местные фреймворки подтянешь там где возьмут. Максимум доку прогляни чтобы с умным видом что-то проквакать на собесе
>спрингом
И ебись с десятилетними DDD агрегатами и AOP в XML. Java стек собрал всех ёбнутых долбоёбов, там до сих пор этой хуйнёй занимаются
>Беги пока еще не поздно, свичься в джависты
Я бы в бэк хотел уйти, после того, как хотя бы минимально в профессии освоюсь. Красить кнопки как-то мех, учитывая, что я не дегенерат.
>По делу - забей на рекакт и просто освой js, он простой и тебе хватит, а все их местные фреймворки подтянешь там где возьмут.
Хорошо, спасибо.
Лучше ебаться с этой хуйней за нормальную зепку чем с голоду помереть
Ты java с javascript часом не путаешь? Языки то разные и области тоже. Бежать я советовал в java а не js
Не понял из сообщения прошлого.
А в чем разница между шарпом и джавой? Бэк же и на том, и на том пишется, и с вакансиями проблем нет особых, судя по хедхантеру.
>А в чем разница между шарпом и джавой? Бэк же и на том, и на том пишется, и с вакансиями проблем нет особых, судя по хедхантеру.
java это ёбаный всеми трижды обоссаный спринг, разгребание XML, DDD, паттерны, ГОФ и хуй знает как собранный проект из кусков байткода 2008 года
c# это современный язык общего назначения и более адекватное сообщество разработчиков, приятная система пакетов в нугете и хайлоад.
Долбоёб, стдлиба это не обязательно плюсовая стдлиба. Это просто любая стандартная библиотека.
Ну окей, давай покажи какая "львиная" доля System до сих пор прибита к винде и не работает на линуксе.
>А вот у джавистов ничего из перечисленного нет.
Включая гетсеты которые они генерируют руками лобком
>А? Куда свободнее GPL?
Ну например отсутствие требования на публикацию сырцов форка, уже сильно свободнее
>Не говорите ему что львиная доля стдлиба только для шинды.
Платформозависимый код заключается в следующем:
Сокеты
Треды и локи
Файловая система
Консоль и дескрипторы окон
Импорт библиотек
Все работает из коробки под всеми заявленными платформами кроме потоков на вебассембли, хз о чем речь.
> Включая гетсеты которые они генерируют руками лобком
Так трясёт, потому что ИТТ свиньям не дали такого же и надо ручками натыкивать?
> требование не ограничивать выданные свободы
Так куда свободнее GPL?
> Платформозависимый код заключается в следующем:
> Сокеты
> Треды и локи
> Файловая система
> Консоль и дескрипторы окон
> Импорт библиотек
> Все работает из коробки под всеми заявленными платформами кроме потоков на вебассембли, хз о чем речь.
Что сказать-то хотел? Лишь бы высрать тебе что-ли?
>Так куда свободнее GPL?
Ты жопой читаешь? Сравни степень разрешительности MIT (под которой дотнет) и GPL
>Что сказать-то хотел? Лишь бы высрать тебе что-ли
Да просто думал с человеком а не с дебилом разговариваю который не знает как обеспечивается кроссплатформа и какие ньюансы у нее, my bad
>Так трясёт, потому что ИТТ свиньям не дали такого же и надо ручками натыкивать?
Та как будто это единственная проблема жабы. Она просто самая ощутимая после шарпов, к хорошему увы привыкаешь быстро. А вот условные деревья выражений, методы расширения и еще масса мелких но приятных фич, включая unsafe может и не пользуется большим спросом, но после вольностей шарпа такое ощущение будто сел писать на визуалбейсике который почему-то похож на шарп и даже если хочется порой чего-то эдакого то сразу думаешь что ну его впизду, и так сойдет и так будет работать
Зачем тебе деревья выражений? Чтобы что? Я сильно сомневаюсь, что ты занимаешься статическим анализом, с вероятностью 102% ты пукаешь джейсоном в автомапер.
>Сравни степень разрешительности MIT
Сравниваю:
GPL - код открыт
MIT - спиздил и закрыл код
Итого:
GPL - степень разрешительности 100%
MIT - степень разрешительности 0%
>Не говорите ему что львиная доля стдлиба только для шинды.
Какая стдлиба?
Расскажи мне, какую львиную долю могу написать "только для шинды"?
чтобы генерировать SQL запросы автомаппером, очевидно же.
И похуй, что так делают только долбоёбы, но в java коде такого ещё 10 лет не будет.
Зато есть Spring, уюбищный бесконечный монолит, где всё встроено и работает хуй знает как, и на изучение котороно необходимо тратить МЕСЯЦЫ. Даже всеми трижды отхуесошенного медиатра как отдельной библиотеки в спринге нет, надо колдовать с XML, аннотациями спринга и прочей хуйнёй.
Большинство актуальных java проектов сейчас работает на спринге 2-3 версий, с JAVA десяти-15 летней давности, потому что обновлять что-то нереально.
А там даже VAR нет
Кто сравнивает java с дотнетом - у него 78 IQ уровня хoxoл. Объективно java сейчас только на легаси проектах осталась
Чтобы писать рантайм генерацию кода и при этом быть в аот. Например, для своего очень быстрого бинарного сериализатора. Я ж говорю, фича популярностью не пользуется, но это не значит что ее никто не использует в тех же клонах автомаппера, которые имеют скорость х0.5 от нативного маппинга. А не было бы ее - осталась бы только генерация исходников перед компиляцией либо рефлексия с падением производительности в порядок.
> которые имеют скорость х0.5 от нативного маппинга
К слову, всем похуй на это наносекундное дрочево.
Но то, что экспрешшены автомаппера могут компилироваться до МИНУТЫ на старте приложения - вот эта хуйня бесит.
Ты хочешь поотлаживать коды, а они после конпеляции конпелируются
Тем не менее, на джаве зарплаты выше, а работа будет и через 20 лет. На модном крутом сишарпе все вакансии - это чистка говна в аутстафе с хохлами за три копейки.
>Тем не менее, на джаве зарплаты выше
Ну посмотри на отношение количества вакансий к зарплатам.
Увидишь те самые протухшие галеры на втором спринге, где если человека не удержать - всё ёбнется к хуям
Есть ли причины спрашивать это чаще, чем new используется? Помогите разобраться.
Да я ебу как это делается?
Выше есть примеры кода, где без new миллионы аллокаций, а с new - единственная аллокация.
>Выше есть примеры кода, где без new миллионы аллокаций, а с new - единственная аллокация.
Экспрешшен один раз предкомпилируется и будет экономить тебе память. New будет выделять память столько раз, сколько его вызовешь.
Ты бы хоть для вида рихтера почитал
Ты уже вытекаешь из треда.
>Вкатываюсь в ойти, выбрал c#.
Если любишь Россииюшку и планируешь в ней жить лучше уж 1с учить. Также профитно, а конкуренции меньше.
А если ты хочешь на западного барина работать то забей. Бешеная конкуренция с паджитами, которые за косарь бачей в очередь станановятся. По удаленке, 40$ это потолок для лидов. К тому времени когда ты до этого грейда доберешься через 10-15 лет код уже никто писать не будет. И умение писать код будет как умение паять схемы сейчас, т.е. прикольно, но нахуй никому не всралось. Готовые оттестированные модули будут писать нейронки, а другие нейросети, под присмотром паджита сеньера будут их как лего собирать, и вываливать в энтерпрайз.
Вообще не советую сейчас в любое кодописательство вкатываться. Это гиблое дело.
Там скорее всего рефлексия на этапе инициализации, и в её время динамически генерируется код самого маппинга.
Судя по скорости рефлексия в тайнимаппер (сука, тайни наоборот должен быть самым быстрым).
При этом маппинг никогда не является бутылочным горлышком, поэтому будь он даже в 10 раз медленнее, это было бы в рамках погрешности всего приложения.
Мы не любим автомаппер за то, что то, что там происходит, слишком неявное. Тебе IDE может показывать, что какое-то свойство не используется, а на самом деле это не так. И из-за этого может быть просто невероятно сложно отследить поток данных.
>Мы не любим автомаппер за то, что то, что там происходит, слишком неявное
Хуй знает, я не вникаю в ваши говнопроблемы. Нормальные библиотеки для маппинга еще на этапе компиляции кода генерируют все мапперы и фейлятся, если ты проебал сорс-дестинейшн и еще 100500 гардов, чтобы не обосраться в рантайме. А ваша хуитка от Жимми Богурда только в рантайме начинает чето там разбирать через рефлекшн и пытается смапить классы дэтэох и моделек, лол

>Нормальные библиотеки для маппинга
Какие нормальные библиотеки? Сами себе проблем насоздают и потом героически их решают.
Подключаешь медиатр и внезапно тебе нельзя использовать входящее DTO в обработчике команды. Нужно его обязательно замаппить на реквест потому что вызывать методы напрямую ты себе запретил.
И не дай боже вызвать медиатр из медиатра. Тогда всё повторяется и получается ёбаная матрёшка:
dto в контроллере -> автомаппер -> команда -> обработчик команды -> маппинг в другую команду -> другая команда -> маппинг результата другой команды -> основная команда -> контроллер -> маппинг результата команды.
И где-то между этими слоями прячется логика. И в автомаппер переезжает половина логики обработки данных.
Надо быть долбоёбом с окраины с IQ 78, чтобы тушить проблему лишних слоёв автомаппером.
Пиздец, столько простых проектов загубили. Ёбаная архитектурная боггартянка. Превратили обычные круд-репозитории в зубодробительное говно
Не подключаешь медиатр.
@
Не пытаешься эмулировать сеть внутри локального процесса, какой долбоеб это придумал, а просто напрямую вызываешь методы.
@
Никакого бугурта.
Это тоже хуита, потому что до генерации у тебя получается несобираемый код и красные подчёркивания в студии.
Прикол в том, что у тебя несколько слоёв абстракции. И нельзя между ними всеми прокидывать один и тот же объект, потому что где-то надо ты поменять, какие-то данные спрятать и т.д.
При этом 90% свойств перекочёвывают без изменений. И тут возникает желание, вместо того, чтобы писать конверторы ручками, взять автомаппер и написать правила типа это свойство игнорировать, это конвертировать таким кодом, а все остальные просто скопировать.
Но на практике это создаёт кучу проблем.
Я вообще один раз засунул веб-реквест в маппинг. Потом посмотрел на это и ужаснулся. Но переписывать не стал. С тех пор в новые места маппинг не добавляю.
>Прикол в том, что у тебя несколько слоёв абстракции.
медиатор не используй и не будет лишних слоёв абстракции. Автомаппер сам рассосётся.
Это ловушка такая, через неё проходили все в 2016-2018 годах. Называется архитекрурная боггартянка. Подключаешь медиатр - и его нужно тушить автомаппером. Зато код дохуя "крутой" и "правильный".
Хз, чего джунишки так дуреют с этой хуйни и повторяют старые ошибки, я бы им за такое ебало бил. Без шуток вот прямо в ебало бил ты толстой доской.
Ну не надо наших ошибок повторять
У тебя ровно три слоя: контроллер, бизнес логика и дата лэйер. Все. Перекладывание происходит в трех местах: IDataReader -> DTO, Request -> DTO, DTO -> Response. Первое делается автоматически дапером. Второе и третье - это одна строка result.UserName = model.UserName и у тебя работает вся навигация по коду. Автомапер не нужен.
>У тебя ровно три слоя: контроллер, бизнес логика и дата лэйер. Все. Перекладывание происходит в трех местах: IDataReader -> DTO, Request -> DTO, DTO -> Response. Первое делается автоматически дапером. Второе и третье - это одна строка result.UserName = model.UserName и у тебя работает вся навигация по коду. Автомапер не нужен.
Ты какой-то хелловорлд описал.
Между дл и бл и между бл и контроллером должны быть разные типы. В бизнес-логике объект может собираться из нескольких, например. В веб-респонсе тоже может быть свой формат из-за специфики http.
Ты описал паджитский говнокод уровня епам. Посмотри, как пишут охуительно быстрые сервисы на расте и голанге, там нет никаких 100500 слоев мапинга над мапингом. Одна ручка - один запрос в бд - одна дто - ебейший рпс. Да, код строится вокруг бд, потому что бд - это сердце системы и самое медленное звено. В дотнете же разработчики деградировали и разучились писать простые и эффективные программы, у всех ддд головного мозга.
>Одна ручка - один запрос в бд - одна дто - ебейший рпс
Как на примере создания заявки я должен обойтись одним дто? При создании заявки не указывается id сущности, например, т.к. он создается в момент сохранения энтити в бд. При создании заявки, пользователю нужно отдать дто где будет id сущности. Т.е. одним дто уже не обойтись. И это первое что пришло в голову. Да и смешно слушать про какие-то там сервисы на гоу и расте где элементарно зависимости подтягиваются через таги на артифакты в гитхабе, лол
>При создании заявки, пользователю нужно отдать дто где будет id сущности.
То есть, ты не понимаешь, как работает sql. Ты настоящий дотнет разработчик, миллионы паджитов гордятся тобой.
Дурачок, ты не знаешь, как вставить данные и вернуть ID новой записи за один поход в бд? Туда ли ты зашел?
Ну, а возвращать клиенту ты что собираешься? Прямо энтитю, которую достал из бд?
Верну джейсон какой надо. Из бд я достаю не энтити и не объекты, я достаю датасет какой мне нужен здесь и сейчас. У каждой ручки свой.
Кстати, в EF Core паджиты добавили projections когда поняли, насколько обосрались с перфомансом.
Ну так твой датасет - это и есть результат мапинга энтити на какое-либо ДТО (которое кстати объект)
У тебя так получится хуева туча дублирующейся логики, которую потом заебёшься поддерживать при каких-то изменениях.
Логика написана в сервисах, которые принимают интерфейсы дтошек. Будет какой-нибудь OrderService.Checkout(IOrderDTO), а данные в IOrderDTO каждый раз берутся из разных запросов в бд. Интерфейсы можно миксовать как угодно и у тебя все еще работает навигация по коду, в отличие от автомапера ебаного.
Дело в том, что рич ООП хорошо работает на локальной машине и плохо в сети. Для ситуаций, где класс Button наследуется от Control и перегружает виртуальный метод Draw, рич заебись. Когда твои данные лежат на другой машине, их надо каждый раз загружать, а поход по сети занимает дольше, чем обработка - лучше подходит анемик.
>Ты какой-то хелловорлд описал.
Согласен. пятилетний проект, всё работает, три слоя у нас. Автомаппер в каждом методе используется минимум два раза.
>В бизнес-логике объект может собираться из нескольких, например.
Согласен, автомаппер это лучшее средство, чтобы собрать из нескольких объектов третий.
Просто надо вызвать его несколько раз и в профиле последовательно описать, какие свойства из какого источника брать, а какие заигнорить
> веб-респонсе тоже может быть свой формат из-за специфики http.
Согласен. Автомаппер позволяет лаконично и без запахов кода сконвертировать один объект в другой.
>То есть, ты не понимаешь, как работает sql. Ты настоящий дотнет разработчик, миллионы паджитов гордятся тобой.
Всё равно модель отдельную надо для фронта, иначе лишние свойства будут в сваггере и тестировщики тупо баг заведут.
Но маппинг всё равно лучше руками написать. Модель БД и dto запрос начинает расходиться моментально
>Кстати, в EF Core паджиты добавили projections когда поняли
проекции были ещё в старом ентити фреймворке, задолго до появления ef core
>интерфейсы дтошек
понапишут своего долбоёбского ООП с интерфейсами на дтошках, а могли бы просто автомапер взять, и всё бы работало САМО, и кода в 10-20 раз меньше
Что для тебя логика? А то так можно дойти до безумия, когда джойны тоже логика.
У фронта две модели. Входящий джейсон - это request, исходящий - response. В сервисах модель называется DTO. В репозитори - это параметры хранимок и голый датасет, который приезжает из базы. Получил в контроллере джейсон - переложил руками в дто - что-то сделал в сервисе - передал дто в репозиторий - там внутри переложил из полей дто в параметры - вызвал хранимку - получил датасет - отмапил дапером на другое дто - вернул сервису - сервис вернул в контроллер - в контроллере руками переложил в джейсон и отдал наружу. Что писать код для перекладывания, что писать конфиг для автомапера - один хуй надо писать, только в коде работает навигация.
А мог просто взять автомаппер, он бы за тебя всё замаппил сам, и запросы сформировал какие нужно. ч
Или тебе нравится писать все эти перекладывания в сто слоёв? Я хуй знает, зачем вы вообще код пишете, если достаточно медиатром вызвать маппинг по хранимке... и всё.
О, вы из епама!
Удачи разбираться с дедлоками, когда твой sql сгенерирован через соплю IQueryable.
>О, вы из епама!
Нет. Но мои знакомые оттуда, тоже в рот ебали хранимки.
>Удачи разбираться с дедлоками
Удачи тебе с отладкой всего твоего хранимого говна.
Ты и твои друзья с аутстаф галер даже не понимаете суть проблемы. Ваш уровень - разгребать говно за индусами.
Хорошо, что подобных любителей писать свои конвертеры на дтошки и потом это говно покрывать тестами мы увольняем пачками))))
Какая ещё проблема джавы? Это такой хитрый ход отвечать "в джаве ещё проблемы есть" на "вот тут твоя шарпохуита сосёт по гланды"?
Дежурно напоминаю, что автомаппером пользуются застрявшие в 2016 году пивные сиськи.
Да и хуй с ними
>Какая ещё проблема джавы
необновляемый спринг десятилетней давности из xml перемешанного с худшими практиками DDD и AOP ? Который вдобавок хуй пойми как собирать?
Нам похуй. Тебе уже кидали бенчмарки в прошлом треде где твоя джава брала с заглотом, кроме деревянных бенчмарков давящих на LOH, но даже в них разница максимум двухкратная. Небольшая цена за удобный для работы язык.
В чем проблема обновить спринг? xml остался в начале нулевых. Про какие "худшие практики DDD и AOP" ты говоришь? С худшими практиками можно и на сисярпе писать, если проекты на нем будут, лол
Что за фантазии?
Чё? Где? Во всех бенчмарках кроме каких-то беспруфных на непонятных ии-сайтах джава ебёт.
>небольшая цена за удобный для работы язык
Отдельно с этого проиграл. Удобство это гет сет кококо?
Клоун, твое клоуничанье не поможет убрать говно в твоих трусах
>>480468
https://programming-language-benchmarks.vercel.app/csharp-vs-java
>Удобство это гет сет кококо?
Так у тебя и этого нет, терпила) Не говоря про методы расширения, про нормальный ансейф и рантайм кодогенерацию, нету span<t> и структур под них. И это при том что чтобы начать юзать спринг нужно занести в кассу жижбрейну или качать крякнутые иде, иначе разрабатывать это говно ебаное нереально, поддержка сторонних иде нулевая, при том что комьюнити визуалка поддерживает всё кроме деплоя на азуру. И вообще вся инфраструктура языка похожа на парад костылей который без платной иде собрать нереально, ну это ладно, вкусовщина.
> Клоун, твое клоуничанье не поможет убрать говно в твоих трусах
Терпи, говнопис.
>vercel.app
https://www.techempower.com/benchmarks/
Что, уже щёчки от злости надулись? :)
> про нормальный ансейф
Не можешь себе представить жить без ассемблероподобного пердолинга, ведь в петушарпе высокоуровневых и быстрых инструментов просто не завезли? Да и нормальный он, лол.
> рантайм кодогенерацию
Чаво? Лучшая среди всех языков.
> И это при том что чтобы начать юзать спринг нужно занести в кассу жижбрейну или качать крякнутые иде
Спринг != джава во-первых, во-вторых миллион у тебя срыг плагинов для любых иде на любой вкус, не знаю, что за хуйню ты несёшь, для вс кода есть, для эклипса, для чего угодно, для комьюнити жидеи даже.
> методы расширения
А в петушарпе они что-ли есть?
А теперь готовься реветь:
Огромная экосистема. Это включает в себя:
Возможность выбора наилучшего, подходящего под твою задачу между несколькими инструментами, выполняющих похожие задачи
Maven. Системы сборки подобной стабильности, удобства, качества, нет ни в одном другом языке. Новые версии Gradle тоже могли бы выглядеть как сносные системы сборки, тоже надирающих задницы системам сборки в других языках, но, увы, Gradle не умеет не ломать обратную совместимость и не внедряться в кишки JVM, из-за чего постоянно приходиться И обновлять Gradle, чтобы использовать новую Java, И бороться с поломками обратной совместимости.
Инструментарий для генерации бойлерплейт кода при компиляции, по сути расширяющий синтаксис Java. Это включает в себя Lombok и Manifold, откуда мы можем взять такие вещи как генерацию конструкторов, акцессоров, делегатов, перегрузку операторов и другое.
JVM. JVM является невероятно умной системой, поддерживающей самые разные языки программирования, как дающих гарантии (например, Rust), так и не дающих гарантии и требующих вмешательства со стороны рантайма (Java) с высокой производительностью. В JVM есть огромное количество сборщиков мусора на выбор, есть умный JIT, позволяющий делать оптимизации, а также мы ожидаем Project Valhalla, который должен позволить ещё сильнее оптимизировать работу кода.
Java имеет приятный, OG синтаксис из времён начала программирования человекочитаемыми конструкциями, грациозно расширяемый каждые полгода и поддерживаемый в современном состоянии.
Кроссплатформенность.
Обратная совместимость.
Джава является единственным языком, который на самом деле поддерживает многопоточность. Во всех остальных языках многопоточность является огромной бойлерплейтной болью, а гарантии через спецификацию являются рудиментарными, о которых никто не знает. Доходит до того, что пособия по многопоточности в Java являются отличным вариантом для изучения многопоточности в большинстве других языков.
Java поддерживает платформенную многопоточность. Некоторые языки пошли по пути исполнения кода глобально effectively в одном потоке. Таким образом, они избавились от части недостатков многопоточности (низкоуровневых багов), ценой отказа от увеличения производительности за счёт нескольких ядер процессора, оставив многопоточность для тех случаев, когда она нужна не для увеличения производительности, а для реализации непосредственной логики. Java даёт возможность пользоваться всеми ресурсами машины.
В Java есть огромнейший инструментарий для организации многопоточного flow, что регулярно расширяется с новыми обновлениями. Он настолько всеобъемлющий, что, например, на одном из классов Java были основаны все корутины в Kotlin поначалу (ForkJoinPool).
В Java есть полноценная теория о многопоточности, что позволяет подходить к построению многопоточных приложений с научной точки зрения. В основном, это представлено книгой Java Concurrency in Practice. Если не понимать всей сложности темы и просто забить хуй на неё, то очень скоро столкнёшься с непонятными проблемами вызывающими сомнения в реальности происходящего, поэтому без теории не может быть никакого многопоточного программирования, а в Java теория есть.
В Java присутствует решение проблемы тяжеловесности потоков общего назначения без всех минусов корутин, таких как замедление кода в 11 раз или загрязнение кодовой базы async/await/suspend приводящими к дублированию методов.
Preview процесс в разработке Java, благодаря которому каждая новая фича языка выпускается наивысшего качества.
> Клоун, твое клоуничанье не поможет убрать говно в твоих трусах
Терпи, говнопис.
>vercel.app
https://www.techempower.com/benchmarks/
Что, уже щёчки от злости надулись? :)
> про нормальный ансейф
Не можешь себе представить жить без ассемблероподобного пердолинга, ведь в петушарпе высокоуровневых и быстрых инструментов просто не завезли? Да и нормальный он, лол.
> рантайм кодогенерацию
Чаво? Лучшая среди всех языков.
> И это при том что чтобы начать юзать спринг нужно занести в кассу жижбрейну или качать крякнутые иде
Спринг != джава во-первых, во-вторых миллион у тебя срыг плагинов для любых иде на любой вкус, не знаю, что за хуйню ты несёшь, для вс кода есть, для эклипса, для чего угодно, для комьюнити жидеи даже.
> методы расширения
А в петушарпе они что-ли есть?
А теперь готовься реветь:
Огромная экосистема. Это включает в себя:
Возможность выбора наилучшего, подходящего под твою задачу между несколькими инструментами, выполняющих похожие задачи
Maven. Системы сборки подобной стабильности, удобства, качества, нет ни в одном другом языке. Новые версии Gradle тоже могли бы выглядеть как сносные системы сборки, тоже надирающих задницы системам сборки в других языках, но, увы, Gradle не умеет не ломать обратную совместимость и не внедряться в кишки JVM, из-за чего постоянно приходиться И обновлять Gradle, чтобы использовать новую Java, И бороться с поломками обратной совместимости.
Инструментарий для генерации бойлерплейт кода при компиляции, по сути расширяющий синтаксис Java. Это включает в себя Lombok и Manifold, откуда мы можем взять такие вещи как генерацию конструкторов, акцессоров, делегатов, перегрузку операторов и другое.
JVM. JVM является невероятно умной системой, поддерживающей самые разные языки программирования, как дающих гарантии (например, Rust), так и не дающих гарантии и требующих вмешательства со стороны рантайма (Java) с высокой производительностью. В JVM есть огромное количество сборщиков мусора на выбор, есть умный JIT, позволяющий делать оптимизации, а также мы ожидаем Project Valhalla, который должен позволить ещё сильнее оптимизировать работу кода.
Java имеет приятный, OG синтаксис из времён начала программирования человекочитаемыми конструкциями, грациозно расширяемый каждые полгода и поддерживаемый в современном состоянии.
Кроссплатформенность.
Обратная совместимость.
Джава является единственным языком, который на самом деле поддерживает многопоточность. Во всех остальных языках многопоточность является огромной бойлерплейтной болью, а гарантии через спецификацию являются рудиментарными, о которых никто не знает. Доходит до того, что пособия по многопоточности в Java являются отличным вариантом для изучения многопоточности в большинстве других языков.
Java поддерживает платформенную многопоточность. Некоторые языки пошли по пути исполнения кода глобально effectively в одном потоке. Таким образом, они избавились от части недостатков многопоточности (низкоуровневых багов), ценой отказа от увеличения производительности за счёт нескольких ядер процессора, оставив многопоточность для тех случаев, когда она нужна не для увеличения производительности, а для реализации непосредственной логики. Java даёт возможность пользоваться всеми ресурсами машины.
В Java есть огромнейший инструментарий для организации многопоточного flow, что регулярно расширяется с новыми обновлениями. Он настолько всеобъемлющий, что, например, на одном из классов Java были основаны все корутины в Kotlin поначалу (ForkJoinPool).
В Java есть полноценная теория о многопоточности, что позволяет подходить к построению многопоточных приложений с научной точки зрения. В основном, это представлено книгой Java Concurrency in Practice. Если не понимать всей сложности темы и просто забить хуй на неё, то очень скоро столкнёшься с непонятными проблемами вызывающими сомнения в реальности происходящего, поэтому без теории не может быть никакого многопоточного программирования, а в Java теория есть.
В Java присутствует решение проблемы тяжеловесности потоков общего назначения без всех минусов корутин, таких как замедление кода в 11 раз или загрязнение кодовой базы async/await/suspend приводящими к дублированию методов.
Preview процесс в разработке Java, благодаря которому каждая новая фича языка выпускается наивысшего качества.
>в джаве есть это
>в джаве есть то
Так нахуя ты в этом треде-то пасешься, если в твоей джаве так все охуенно?
Эффект Винни Пуха. Необдуманно оставить начальный говнопост легко, а прекратить спор значит слиться.
сурс бенчей где? Я ебу что этот паджит там накорябал и выдал за perfomance comparsion. В моей ссылке сурс есть и там по http дела у жавы не очень и сурс есть.
>А в петушарпе они что-ли есть?
Есть, и очень, очень давно. И в нем еще очень много чего есть, советую ознакомиться.
>Чаво? Лучшая среди всех языков.
С каких пор написание ручного генератора java файлов на основе рефлексии стало рантайм кодогенерацией? Про деревья выражений слышал?
>Спринг != джава во-первых, во-вторых миллион у тебя срыг плагинов для любых иде на любой вкус, не знаю, что за хуйню ты несёшь, для вс кода есть, для эклипса, для чего угодно, для комьюнити жидеи даже.
Пиздаболище, я их тыкал вот буквально на днях. Единственное что не похоже на говно это amplicode, за бабки, остальное неюзабельный кал. А без спринга джава впринципе не нужна, обычный недошарп. По мнению самих же джавистов эклипсы хуипсы это все неюзабельное говно и если надо работать - меньше чем энтерпрайзом жижбрейнса не обойтись.
>Да и нормальный он, лол.
Нормальный != отсутствующий, пиздабол.
>В Java есть огромнейший инструментарий для организации многопоточного flow
Я могу сказать какого инструмента для организации многопоточного flow у джавы нет. И у шарпа нет. Это коллекции позволяющие производить блокировку по каждой отдельной записи на чтение и монопольно на запись, не блокируя всю коллекцию, так как это делают базы данных. Приходится в итоге велосипедить. Остальное это так, пыль в глаза, еще один способ стрелять себе в ногу по новому. Корутины, асинки, потоки, а нормального решения для параллелизации работы с крупным набором данных нет, сами подгатывайте мультипоточный флоу чтобы не нарваться на гонку или на дедлок, епта.
Пасту уноси, конкретики ноль, кейсов ноль, джава все ещк недоязык.
> сурс бенчей где? Я ебу что этот паджит там накорябал и выдал за perfomance comparsion. В моей ссылке сурс есть и там по http дела у жавы не очень и сурс есть.
Далбаёб, 5 секунд поиска по странице. https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview
> Есть! Пруфов небудет.
Ясн.
> С каких пор написание ручного генератора java файлов на основе рефлексии стало рантайм кодогенерацией? Про деревья выражений слышал?
Чего? Ты откуда это взял вообще? Опыт петушарпа проецируешь?
> Пиздаболище, я их тыкал вот буквально на днях.
Поищи проблемы в межплечевом прыще.
> Нормальный != отсутствующий, пиздабол.
Сам-то понял, что высрал?
> Пасту уноси, конкретики ноль, кейсов ноль, джава все ещк недоязык.
Слив принят, опущенец.
С телефона видно не очень. Замерить бы всё что он юзает, но мне в целом похуй, тебя даже если в его паджитизм носом ткнуть ты ж все равно будешь в тред срать дальше.
>Ясн
Яндекс не используешь по религиозным причинам?
>Чего? Ты откуда это взял вообще? Опыт петушарпа проецируешь?
Из гугления. Но тебе ничего не мешает притащить пруфы, благо это быстрее чем мне проверять что там этот паджит нахуевертил.
>Поищи проблемы в межплечевом прыще.
Я знаю эту проблему, называется привык к нормальному и не знал что значит платить за инструментарий.
>Слив принят
Конкретики всё еще нет, только куча говнокода от паджита который юзает ToList() в бенчмарке вот здесь
https://github.com/TechEmpower/FrameworkBenchmarks/blob/master/frameworks/CSharp/aspnetcore/src/Minimal/Database/BatchUpdateString.cs
>Enumerable.Range(0, lastIndex).ToList()
Как это делают питонисты, генерируя блять коллекцию вместо for, а это уже показатель.
> С телефона видно не очень. Замерить бы всё что он юзает, но мне в целом похуй, тебя даже если в его паджитизм носом ткнуть ты ж все равно будешь в тред срать дальше.
Слив.
> Яндекс не используешь по религиозным причинам?
Какой ещё яндекс? Причём тут яндекс?
> Из гугления. Но тебе ничего не мешает притащить пруфы, благо это быстрее чем мне проверять что там этот паджит нахуевертил.
Так это ты должен пруфы нести, ты же хуйню какую-то высираешь.
> Я знаю эту проблему, называется привык к нормальному и не знал что значит платить за инструментарий.
Давай по кругу, пока не дойдёт:
>во-вторых миллион у тебя срыг плагинов для любых иде на любой вкус, не знаю, что за хуйню ты несёшь, для вс кода есть, для эклипса, для чего угодно, для комьюнити жидеи даже.
> Конкретики всё еще нет
Тебе стена текста конкретики на ебальничек вывалена.
> Конкретики всё еще нет, только куча говнокода от паджита который юзает ToList() в бенчмарке вот здесь
> // Copyright (c) .NET Foundation. All rights reserved.
> // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
Ааххахахахахахахаххахахахахаах блядь. Этот дебил только что своего барина закопал.
Дауненок, ты что то кроме стрелочничества знаешь? Я тебе порядочно пруфов принес.
>стена конкретики
>Ровно ноль буковок про технологии, обеспечивающие тот набор хуйни, вываленной взбесившимся паджитом-маркетологом
Шиз, таблетки
>Ааххахахахахахахаххахахахахаах блядь. Этот дебил только что своего барина закопал.
Даун не знает что такое NET Foundation. Обьясняю для тех кто не в курсе что такое поисковик - это продукты существующие в рамках программ поддержки майкрософт, но не являющиеся частью дотнета, что-то типа спринга но от условного стороннего разраба.
> Дауненок, ты что то кроме стрелочничества знаешь? Я тебе порядочно пруфов принес.
> Шиз, таблетки
Слив.
> Даун не знает что такое NET Foundation. Обьясняю для тех кто не в курсе что такое поисковик - это продукты существующие в рамках программ поддержки майкрософт, но не являющиеся частью дотнета, что-то типа спринга но от условного стороннего разраба.
Ну и?
> шиндонативная тормознутая хуита.
>в два раза быстрее жабы на погодных станциях под линуксом
Блять, просто съеби, долбоёб тупой.
мимо-проходил
>Enumerable.Range(0, lastIndex).ToList().ForEach(i => sb.Append($"(@Id_{i}, @Rn_{i}), "));
То однострочники это хуёво, то однострочные LINQ - заебись... Вас, программистов, хуй поймёшь.
А вообще такая портянка вместо for - клиника.
мимо
Я под однострочный for написал вот такое расширение https://pastebin.com/TJkNiB12, (ну и еще кучу ему подобных под всякие варианты итераций), но да, за представленнные в том гите такие однострочники нужно немедленно гнать в шею
Зачем ты выделяешь память под список, чтобы один раз по нему пройтись?
Вот так надо https://pastebin.com/7un6Eh7D
Делаю снапшот. У меня код максимально многопоточный, не хайлоад, избегаю разрушения итератора. Можно конечно ещё оптимизировать, подтянуть блокируемые списки, но и так тоже сойдёт.
Если твой код многопоточный, то где блокировки?
Зачем делать многопоточный цикл? Чтобы что? Это же просто сраный цикл, базовая конструкция языка.
А к чему блокировать снапшот? Внутри экшена и будут блокировки для его обьектов. Дело не в многопоточном цикле а в многопоточном доступе к коллекции.
>Зачем делать многопоточный цикл
Что обработка 1кк элементов шла параллельно в 10 потоках в 10 раз быстрее чем будет пердеть 1 поток?
Не, это не для такого случая. Такая конструкция нужна если коллекция может поменяться извне (добавиться удалиться элемент) и только в случаях если элементы коллекции независимы друг от друга. Параллелизация обработки такой коллекции - это Parallel.foreach и в качестве основы concurrency типы, такие как сумка/стек или велосипедный блокируемый список, чтобы не было проблем с разрушением итератора.
Совершенно не факт кстати, однопоточный пеформанс намного выше и масштабирование нелинейное там, 10 потоков не ускорит в 10 раз.
Лучше протестируй и сравни результаты.
Во-первых, сишарп плохой выбор для хайперфоманса. Блокчейн на нем никто не пишет.
Во-вторых, чтобы твои 10 потоков реально работали параллельно, надо все данные сериализовать в массив, чтобы вообще не было ссылок куда-то наружу в память. Потом загнать этот массив в кеш процессора и ебнуть simd инструкции. Кто будет этим заниматься в языке для попукивания в кафку - вопрос риторический.
>сишарп плохой выбор для хайперфоманса.
У хайперфоманса градации есть. Плюсовик будет стоить в 2 а то и в 3 раза дороже. Да и к тому же так исторически сложилось что у шарпа все математические и ИИ либы сдохли, а ml.net не взлетел, потому на нём такое мисать в первую очередь больно, и только во вторую проигрышно по перфомансу.
>реально работали параллельно
Ты вместо реальной параллельности описал способ как избегать кешмисов при обработке массива. Это конечно очень интересно, но обычно процесс обработки элемента раз в 100000 тяжелее чем его взятие по ссылке из коллекции и нужно прям совсем экономить чтобы заниматься нарезкой коллекции на чанки array под каждый физический поток. Можно конечно и даже не очень сложно, но обычно да, это никому кроме разрабов Unity DOTS не надо. Про SIMD вообще смешно, ты сюда из /gd забрел? Напоминаю, что simd обрабатывает только типы из numerics и типы значений, задач для них у дежурного с# формошлепа нет ни одной, кроме быстрого сравнения строк/массивов, при том что в string.equal уже заложен этот функционал. Параллелизм же в первую очередь достигается формированием данных, готовых к параллельной обработке, а это самое сложное. Сложно сделать такую параллельность рентабельной, сложно достигнуть синхронизации с ресурсами, к которым обращаешься при параллельной обработке коллекции, сложно обеспечить нулевую связность элементов массива друг с другом для избежания гонки, а остальное это так, мелочи, технические ньюансы.
Ну надо же коупилот как-то продавать
>Джава является единственным языком, который на самом деле поддерживает многопоточность. Во всех остальных языках многопоточность является огромной бойлерплейтной болью, а гарантии через спецификацию являются рудиментарными, о которых никто не знает. Доходит до того, что пособия по многопоточности в Java являются отличным вариантом для изучения многопоточности в большинстве других языков.
>Java поддерживает платформенную многопоточность. Некоторые языки пошли по пути исполнения кода глобально effectively в одном потоке. Таким образом, они избавились от части недостатков многопоточности (низкоуровневых багов), ценой отказа от увеличения производительности за счёт нескольких ядер процессора, оставив многопоточность для тех случаев, когда она нужна не для увеличения производительности, а для реализации непосредственной логики. Java даёт возможность пользоваться всеми ресурсами машины.
>В Java есть огромнейший инструментарий для организации многопоточного flow, что регулярно расширяется с новыми обновлениями. Он настолько всеобъемлющий, что, например, на одном из классов Java были основаны все корутины в Kotlin поначалу (ForkJoinPool).
>В Java есть полноценная теория о многопоточности, что позволяет подходить к построению многопоточных приложений с научной точки зрения. В основном, это представлено книгой Java Concurrency in Practice. Если не понимать всей сложности темы и просто забить хуй на неё, то очень скоро столкнёшься с непонятными проблемами вызывающими сомнения в реальности происходящего, поэтому без теории не может быть никакого многопоточного программирования, а в Java теория есть.
>В Java присутствует решение проблемы тяжеловесности потоков общего назначения без всех минусов корутин, таких как замедление кода в 11 раз или загрязнение кодовой базы async/await/suspend приводящими к дублированию методов.
async/await делает бррррр
Моя задача это делать примитивные программы но желательно с GUI и обязательно для двух платформ. Андроид и Винда (7я даже стоит дома) терпеть не могу «новинки».
Так вот я пришёл в выводу, что для того чтобы я пользовался родным C# я обязан перейти исключительно на консольные приложения.
Тупо мутить интерфейс из символов псевдографики наподобие Borland Pascal IDE если кто помнит.
По крайней мере это единственный РАБОЧИЙ вариант кодинга под две платформы. БЕЗ переписывания кода, без всей этой ебаты с элементами пользовательского GUI (где а MAUI то кнопка сползла за экран, то ещё какой-то там pading отвалился, то вообще всё накрылось к чертям.
Конечно, этот подход не годится для коммерческого программирование да и вообще для коммерческого сорта. Но я пишу для себя всякие автоматизатопы и парсеры и мне похуй на тренды. Зато код абсолютно идентичный получается и можно писать прямо в телефоне. Вплоть до того, что вечером дома на компе уже готовый код тестировать(после теста в телефоне).
Хули толку от этого xamarina если приложения постоянно отваливаются и с ними вечно какие-то проблемы. Или к примеру от Java, если для запуска его «УНИВКРСАЛЬНЫХ» «мультиплатформенного» кода, я вынужден таскать за собой гигабайты SDK и эмуляторов для каждой платформы чтобы это всё хоть как-то запустилось
>Хули толку от этого xamarin
Не, ксамарин норм. Только не тот, где формы и ксамл, о тот, который просто Xamarin native.
Там у тебя ровно те же самые типы, что на андроиде, но написанные на c#.
По про
>мнение
Нас всех заменят компьютеры, эйай будет везде, а операционные системы уже пишут на пэйфоне.
Как можно было обосраться с vsc хоть убей не пойму. Просто блять 3 простейших шага
Дотнет сдк
Расширение c# + c# devkit + intellisense по желанию
dotnet new console
Всё нахуй. Сижу на вскод последний год и решительно не понимаю в чем проблема, если для личного пользования. Wpf стал кроссплатформой, есть авалония уже очень давно. В конце концов можно поставить Target 4 фреймворк и запускать под моно винформу.
>Что сказать-то хотел?
Всё, что ты описал, в C# есть.
>за неимением альтернатив
Как просто ПОДОЖДАТЬ http запрос в джаве?
>Это помои, которыми прикрывают свою порваную жопу шарподауны за неимением альтернатив.
какие альтернативы? Коллбеки писать?
Видел родителей ОПа. Нормальные мужики.
Ну ладно, из плюсов, всё можно поднять парой строчек кода. Окей. Но сука, дебаг череж жопу, куча уёбских any, сука бля.
Всё так.
>всё можно поднять парой строчек кода
Java сервисы тоже, если написать докерфайл. Мухам в винду так и не завезли синего кита? В десятке же появился какой-то Docker Desktop вроде.
Веб. Точнее, бекенд, откуда c# выдавливает джаву
Мне кажется, ты не понял, что тебе написали.
На ноде можно написать пару строчек кода, и оно уже будет что-то полезное делать.
Для спринга и аспнета нужно больше кода. В обоих случаях начальный бойлерплейт уже есть в шаблонах, но всё равно надо что-то ещё написать. Ну и бойлерплейт, который сам создаётся, тоже довольно объёмный.
>есть! яскозал!
Ясн.
>Как просто ПОДОЖДАТЬ http запрос в джаве?
var result = http.request();
Что, совсем мозг повредило асинками? Самый нормальный вариант белого человека без обмазывания кода говном уже в голову и не лезет?
Ёбу дал — ёбу взял.
Асинк авейт и есть виртуальные потоки. Это вообще то же самое за исключением синтаксиса.
>Асинк авейт и есть виртуальные потоки
Нихуя себе. Блиииин а я то все какие-то машины состояний себе представлял и сохранение состояния потока при переключение.
Вот собственно с кем мы тут сидим. Виртуальные потоки в асинк эвейт.
> я то все какие-то машины состояний себе представлял
Долбоёб, что-ли? Ты понимаешь, что такое зелёные потоки?
>Для спринга и аспнета нужно больше кода.
С небольшой разницей. Дотнет просто запустится на любом современном железе, а JAVA будет ебать мозги 3-4 часа манипуляциями с бинарями, неработающим мавеном и правками в хуй знает каких xml файлах.
Собственно, мы поэтому от спринга и отказались. На вид джава почти как сишарп, но как работать начинаешь - понимаешь, что джава скорее аналог дотнет-фреймворк-4.5.2, который ты пытаешься запустить через wine.
>var result = http.request();
этот вызов будет стоить одного потока? Твоя пропускная способность теперь зависит от количества доступной оперативной памяти.
Я не знаю, что ты себе там представлял.
Конечно, там автомат с состояниями, а под ним находятся таски, которые являются абстракцией над потоками. В каких-то случаях таски могут выполняться последовательно в одном потоке, а в каких-то параллельно в разных. И именно это тоже самое, что виртуальные потоки в жаве.
> засираешь код говной
Лучше написать async/await, чем размазывать запрос по коллбекам. Ну или как у вас там не блокируя код писать?
>дублируешь методы.
Охуеть, оправдание, конечно. Ты фреймворк пишешь или рабочий код?
>С небольшой разницей. Дотнет просто запустится на любом современном железе, а JAVA будет ебать мозги 3-4 часа манипуляциями с бинарями, неработающим мавеном и правками в хуй знает каких xml файлах.
Да, у меня тоже такое ощущение.
Куча команд типа clean, install, build, deploy, и так далее, причём делают они совсем не это. Куча источников параметров вплоть до переменных окружения (это уровень php какой-то). Куча параметров сборки без которых нихера ничего не выйдет.
Нет нормальной среды разработки, которая все нюансы подхватывает. Вечно либо код красный, но собирается, либо наоборот.
Ну и несколько реп пакетов без синхронизации версий. Пакет одной версии в одной репе может оказаться совсем другой версией во второй.
Ты наркоман? Производительность любой машины зависит от количества доступной оперативной памяти.
Но он довольно посредственный. Обычное рест апи, по сути можно только создавать заказы и управлять ими, а также отслеживать их. Есть система аутентификации и авторизации, распределение доступа к действиям по ролям, бизнес-логики почти нет никакой, ну расчет стоимости, а расстояние определяется через стороннее апи, юнит тесты для галочки, интерфейса нет. Насколько это кал, такое вообще стоит показывать?
Еще есть программа для учёта дебиторской задолженности на wpf, делал его для мамы, так как 1с у них не было. Делал года 2 назад, с нулевыми знаниями wpf и xaml, без mvvm. Стоит его вообще указывать, учитывая, что я уже почти все забыл и особо пояснить не смогу? Просто убил на него много времени, да и получился довольно объемным (ну для меня).
За работодателя думать не нужно, дотягиваешь там или нет. Если только ищешь первую работу, отказываться от собеседований глупо, потому что это для тебя при любом исходе будет полезным опытом, даже если обосрешься (а сначала все равно скорее всего так и будет).
Про проекты имеет смысл рассказывать, если они имеют отношение к тому, чем планируется заниматься на работе. Ну или если такого мало, то просто показать, что не совсем дурак, и что-то сам можешь сделать от начала до конца.
Сервера на линупсе, но разработка на винде, ведь студия есть только на винде, а вскод и райдер до неё не дотягивают.
Я дотнет разработчик, которому очень редко приходится что-то делать с джавой. У меня, конечно, колоссальная разница в опыте между шарпом и джавой, но как правило почему-то когда я беру где-то шарповый код, то его можно просто открыть в вс и запустить, нажав f5, а с кодом на джаве так не получается.
Двачую, реально какой-то шизостек. Код пишется под виндой, но на проде работает под линуксом.
А ты понимаешь, что ядро не дает квант времени потоку, который ждет ответа на сисколе? Легковесные потоки - это просто дань моде, а так ты спокойно можешь запустить 1000 тредов или даже форкнуть 1000 процессов, повесить их на один сокет и все будет работать без хитровыебаных асинков.
И что это получается, виртуалку поднимать, директорию через нее шарить и на вижле писать? Это если удаленно
>>486156
Если охота работать конкретно на линуксе, то см. пик. Если на винде то тот же самый набор + visual studio (имхо лучший выбор). Часть c# разрабов вообще на маках работает, но в душе не ебу, что они там сейчас используют. Вроде должен быть тот же набор, что и для линукса.
>>486026
>Код пишется под виндой, но на проде работает под линуксом.
И что тут не так? Или ты к примеру разрабатывая под андроид будешь код у себя на телефоне писать?
Спокойно все пишется на одной системе и запускается на другой. Даже отладка удаленная с винды на линукс/докер/wsl замечательно рабоатет в реальном времени.
> Неблокирующий вариант можно сделать через CompletableFuture
А теперь, пожалуйста, сделай неблокирующий вариант и так, чтобы с коллбеками не ебаться?
И так, чтобы можно было последовательно отлаживать?
>Как в вашем C# с линуксом? .net core работает? Планирую перекатываться на C# и искать на .net core работу
Работаю на линуксе последний год.
Дотнет устанавливается в домашнюю папку буквально кликом на один скрипт в интернете. Это охуенно.
https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-install-script
Райдер работает охуенно. Его для wayland рекомендую немножко подстроить:
Menu->Help->Edit Custom VM Options... Откроется редактирование, для поддержки Wayland добавить строку
-Dawt.toolkit.name=WLToolkit
Реальная проблема разницы операционных систем у меня была только одна, - когда я забыл, что в линуксе таймзоны называются по другому и надо работать с ними через пакет TimeZoneConverter
Нативный докер экономит несколько гигабайт памяти
Линукс сам по себе нетребовательный к ресурсам и предсказуемый. Он не перезагружается внезапно, не лезет в интернет, чтобы скачать что-нибудь.
В общем, я доволен.
Спасибо большое!
Хватит с тебя и неблокирующего варианта
А еще в линуксе нету виндового костыля ограничивающего шаг таймера на 15мс, и в итоге Task.Delay сжирает 1 ядро проца пока его не отпустит, но это так, просто неприятный ньюанс.
привет! :D можете помочь разобраться, в чем проблема и почему при запуске отображается по другому
Нет, у тебя какие-то коды и свинья бегает по шоссе.
Размер твоей формы при запуске сам меняется?
У тебя походу стоит 125% масштаб в системе, может быть по этому.
Dpi там, ещё что-нибудь.
Когда в ObservableCollection уже добавят AddRange?
Что вообще за игра в винформе?
Двачую, напиши метод расширение
Под dosbox конечно, что за вопросы.
Двойным кликом мыши по экзешнику. А что?
И это даже блять не превью и не альфа билд этой залупы.
На гитхабе двухлетнее ишшью висит где полтора Джона пердолятся и пытаются это пофиксить, но безуспешно и ни одна черномазая, срущая, индусская рожа даже не ответила.
Я конечно знал что они ебнутые, но не настолько же.
>Microsoft полностью переходит на python
Ага, поэтому они Core Python команду в прошлом году сократили?
>Ага, поэтому они Core Python команду в прошлом году сократили?
Это путь в один конец... Сначала кабан нанимает пейфон разработчиков, которые переписывают всё на ЭЙ АЙ, а затем они больше не нужны и их увольняют...
ЭЙ АЙ нас всех заменит... мне больно это слышать...
Ну так сколько можно
Вместо Windows 13 будет MS Ubuntu Ultimate. Вместо powershell будет PHP ActiveX. Вместо MSSQL будет MariaDB Enterprise Edition
Ты то че стонешь?
Чем делиться?
Они килобайты весят, ёптить. Твои асинки тоже по памяти не бесплатные.
Каким нахуй коллбекам? Виртуальные потоки за тебя всё делают.
> Охуеть, оправдание, конечно. Ты фреймворк пишешь или рабочий код?
Подумай пожалуйста над негативными последствиями дублирования кода. Или хотя бы изучи это, если думать нечем.
>Подумай пожалуйста над негативными последствиями дублирования кода. Или хотя бы изучи это, если думать нечем.
ни разу не сталкивался с такой проблемой. Ты её из пальца высосал потому что кроме коллбеков в обоссаной джаве нихуя нет
Стоит ли верить или это пиздёжь?
А нам насрать, что там в жабе! Это тред про шарп, другие языки обсуждать здесь запрещено!
Как раз даппер и будет выпелен нахуй потому что кривожопые мартышки угробили перфоманс в 0.
В 2025-м преимущество даппера перед EF по скорости настолько ничтожно, что ебля с ним теряет всякий смысл.
Недавно на линкедине стали мелькать в ленте посты от разных MVP про плохой даппер и быстрый ефкор. Какому-то главному паджиту походу печет, что два еврея 10 лет назад написали охуенный даппер и он до сих пор топчик, пока стадо индусни пилит ефкор и допилить не может. Напоминает историю с микрософт браузером, который тоже пишут онли паджиты и который никому никогда нахуй не нужен.
Даппер отлично показывает уровень экспертизы. Кто пишет продукт - все за даппер, потому что заебались писать sql через сраные экспрешены, а потом отлаживать хуй пойми как. Макаки с аутстаф галер - все дружно топят за ефкор, ведь в проектах на три месяца даппер слишком большая пушка.
>писать sql через сраные экспрешены, а потом отлаживать хуй пойми как.
Зачем мне что-то отлаживать если у меня нулевая нагрузка при запросах и скорость работы запредельная?
Твой ебучий дапер сделали долбоебы потому что если мне нужен будет сырой sql я руками могу написать все это на ado.net без всяких библиотек с оптимизацией под моё приложение. Я не понимаю нахуя мне костыли в виде даппера хуяпера который режет яйца если я могу писать все сам на низком уровне как мне надо.
Но мне не надо. Потому что те -Nмс что я выжму из ado.net не стоят того чтобы отказаться от EF.
Ну и да с твоим даппером нахуй идут любые спецификации и следовательно ты будешь весь код обмазывать 100500 имплементацией фильтра по "нерелеватный статус" и скакать по коду в поисках где эта залупа еще была. Я же меняю список класса InvalidStatusSpec и все 200 мест его использования сразу будут с новой логикой которая работает и с Enumerable и с Querable и с отдельными классами.
>заебались писать sql через сраные экспрешены, а потом отлаживать хуй пойми как
Ты хлебушек? Экспрешены, то ты как раз и можешь отладить в IDE, в отличие от ебучего sql.
>нулевая нагрузка при запросах
На локалхосте она у тебя нулевая. На проде ты охуел бы, если бы твой галерный проект когда-то добрался до прода.
>руками могу написать все это на ado.net
И руками мапить user.Name = reader["Name"].ToString() снова и снова. Отличный план. Даппер для этого и нужен, чтобы ты не страдал хуйней.
>спецификации
Продолжайте в том же духе. Наша контора так заполучила жирного кастомера. У них была система, сделанная адептами DDD, может даже вашим епамом, эта хуйня дико тормозила на продовых данных. Наша система летает потому, что построена вокруг бд, а не вокруг мокрых фантазий о чистом коде, в итоге с нами подписали контракт. Вы все правильно делаете, больше говна богу говна.
Я пишу продукты уже больше десяти лет, и я считаю, что sql в подавляющем количестве случаев нахуй не нужен, достаточно всё в монге хранить. И то, что для тривиальнейших вещей приходится писать километровые запросы с пятьюдесятью джойнами, а потом это ещё рекомбинировать из табличной в иерархичную структуру, это подтверждает. Ну или ебаться с еф, который тоже такой ебучий из-за несоответствия форматов данных.
>>495364
Суть даппера в том, что легко можешь замаппить результат на класс, что радикально сокращает количество бойлерплейта.
>в монге хранить
Ммм, эти версии записей, эти простыни кода для обработки. Потом оказывается, что мы неправильно поделили данные и теперь нужна еще одна бд для аналитики. В sql это был бы просто джоин, но мы не ищем легких путей, прикрутим эластик и кликхаус, прикрутим еще раз. Потом данные разъезжаются, ведь асида из коробки у вас нет и консистенси - это ваша проблема. Такие-то вайбы финтех стартапов.
Это простыни кода будут меньше, чем sql портянки, да и вместо версий можно миграции писать как для реляционных бд всегда делают.
С консистенси всё нормально с тех пор как появились транзакции. Ну и я говорил, что для всего свои инструменты. Кое-что нужно и в сиквеле хранить.
>Сидят предлагают засунуть EF в разные репозитории
Раньше надо было думать. Это бы помогло тебе, если бы ты внутри репозитория менял даппер на EF.
Заворачивать EF в репозиторий ПОСЛЕ того как ты перекатываешься с даппера бессмысленно.
Если не планируешь гранулярные-микро-юнит-тесты писать можешь забить хуй и использовать DbContext/DbSet напрямую, это и есть репозиторий.
>написали охуенный даппер и он до сих пор топчик
Ебаное говно твой даппер, он эмитит IL код в рантайме, что делает невозможным его использование в аот и лямбдах.
Dapper лучше переписать руками, на генераторах, вроде того https://www.nuget.org/packages/Finch.Generators . Только чел как будто проект не развивает
>адептами DDD
пидорская секта, обмажут все свои медиаторы и агрегаты автомапеером и ебуться в туза
>достаточно всё в монге хранить
Ещё одна пидорская секта. База данных из рекламного буклета. Эти долбоёбы настолько преисполнились, что объявили реляционные базы данных ЛЕГАСИ.
Я с утра пытался положить просто JSON объекты в монго, и после двух часов гомоебли с конвертацией JSON в BSON выкинул это говнище и просто в постгре сложил.

> Это простыни кода будут меньше, чем sql портянки
Ты ебанутый? У монго сучий блядский, ни на что не похожий, громоздкий синтаксис, по сравнению с которым sql нормален
> >>495396
> появились транзакции
В рекламном буклете появились. Там столько оговорок, что оказывается, что транзакции в монго работают только в одной реплике и только если в момент их обработки нет конкурентного доступа к данным.
Так же как и констрейнты, которые в монго в некоторых случаях не работают
Ты действительно хлебушек. Я в курсе что такое план запроса и как с ним работать. Разговор был про отладку которую в разы удобнее делать в IDE и на нормальном языке программирования. Для SQl тупо нет нормальных средств отладки. А твои планы запроса, это уже больше про оптимизацию готовых запросов, а не их отладку.
Если совсем нулевый, то 60К испыталка, 80...100 после. Если с опытом то от сотки.
На большее ты сейчас только по связям залетишь или если удачно на какой-либо срочный денежный проект залетишь. Но там придется напиздеть, что ты уверенный мидл и пройти соответствующий собес.
А ещё я могу одним движением руки заменить реальную БД на коллекцию в памяти или контекст в памяти и отладить код. С сырым sql ты можешь пойти нахуй, написать юнит тесты на это невозможно, никакой статической проверки твоих запросов и типов нет.
Как там в даппер кстати решается проблема когда необходимо дать фронту возможность задавать поля и направление сортировки по нескольким полям?
Чел. Протрезвей. Мне-то ты это нахуя пишешь? Мой тейк как раз против raw sql (ну и даппер я тоже вротебал, да)
> С сырым sql
С сырым sql тебя могут пидорнуть SQL инжекшеном. EF в том числе для безопасности используют.
> Как там в даппер кстати решается проблема
В даппере вообще такой проблемы нет. Просто берёшь Dapper.Automapper, и с помощью экспрешшенов пишешь запрос, а автомаппер за тебя все поля маппит и фильтры делает.
>решается проблема когда необходимо дать фронту возможность задавать поля
В Dapper нет такой проблемы. В даппере вообще нет проблем, которые EF якобы решает
О, вы из епама!
Джун, так и должно быть. Пробрасывать IQueryable до контроллера - это красный флаг и метка мартышки. Репозитори - это не абстракция таблицы в бд, как пишут паджиты, это абстракция ВСЕЙ базы. Не IQueryable<Order> IRepository.GetOrders(), а List<OrderDTO> IRepository.GetOrders(ITransaction t).
DbSet это и есть реализация репозитория, а DbContext это реализация паттерна uow.
В проекте делаешь IQueryContextFactory и ICommanContextFactory. Внутри через. DI получаем pooled или обычную фабрику контекста. Оборачиваем вызов CreateDbContext() добавив AsNoTracking для запросов и делаем метод который автоматически добавляет транзакции и заварачивает твой код.
Дальше все это через DI получаем где надо и пишем
await using var context = await _contextFactory.CreateDbContextAsync();
Погнали писать запросы.
Если ты завернул вызов EF в Repository, то поздравляю ты долбоеб паджит который где-то слышал про репозитории и не понимает для чего они нужны. Если тебе требуется повторно использовать фильтры, то велком писать спецификации, а не городить хуйню из DAL слоя в .NET.
Ебаный пиздец, ты высрал фабрику фабрик, чтобы просто сделать селект. Еще небось сверху обмазал автомапером, а то недостаточно круто. Хорошо, что я перекатился на голенг, там такой шизы нет.
> Пробрасывать IQueryable до контроллера
Правильно возвращать IEnumerable, а что там за ним скрывается - совершенно не важно. Хоть IQueryable, хоть массив
> ...а List<OrderDTO> IRepository.GetOrders(ITransaction t).
В DDD нельзя создавать репозитории конкретных сущностей, у тебя скорее будет один общий репозиторий
interface IRepository<TAggregate, TKey>{
Aggregate Get(TKey key);
IEnumerable<TEntity> Get<Entity>(TKey key);
}
При этом хорошей практикой считается если Агрегат сам может быть репозиторием. Это даёт чистое разделение ответственности и избавляет от антипаттерна анемичных моделей
>Если ты завернул вызов EF в Repository, то поздравляю ты долбоеб паджит который где-то слышал про репозитории и не понимает для чего они нужны.
У меня был долбоёб один, который так сделал. Он буквально инжектил везде по 3-10 UOW вот так
конструктор(
IUnitOfWork<IRepository<Bill>> billUnitOfWorkRepository,
IUnitOfWork<IRepository<Account>> accountUnitOfWorkRepository,
IUnitOfWork<IRepository<Country>>
)
{
...
}
Он греко-киприотом был. Я его спросил, которым из них надо коммитать, он ответил какой-то набор слов про HEXAGONAL CLEAN DDD ARCHITECTURE, я посмотрел на этот долбоебизм ещё пол года и уволился нахуй
>высрал фабрику
Да не, вроде норм выглядит. Можно делать короткоживущий DBContext,
>я перекатился на голенг, там такой шизы нет
В сишарпе можно писать в стиле любого шизика.
Но, в голенге ты пишешь в стиле голенг-шизика.
Вот и вся разница. Ты никогда не нахуяривался и у тебя не возникало желания написать восьмиугольный-дидиди-сикьюэрэс?
>высрал фабрику
В смысле высрал. Это стандартный способ использования EF. Регаешь через AddDbContextFactory фабрику контекста и через неё получаешь контексты. Если у тебя хай рпс, то pooled.
DbContext это еденица работы. Каждый твой метод сервиса должен создавать новый контекст. EF оптимизирован для того чтобы ты мог создавать тысячи контекстов в секунду. Стандартный размер пулла контекстов это как раз 1000 штук.
> Каждый твой метод сервиса должен создавать новый контекст.
а как же лайвтаймскоуп на запрос? Или ещё хуже, когда диби-контексты создаёт медиатор где-нибудь в жопе
MongoDB и есть легаси база данных.

Я был простым прогером петухон + голанг, но месяца 3 назад пришлось в связи с задачами перейти на дотнет. уже писал на нем раньше к сожалению Я ебал в рот ваш дотнет, бойлерплейтный кал, сосите мои пальцы, пидарасы, 5 дней в неделю я трогаю кал. Я больше не хочу трогать ваш кал, с понедельника я уволюсь и больше не буду прикасаться к вашему калу с медиатром, еф кором, автогенерацией обработчиков. Буду отдыхать до следующей весны, а там начну разводить кроликов у себя на гектаре. Пейте мочу, рабы мелкомягких.
На самом деле против дотнета ничего не имею, просто противно на нем писать, пользоваться его тулзами. Так что уволюсь и отдохну.
>Я ебал в рот ваш дотнет
Что именно не понравилось? Такая себе Ява с нескучными обоями, всяко лучше Раста или Коклина
А какую СУДБ брать? Redis?
> не буду прикасаться к вашему калу с медиатром, еф кором, автогенерацией обработчиков
И с автомаппером!
А он и не против
У тебя с руками проблемы.
>>495439
Это переписывается в виде экспрешенов, наркоман. Тебе боженька балмор дал linq, зачем ты эти билдеры городишь?
>>495443
Ещё раз. Если тебе надо кучу реплик с транзакциями, у тебя там гостайны или банковские балансы, ну храни это в реляционной бд. Не надо граничные случаи придумывать. У 90% сервисов нет никаких гонок за конкретными записями, а вероятность нарушения консистенси даже без каких-то специальных мер ниже, чем вероятность падения метеорита на датацентр.
>Если тебе надо кучу реплик с транзакциями, у тебя там гостайны или банковские балансы, ну храни это в реляционной бд.
Да я и так всё в реляционках храню. Монго - говнище обоссаное мочевиком.
@
Медиатр
@
Автомаппер
@
АОП Интерцепторы
@
Монго-биби
@
Чистая архитектура
@
Запахи кода
> ни разу не сталкивался с такой проблемой.
Опыт двух лаб не показатель.
> потому что кроме коллбеков в обоссаной джаве нихуя нет
Thread.startVirtualThread(() -> sharpFly.obossat("Нихуя себе проекции, лол."));

>Опыт двух лаб не показатель.
Ты долблёб, проблема дублирования при одновременной поддержке синхронного и асинхронного апи может возникнуть только в случае когда у тебя публичная библиотека.
Когда пишешь рабочий код, ты просто удаляешь лишний метод.
> Thread.startVirtualThread(() -> sharpFly.obossat("Нихуя себе проекции, лол."));
Это коллбек?
>А ВОТ ТАК, И ВОТ ТАК, И ВОТ ЕЩЁ ЭТО СДЕЛАЙ, А ЭТО НЕ ДЕЛАЙ, И ТОГДА! ТОГДА НОРМАЛЬНО БУДЕТ)) ЖЖ)
Ясн.
> Это коллбек?
Это струя мочи летит тебе в рожу. Открывай рот.
По чистой архитектуре надо. Вдруг у тебя, ну, cli вызовы будут, по gprc, итд. Ядро должно быть консистентным всегда. оно знать не знант, что ктото выше чето провалидировал.
но как всегда it depends
> Это струя мочи летит тебе в рожу. Открывай рот.
Вялая струйки пивной скуфьей кегли, застраяшей в 2004 году?
А есть ли пак вопросов которые задают hr-ки на скрининге? Меня хуйню спросили о которой я вообще впервые услышал
че-то про ELK ( я вопрос даже не понял потому что не знал аббревиатуру эту)
опен телеметри че это
ну и с хр забыл про слово интернирование, но смысл значения нет ей объяснять, она не разраб, так бы меня чел по ту сторону понял и засчитал бы ответ. пиздос.
200к рублей собес на мидла
я умею гуглить, спасибо
Где больше бойлерплейта, тут:
public string Name { get; set; }
или тут?
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
c# поддерживает оба синтаксиса, если что. А петухонская джава?
А вот так в джаве можно:
record Person(string Name, int Age);
?
Помоги разобраться, пожалуйста
И шо? Сейчас бы доебываться до размера кода. В голанге весь код - это бесконечные портянки с err != nil, ужас ужас. Тем не менее, опытные разработчики массово перекатываются на го, в дотнете остаются дауны, которые не знают, чем select * отличается от select id. На голанге пишут нагруженные сервисы, на сишарпе сидят пускают слюни в автомапер, потому что кадры решают, а не синтаксический сахар.
>В голанге весь код - это бесконечные портянки с err != nil, ужас ужас.
Угу, но за бойлерплейты предъявляют почему-то шарпу.
> И шо? Сейчас бы доебываться до размера кода.
так этот джава-петух и доебался. Я просто ему пояснил
> массово перекатываются на го
Не забудь добавить, что нас всех ЭЙ АЙ заменит
В джаве есть ломбок и котлин, если ты дохуя пурист. Рекорды тоже есть


>Попробовал сделать middleware для глобальной обработки ошибок, но в режиме отладки он не срабатывает нихуя, вываливается в исключение. Это норма? Почему в гайдах, у всех работает и в режиме отладки тоже?
Да, уже понял. Вчера весь день убил, пытаясь решить эту несуществующую проблему. Хз, челы в своих гайдах могли бы и упомянуть, что нужно без дебага запускать.

Есть ещё IExceptionFilter, можешь его попробовать
>глобальной обработки ошибок
А хули с ними делать? Для логирования можно просто врубить стандартный функционал и сразу еще настроить откуда какие логи собирать и куда их слать.
>А хули с ними делать?
Ну говорят, что трай кетчи по всему коду это кал и можно исключения обрабатывать в одном месте.
Не, это хуевый подход.
Глобальный обработчик ошибок больше нужен для отлавливания какой-нибой непредвиденной хуйни, чтобы у тебя тупо сервис не упал из-за того-что где-то непредусмотренный таймаут или что-то еще выскочило.
Вот нахрена тебе к примеру тащить какой-нибудь ConsumeException из кафки и логику его обработки на самый верх, когда проще его обработать там где у тебя работа с ней ведется и просто самому гарантировать, что оттуда никакой эксепшен не выскочит.
Можно же в Middleware при ошибке сделать так
var error = ex switch
{
CustomException Exception e => new Error("e.Message"),
_ => new Error( "Внутренняя ошибка сервера")
};
context.Response.StatusCode = (int)StatusCode;
context.Response.ContentType = "application/json";
await context.Response.WriteAsJsonAsync(error);
>Не, это хуевый подход.
А у вас никогда не было такого, вот читаешь, учишь как надо. Потом смотришь другой источник, там говорят, что это хуйня, надо по-другому. Переделываешь. Потом смотришь третий, там пишут, что это тоже хуйня, надо вообще иначе.
Почему вот с программированием постоянно так?
>трай кетчи по всему коду это кал и можно исключения обрабатывать в одном месте.
Больше слушай долбоебов. Исключения надо ловить там где он происходят и ты их ждёшь, причём типизированые и писать нормально логи контекста этого исключения.
Тем более маразм это try catch в корне вызова. Ты таким макаром перфоманс в 0 просто убиваешь потому что это очень дорогая операция.
Можно сделать что угодно. Я говорил о том, что ловить эксепшены в отдельной мидлвари можно, но тащить туда именно их обработку со всех слоев - такое себе занятие.
>>500202
Постоянно, но ведь так веселее. Иначе разработка была бы весьма унылым занятием.
Опять же любой подход это всего лишь инструмент для которого есть своя область применения. Даже для goto можно найти ситуацию которая сэкономит тонны кода, времени и тактов.
Вот это реальный пример долбаеба который где-то что-то услышал и просто репродуцирует чужое мнение
>то это поломанная инкапсуляция.
Ты долбоеб. Проперти с get-set-init как раз и есть чистейший пример нормальной инкапсуляции. По сути это и есть контракт который ты выставляешь наружу закрывая им детали реализации того что в реальности у класса там под капотом за этим проперти содержится.
>закрывая им детали реализации
Так ты гет-сетами наоборот, открываешь детали и показываешь, что там у тебя внутри класса творится. Доступа к полям, даже через промежуточные методы, быть не должно, если ты нормальное ООП хочешь, а не его подобие.
Но знать про анемик может и тот кто его не любит
>>500639
Нарушают инкапсуляцию, потому-то сеттеры выносят логику изменения состояния объекта извне, потому что позволяют частично и произвольно изменить состояние объекта. В идеальном случае должен быть один метод, который делает всю работу за одни вызов.
мимо
Но это только в твоей картине мира. В ФП инкапсуляция не нужна. ФП приложение это либо
1) один огромный стейт и куча операторов, функционалтных апдейтов, которые применяются к стейту через рекрсивный вызов main функции. А логика выбора оператора на каждом шаге рекурсии обычно через паттерн матчинг состояния делается.
2) однопроходная функция с вводом и выводом данных
>Но это только в твоей картине мира
Расскажи про свою, где инкапсуляция сохраняется.
Про ФП я ни слова не писал, не знаю зачем ты мне про него расписываешь.
>Проперти с get-set-init как раз и есть чистейший пример нормальной инкапсуляции.
А чем это отличается от того, чтобы филд ЗАЭКСПОУЗИТЬ.
Нихуя я слово знаю, да? я англичанин а ты пидор
>показываешь, что там у тебя внутри класса творится.
В DDD у объекта не предусмотрено свойств. Он может только получить событие извне, чтобы не раскрывать свой публичный контракт
>Но это только в твоей картине мира. В ФП инкапсуляция не нужна. ФП приложение это либо
>1) один огромный стейт и куча операторов, функционалтных апдейтов, которые применяются к стейту через рекрсивный вызов main функции. А логика выбора оператора на каждом шаге рекурсии обычно через паттерн матчинг состояния делается.
>2) однопроходная функция с вводом и выводом данных
Всё правильно, только ФП в DDD не предусмотрен и не используется
Чем вызов zalupa.SetPupa(42) отличается от zalupa.Pupa = 42.
Оба варианта это одинаковый IL и байт код. Проперти это сахар.
На уровне сборки свойства и методы это разные вещи. Рефлексия по разному работает.
Джавка хуйня, кстати я с ней на дотнет перешёл
Речь про то, что оба твои варианта ломают инкапсуляцию. А не то, что один лучше другого...
> Где больше бойлерплейта, тут:
> public string Name { get; set; }
> public string Surname { get; set; }
> public string Anus { get; set; }
> public string Hui { get; set; }
> public string Govno { get; set; }
> public string Muravei { get; set; }
> или тут?
> @Getter @Setter
Во втором, наверное. Хз.
Зачем тебе кстати гетсет если проперти публичные? Чтобы что?
>record Person(string Name, int Age);
Давно можно, ты откуда свалился? Только редко используется это ибо ломбок гибче.
Кто перекатывается на говно? Хуйню не неси.
>Зачем тебе кстати гетсет если проперти публичные?
Потому что свойства блять это блять не поля класса. У тебя при сборке свойство разворачивается в приватное поле, метод сеттер и метод геттер.
Тебя не смущает что свойства могут быть частью интерфейса и их сеттер геттер могу иметь атрибут доступа, а еще к они могут быть виртуальные и абстраные. Прям как методы.
Какая-то бесполезная мозгодрочка ибо индусы из микрософта не смогли в белый дизайн. Ясно.