Это копия, сохраненная 28 июля 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Ждем лета...
1. Ресурсы:
— https://dotnet.microsoft.com/learn
— https://ru.stackoverflow.com/a/416585/422180
— https://metanit.com
— https://professorweb.ru
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://pastebin.com/HT7Hi6FD
Прошлый тред: >>2649578 (OP)
Поначалу пытался вкатиться во фронт с тайпскриптом. Учил долго его но по итогу понял что не мое. Паралельно с фронтом зачастую ковырял бэк на node.js и это мне нравилось больше. Решил все же оставить фронт и попробовать бэк. Выбрал сначала golang но ничерта в нем не понял и забросил его. Решил попробовать на сишарпе. В итоге язык мне очень сильно вкатил. Подучил синтаксис его и с большим удовольствием запилил пару примитивных тудушек на нем. Теперь стоит вопрос целесобразности углубления в изучение экосистемы шарпа. Стоит ли это делать? Реально ли подучить стек на уровне джуна не потратив больше полугода на это? Очень вкатывает этот процесс мне, буквально по 6 часов в день минимум это делаю но времени у меня не очень много, деньги заканчиваются.
БАМП!!!
Если заниматься интенсивно, то вполне можно. В веб-разработке довольно хорошие позиции имеет. Только это, анон, готовься к тому, что платформы под шарп будут жрать оперативку компа, как ебанутые.
Я подушню.
Зависит от первоначальной базы. И куда ты там вкатываться собрался.
Типа мое мнение, как человека, который сначала пришел на завод, писал на си, и только спустя пару лет перекатился в шарпы - знания того, кто по метаниту условному - изучил минимально необходимый уровень для работы - говно полное. Типа да, можно взять такого, если команда сильно загружена и на него тупую работу скинуть, по деланью ручен и все такое. Но как только возникает какая-то специфичная хуйня, все, пизда.
Ну. Типа вот ты изучил шарп. Ок. Да. Инструментарий. Асп эти. Возникает задача - настройки подключения к БД - менять "на лету". Т.е. админ должен иметь возможность просто взять и изменить строку подключения для всего приложения. Вроде элементарная задача, но многих приучили - вот есть файлик appsettings.json, я всю жизнь так подключался к БД, ваша задача - нереализуема на шарпе, извините. Утрирую конечно и задача обычно не такая дебильная. Просто про сам майндсет говорю.
К чему. К тому, что по хорошему - надо покодить разное годик. Желательно читая умные книжки, решая задачки. Сделать свой веб-сервер простейший, который может статику отдавать и апишки предоставлять. Вот когда это - да, можно не тратить время, чтобы набить шишек - а уже начинать учить ASP, потому что общее понимание и все это вот есть, тебе просто нужен интструмент.
Но. Если цель просто найти работу и чтобы денежку платили, а тебе в принципе похуй, что ты будешь унылой рутиной заниматься, которую более шаристые делать просто не хотят - то да, за полгода освоить чтобы вкатиться на 40-60к можно.
Это фигово. У меня ноут не шибко мощный, 16 гигов оперативы есть но все же. Видимо линь поставлю не слишком требовательный.
>>697505
Услышал тебя, благодарю. К сожалению у меня нет времени чтобы досконально разбираться в том что ты описал. Не из-за лени, мне действительно очень вкатывает процесс обучения и написания кода на шарпе, даже если это рутинная хуйня. Просто очень уж надо поскорее начать денежку получать поскольку я сейчас без работы а через несколько месяцев деньги закончатся. Да могу экономно пожить где-то пол года но все же. Но если есть советы как выстроить обучение чтобы научиться этому то с радостью выслушаю и приступлю к ним как только базовые знания экосистемы шарпа и баз данных получу.
16 Гб терпимо, помниться я на 6 ГБ диплом писал, хотя изругался пиздец как.
В шарпе пиздатый синтаксис, и очень близок к канонiчному ООП.
Старые ролики с ютуб-канала ExteremeCode в свое время помогли освежить память относительно ООП.
А по работе все равное первое время будешь нубачить, вкатываясь в особенности работы, дважды подтверждено лично.
Если нужно прямо срочно - бери метанит и начнись по урокам проходиться. Если базы совсем нет - берешь и пробуешь что-нибудь с изученным сделать по быстрому.
Из того что надо чтобы джуном взяли в что-то с вебом связанное:
База по программированию(то что обычно на уроках информатики было)
База по синтаксическим конструкциям языка (ветвления, циклы, методы, классы, вот это вот)
Основные структуры данных - массивчики, связные списки, деревья, хешмапы, вот это вот все
Минимальное понимание, чем управляемый код от неуправляемого отличается
Минимальное понимание, что такое среда выполнения
Минимальное понимание, что такое сборщик мусора
Работа со строками
Работа с коллекциями
LINQ
Исключения и их обработка
База по ООП (инкапсуляция, наследование, полиморфизм, хорошо если еще пару паттернов знаешь и сможешь объяснить про них чутка)
Вот это вот - это прям база-база, если ее нет - дальше спрашивать не будет смысла
Дальше - уже тут будет решаться, берут тебя или нет на грязную работу:
Веб -
Клиент-серверные приложения, че такое клиент, че такое сервер. К чему относится тот код, который ты будешь писать.
HTTP - че зачем и почему, какой уровень модели OSI вся эта духота. Структура HTTP-запроса, какие методы, че такое заголовки, почему всегда 200 - не оч хорошо
REST - ну, основные моменты
EF/EFCore - че зачем почему
Identity - че зачем почему
Авторизация, политики и вся эта вот духота
DI - че зачем почему, обязательно надо сказать, что это охуенно и вообще.
Асинхронщина - на базовом уровне, че зачем и почему.
Минимальное понимание что такое юнит-тесты, как их писать, какие фреймворки для шарпа используются.
Если не повезет - MVC, Blazor и вот эта духота.
Десктоп -
Потоки - че такое основной поток приложения, че в шарпе делает volatile, синхронизация доступа, блокировки, гоники-хуенки
Асинхронщина - на базовом уровне, что зачем и почему
MVC - че каждая буква значит и пояснить зачем оно надо
MVVM - че каждая буква значит и пояснить зачем оно надо
EF/EFCore - че зачем и почему
Работа с ресурсами приложения
Локализация
Стилизация
Вот это вот - минимально необходимый набор, чтобы в большинство контор на трейни-джуна попасть и за миску супа начать работать. Дальше - по результатам будет.
Если нужно прямо срочно - бери метанит и начнись по урокам проходиться. Если базы совсем нет - берешь и пробуешь что-нибудь с изученным сделать по быстрому.
Из того что надо чтобы джуном взяли в что-то с вебом связанное:
База по программированию(то что обычно на уроках информатики было)
База по синтаксическим конструкциям языка (ветвления, циклы, методы, классы, вот это вот)
Основные структуры данных - массивчики, связные списки, деревья, хешмапы, вот это вот все
Минимальное понимание, чем управляемый код от неуправляемого отличается
Минимальное понимание, что такое среда выполнения
Минимальное понимание, что такое сборщик мусора
Работа со строками
Работа с коллекциями
LINQ
Исключения и их обработка
База по ООП (инкапсуляция, наследование, полиморфизм, хорошо если еще пару паттернов знаешь и сможешь объяснить про них чутка)
Вот это вот - это прям база-база, если ее нет - дальше спрашивать не будет смысла
Дальше - уже тут будет решаться, берут тебя или нет на грязную работу:
Веб -
Клиент-серверные приложения, че такое клиент, че такое сервер. К чему относится тот код, который ты будешь писать.
HTTP - че зачем и почему, какой уровень модели OSI вся эта духота. Структура HTTP-запроса, какие методы, че такое заголовки, почему всегда 200 - не оч хорошо
REST - ну, основные моменты
EF/EFCore - че зачем почему
Identity - че зачем почему
Авторизация, политики и вся эта вот духота
DI - че зачем почему, обязательно надо сказать, что это охуенно и вообще.
Асинхронщина - на базовом уровне, че зачем и почему.
Минимальное понимание что такое юнит-тесты, как их писать, какие фреймворки для шарпа используются.
Если не повезет - MVC, Blazor и вот эта духота.
Десктоп -
Потоки - че такое основной поток приложения, че в шарпе делает volatile, синхронизация доступа, блокировки, гоники-хуенки
Асинхронщина - на базовом уровне, что зачем и почему
MVC - че каждая буква значит и пояснить зачем оно надо
MVVM - че каждая буква значит и пояснить зачем оно надо
EF/EFCore - че зачем и почему
Работа с ресурсами приложения
Локализация
Стилизация
Вот это вот - минимально необходимый набор, чтобы в большинство контор на трейни-джуна попасть и за миску супа начать работать. Дальше - по результатам будет.
Да. Если веб - скорее всего еще докер, на уровне - можешь объяснить че это такое, написать простейший Dockerfile для сборки и запуска в докере и умение отлаживать инструментами студии приложение в докере крутящееся.
>почему всегда 200 - не оч хорошо
очень спорное заявление. кодировать ошибки логики в хттп ответы - вот что есть дичь.
А разделение ошибок транспорта и ошибок логики - как раз очень даже хорошо.
Не слушайте толстого, вкатуны. Не каждый "мидл" по его списку пройдется и без ошибок со знанием пояснит. А от джуна подавно ни один адекватный лид такого объема знаний не ждет. Чтобы крудошлепить имплементации бизнесовых методов вам эти знания не нужны. Умейте кодить и знайте гит. Фреймворкам на работе научитесь. На собесе косите под молодого Торвальдса. Если судить по молодежи с моей работы, навыку "говорить о чем угодно со знанием дела, нихуя при этом не понимая" сейчас в универах хорошо учат. Это основное умение чтобы собес пройти.
бла бла. бла бла бла. ресты хуесты
а как берешь апи какого нибудь крупняка типа клауды или гугл - и внезапно они шлют 200. Может они чего то не знают....или наоборот - ЗНАЮТ )
Без ошибок - надо только первую часть.
Вторая часть - должна показать, что ты хотя бы слова такие знаешь и слышал про них. Я не говрил нигде, что нужно это наизусть знать вплоть до кишочков. Но если ты банально не знаешь что такое HTTP и как сделать свой эндпоинт для обработки запроса - тебя брать в команду на работу - нет смысла.
И я таки напомню. АйТи компания и конекретная команда - не вуз и не курсы, которые тебя обучить и "вырастить" хотят. Тебя нанимают, потому что у текущей команды не хватает рук, чтобы всю работу выполнять. Либо потому что открылось новое направление и люди нужны, которые будут его развивать. Чел, который сидит-вдупляет 4 месяца, как ему из XML достать данные и запихнуть в базу, а потом говорит, что вы такие мудаки, не дали ему сниппет чтобы он копипастнул - нахуй не нужен в команде.
Ну блин. Это просто так и есть. Вот давайте для вас, умников, на понятные аналогии. Вот вы решили в турике по кс поиграть, хотите призовые получить. Нужен 5й чел в команду. Будете вы брать чела, который в каждой катке: "А как мне купить патроны?" спрашивает? "А где бомбу закладывать?" Еще и ливает если его ноускопом ебнули. Нахуй такой в тиме не нужен. И такой кадр в тиме - будет всех остальных на дно тянуть.
И самое главное - 99% контор, которые готовы предложить тебе работу - нихуя не гугл, в которых настолько всего, что ты можешь год нихуя не делая просидеть, и никто даже не заметит. В среднем, ты либо будешь у интеграторов работать, либо в продуктовой фирме. В обоих вариантах - это не очень богатые работадатели и они на тебе зарабатывают деньги, а не на махинациях с ценными бумагами и продажей воздуха. Потому хоть что-то, но стоить ты должен, при этом тебя они еще и дороже чем ты есть будут перепродавать. А как, блядь, продать дороже чела, который слыша слова про JWT - падает в обморок, слыша про потоки - нервно хихикает, на вопрос про докер - говорит, что да, это такая фигня, чтобы доки хранить.
Короче. Я минимум, чтобы в норальную контору за нормальную ЗП дал. Альтернатива - идти на завод работать АВТОМАТИЗАТОРОМ ПРОИЗВОДСТВА и на формах клепать очередную хуйню, которая будет деду инженеру - по нужным папочкам раскидывать документы и сохранять в какое-нибудь местное файловое хранилище в фоне. За 25к.
Без ошибок - надо только первую часть.
Вторая часть - должна показать, что ты хотя бы слова такие знаешь и слышал про них. Я не говрил нигде, что нужно это наизусть знать вплоть до кишочков. Но если ты банально не знаешь что такое HTTP и как сделать свой эндпоинт для обработки запроса - тебя брать в команду на работу - нет смысла.
И я таки напомню. АйТи компания и конекретная команда - не вуз и не курсы, которые тебя обучить и "вырастить" хотят. Тебя нанимают, потому что у текущей команды не хватает рук, чтобы всю работу выполнять. Либо потому что открылось новое направление и люди нужны, которые будут его развивать. Чел, который сидит-вдупляет 4 месяца, как ему из XML достать данные и запихнуть в базу, а потом говорит, что вы такие мудаки, не дали ему сниппет чтобы он копипастнул - нахуй не нужен в команде.
Ну блин. Это просто так и есть. Вот давайте для вас, умников, на понятные аналогии. Вот вы решили в турике по кс поиграть, хотите призовые получить. Нужен 5й чел в команду. Будете вы брать чела, который в каждой катке: "А как мне купить патроны?" спрашивает? "А где бомбу закладывать?" Еще и ливает если его ноускопом ебнули. Нахуй такой в тиме не нужен. И такой кадр в тиме - будет всех остальных на дно тянуть.
И самое главное - 99% контор, которые готовы предложить тебе работу - нихуя не гугл, в которых настолько всего, что ты можешь год нихуя не делая просидеть, и никто даже не заметит. В среднем, ты либо будешь у интеграторов работать, либо в продуктовой фирме. В обоих вариантах - это не очень богатые работадатели и они на тебе зарабатывают деньги, а не на махинациях с ценными бумагами и продажей воздуха. Потому хоть что-то, но стоить ты должен, при этом тебя они еще и дороже чем ты есть будут перепродавать. А как, блядь, продать дороже чела, который слыша слова про JWT - падает в обморок, слыша про потоки - нервно хихикает, на вопрос про докер - говорит, что да, это такая фигня, чтобы доки хранить.
Короче. Я минимум, чтобы в норальную контору за нормальную ЗП дал. Альтернатива - идти на завод работать АВТОМАТИЗАТОРОМ ПРОИЗВОДСТВА и на формах клепать очередную хуйню, которая будет деду инженеру - по нужным папочкам раскидывать документы и сохранять в какое-нибудь местное файловое хранилище в фоне. За 25к.
Майки забили на LSP, делая стримы - давайте тоже забьем и в своем коде!
Майки забили на SRP, делая сокеты - давайте тоже забьем и в своем коде!
Майки сначала советуют везде указывать имя параметра, потом говорят, что это говно практика.
В гайдлайне последнем - майки пишут, что надо с _ приватные поля обзывать, а если по коду смотреть - m_ - в половине их классов используется.
Там тоже работают люди. И у этих людей есть свои взгляды на некоторые вещи. Сверху - у гугла миллионы бачей вбуханы в инфраструктуру и тех специалистов, которые могут это все заставить работать. В большинстве случаев - у тебя нихуя не гугл и не амазон. Копирование их подходов, в случае если ты не понимаешь, зачем они это делают и какие проблемы решают они - это просто карго культ ебучий. Они - могут, блядь, платить инженерам по 200к в год, чтобы те все поддерживали, у тебя - будет 1 чел, который быстро погуглил как настроить nginx - и на проде с всегда 200 - у тебя начнется хуета с кешами-хуешами и прочей залупистикой.
Когда дорастете до гугла, прийдут дядьки из гугла вам в тиму - тогда и можете гугловские и прочие приколы брать. А пока я вижу, как яндекс - так же обезьянничает, а модбас ебучий к IoT своему - прикрутить нормально не в состоянии.
Ты советуешь челам идти самообучаться на протяжении вечности. А кушать им что? А мотивацию где брать чтобы изучать бессмысленные в отрыве от реализаций в реальных проектах фреймворки и подходы? И самое смешное, что если чел реально такой молодец и все это знает, то он сам будет на собесах себе фирму искать, а не наоборот.
Айти наводнено вкатунами потому что, чтобы начать работать, условие "все знать" у нас не обязательное. Миска риса это - умеешь кодить, можешь писать код согласованно с другими разрабами - то бишь пушить так, чтобы ничего не ломать остальным. Что писать челу скажут, понимать ничего не нужно - стреляй туда, грубо говоря. Ах да отладкой пользоваться хорошо бы сразу уметь, а не начинать учиться этому после того как челу 10 раз ответили "я не знаю почему у тебя не работает, посмотри в отладке".
>В большинстве случаев - у тебя нихуя не гугл и не амазон.
и что с того? рестопоклонники никак не могут оправдать натягивание ошибок логики на хттп статусы кроме "а вот там где то написали что так надо".
>nginx - и на проде с всегда 200 - у тебя начнется хуета с кешами-притянуто за уши. и как только раньше жили то? а нормально. потому что вернуть 200 GET запросу и POST/PUT запросу - 2 большие разницы.
Та что из того что я написал - на протяжении вечности-то учится?
Это все можно узнать за время курсоча уровня: Автоматизация библиотеки с использованием ASP.Net Core.
>>698091
> натягивание ошибок логики на хттп статусы
Это просто удобно как в плане сопровождения, так и для клиента. Какие еще нужны оправдания?
Давай так. Сколько транспортных протоколов, за время разработки - сменилось, у тебя? И насколько часто это происходило? А давай дальше вопрос. Почему мы должны в JSON'е передавать, если мы тогда можем TLV какой-нибудь использовать, раз уж отходим от HTTP, то чего бы не отойти и от текста с JSON/XML, чтобы уж точно наше приложение не зависило от каких-то непонятных технологий и форматов передачи данных. А то, знаешь ли, прибили гвоздями свои жсоны, завтра образуется какой-нибудь JSON Foundation, закроет формат и будет денежку просить. Давайте не будем и на JSON'е как формате передачи базироваться, все равно же говно какое-то а не протокол, TLV'шными мы можем экономить охуеть сколько места. А можно и дальше - пропиеретарный бинарный протокол, который только наши клиенты понимают, и плагин для браузера. Путь настоящих гигашлеп, которые не хотят ни от кого зависеть.
> говно какое-то а не протокол
говно какое-то а не формат
> экономить охуеть сколько места
экономить охуеть сколько трафика
Спать больше надо
>Это просто удобно как в плане сопровождения, так и для клиента. Какие еще нужны оправдания?
пытаться натянуть 100500 ответов логики на небольшой набор хттп ответов
"удобно" лол
>раз уж отходим от HTTP, то чего бы не отойти и от текста с JSON/XML,
мы не отходим от хттп. мы НЕ приходим. хттп изначально был транспортом. и на этот транспорт решили натянуть ответы логики. И как раз тут встает вопрос - а мы потом перейдем на вебсокеты и где будут ваши хттп ответы?
> а мы потом перейдем на вебсокеты и где будут ваши хттп ответы
Когда перейдем - тогда думать и будем, няша. Придумать свой протокол, поддерживать его и развивать - это нифига не простая задача.
> пытаться натянуть 100500 ответов логики на небольшой набор хттп ответов
Тебе и не нужно 100500 ответов логики натягивать. Еще раз - не строй из своей конторы с числом кодеров - 20 человек гугл. Вы просто надорветесь, ну, либо если вы аутсорс - ты говно сделаешь, а другим потом поддерживать это говно.
> Когда перейдем - тогда думать и будем, няша
нет. вы уже сейчас должны думать "а как нам логику на транспорт переложить". и я как клиентописатель не раз материл аписоздателей потому что каждый видит эту задачу по своему.
>Тебе и не нужно 100500 ответов логики натягивать
и не натягиваем. и размер и сложность апи не зависит от размера конторы. Даже в одно рыло можно запилить к продукту огромный и валидный апи. Типа конторы только бложики пишут ))
Когда сделают уже вс для линупсов? Для мака есть для шиндошса есть, а где для линупса?
Для мака тоже нет, там переименованный Xamarin, не имеющий к студии никакого отношения. Можно так же переименовать на линуксе MonoDevelop.
Ну или ебаться с убогим вскодом.
> вы уже сейчас должны думать
Давай вычтем из твоей ЗП ту часть, которая будет уходить человеку, который будет разрабатывать и поддерживать апи, которое должно быть агностично к транспорту.
Ну или сам иди и делай как тебе нужно, раз ты клиентописатель.
> и размер и сложность апи не зависит от размера конторы
Зависит. Если у вас на всю контору - 20 человек программистов, а вы тратите ресурсы, чтобы придумать апи, на случай, который может никогда не произойти - вы как минимум ебанаты, как максимум - с такими растратами - вы по миру пойдете. Если ты предлагаешь пилить свой, специфичный для вашего приложения протокол - опять же, давай идти дальше и делать свою, специфичную для вашего приложения ОРМ, а то вдруг завтра вы решите переходить на носкуль, или шарить в памяти чет, или из файлика читать. Аргументы - будут ровно те же, что ты приводишь для отказа от реста и статускодов. Рацоинальность этой хуйни - околонулевая при этом, если вы не способны этот велосипед потом развивать и поддерживать.
> Даже в одно рыло можно запилить к продукту огромный и валидный
Та в одно рыло и ОС реального времени написать можно. Хули бы не пилить ОС реального времени на каждом проекте, под ваше приложение? Аргумент просто 11/10.
>который будет разрабатывать и поддерживать апи, которое должно быть агностично к транспорту.
ммм. а в чем проблема? наоборот, нужно мудрить с тем чтобы оно было завязано на хттп.
>Ну или сам иди и делай как тебе нужно
а я и делаю. я использую общие коды для ошибок, но разделяю ошибки транспорта и логику (не чураюсь подходящих хттп кодов, но не играю в угадайку "какой бы код выбрать")
>а вы тратите ресурсы, чтобы придумать апи
ты вообще о чем дядя??? - апи выглядят одинаково. Никто другие принципы рест не отменяет. что ты заладил. Просто тебе придется делать ДОПОЛНИТЕЛЬНЫЙ шаг вида "тааак вот у нас логика дает ошибку и нужно смапить ее на хттп код, пошли выбирать код".
Это тебе нужно прилагать ДОПОЛНИТЕЛЬНЫЕ усилия по сравнению с агностикхттп вариантом.
вся разница в том что ты вернешь код и тело, а в другом варианте будет доп обертка вида
{ "success": ..., "data": ..., "error":...}
вот и вся разница.
> { "success": ..., "data": ..., "error":...}
Так это не агностичный к транспорту протокол. Это rpc-like. Если мы возьмем в качестве транспорта голый UDP - оно посыпится нафиг без кадрирования. Хреновый протокол придумал. Давай следующий.
> без фреймворков
> http
Будешь парсер HTTP писать и гонять его поверх сокетов? Или будешь ебаться с HttpListener?
Не нужно без фреймворка, если у тебя есть база какая-то. Задолбаешься, если будешь прям по хардкору.
Лучше наоборот - возьми свой ТуДу и придумай ему более-менее законченный вид:
Есть пользователь, он может добавлять, изменять, удалять задачи.
У каждого пользователя - свой список задач.
Чтобы получить свой список - нужно авторизоваться на сервере.
У задач - можно выставлять приоритет, дедлайн, прогресс, затраченное время.
К задачкам - можно прикрепить файлики.
В качестве киллерфичи - ранжирование задач по приоритету+дедлайну. Т.е. в самом верху - самые приоритетные задачи которые ближе всего к текущей дате.
В качестве клиента - достаточно постмана/свагера.
Потом к этому - добавляешь возможность группировать задачи в иерархию(родительская задача-дочерние задачи) и проекты.
Как задача максимум - делишь пользователей на менеджеров-исполнителей. Исполнителям задачи просто назначаются. Менеджер - может создавать задачи, устанавливать сроки, смотреть прогресс.
Собственно - вот ты и сделал простенькую систему управления проектами и можешь гордо ее показывать на собесах.
Вкатунский тудулист медленно, но верно превращается в написание клона джиры. Осталось только ролевую модель доступа прикрутить и всякие дашборды.
Нахуя вы воздух сотрясаете? Один хрен в реальности все ваши аргументы будут упираться в "у нас вот так принято" и никто не даст вам хоть что-то менять. Поэтому будете делать так как кабан скажет, засунув свое очень важное мнение в жопу.
>Это rpc-like
в каком месте? только потому форма ответа похожа? и на этом сходство заканчивается. Если ты в свой рест добавишь обертку где будешь передавать метаданные какие то - он не станет json-rpc
>голый UDP - оно посыпится нафиг без кадрирования.
а схера ты http приравниваешь к tcp. Проблема доставки пакетов находится уровнем ниже и не твоя проблема. так что взять я могу вебсокеты, пайпы и любое другое - и это будет его проблемы доставки, а не мое.
Лучше уж эти, чем замлдебилы со своими брашами и листбоксами...
> а схера ты http приравниваешь к tcp.
Потому что ты по какой-то причине - HTTP приравнял к транспорту. Потому и говорим в контексте транспортного уровня модели OSI. Ну так вот. Если твой протокол - агностичен к транспорту - он должен реализовывать проверку целостности пакета, кадрирование и прочие вещи. Либо сообщение должно умещаться в 256 байт. Твой ЖСОН - в общес случае - не уместится.
> json-rpc
Я про json-rpc и не говорил, няш. Я говорил об общем rpc-подходе. И почти любой rpc - не агностичен к транспорту. Он изначально должен выбрать стул, на котором будет сидеть.
>HTTP приравнял к транспорту
потому что http и есть транспорт. он и возит твои данные. с чего вдруг ты ниже полез...ты админ что ли? Это админ будет грузить херню про уровни OSI. Но тут тред про программирование.
>он должен реализовывать проверку целостности пакета, кадрирование и прочие вещи...Либо сообщение должно умещаться в 256 байт
нет не должен. это ты снова глубоко копаешь. этим пусть занимается протокол передачи данных. как тот же хттп протокол, вебсокеты, пайпы или даже самопал поверх tcp. С какого перепугу я должен писать все сам, а не взять готовое - ума не приложу.
>И почти любой rpc - не агностичен к транспорту
как раз rpc более агностичен, чем твой подход (или мой). посмотри тот же JSON-RPC - он изначально заточен чтобы слать сообщения один за другим и асихронно получать ответы с другой стороны.
Ты можешь разместить его поверх хттп, вебсокетов, просто взять любую реализацию транспорта и оно будет работать одинаково.
но повторюсь - rpc подход тут вообще не причем. аж нигде и никак. тут 200 против "придумываем коды для логики" и rpc там и рядом не лежало.
> с чего вдруг ты ниже полез
Потому что я проработал в телекоме и на заводе кодером, который реализовывал протоколы на всех уровнях вплоть до физического и потому - я немного представляю, сколько работы предстоит, если реально делать агностичный к транспорту протокол прикладного уровня, по типу всяких DLMS'ов, IEC'овских всяких и прочего добра.
> С какого перепугу я должен писать все сам, а не взять готовое - ума не приложу
Потому что если твой протокол предполагает, что транспорт может смениться - он должен это делать, иначе - какая еще независимость от протокола?
UDP - такой же транспорт. Твой прикладной протокол - уже не сможет по UDP гоняться. А у нас не только TCP-UDP есть, там целый зоопарк сбоку стоит, и ты так же не можешь гарантировать что завтра тебе не придется их поддержать в своем приложении.
> Ты можешь разместить его поверх хттп, вебсокетов, просто взять любую реализацию транспорта и оно будет работать одинаково.
Он все еще завязывается на некоторые гарантии доставки, которые не каждый транспорт может предоставить. Так что если реально в противовес ресту ставить что завтра транспорт поменяется - надо идти до конца и делать протокол таким, чтобы независимо от транспорта. Иначе аргумент - просто невалиден.
> независимость от протокола
Независимость от транспорта
Уже спать пора. Не могу нормально мысли формулировать.
возьмем допустим json-rpc
>он должен реализовывать проверку целостности пакета
и проверит. на своем уровне проверит что это валидный жсон валидного формата
>кадрирование
а это уже не его дело (ну разве что ты про батчи)
>должно умещаться в 256 байт
а нет, не про батчи.
его дело извлечь и распарсить json сообщение(я) и сформировать ответ. Проблемами доставки занимается нижележащий протокол.
json-rpc не обязан уметь работать с железками до канального уровня. Но есть сама возможность заменить транспорт и ничего не сломается. У нас UDP? пишем или берем что-то что будет решать проблему гарантий доставки, сверху все это накрываем Stream, делаем MyRpcServer.Attach(Stream ...). На клиенте делаем то же самое. Мы просто заменили способ доставки и ничего не сломалось. json-rpc готов к этому - поскольку он не завязан на транспорт, то не знает ни про какие хттп статусы, урлы и прочее.
Конечно ты можешь сказать "ну и что. мы так и завязанный на хттп апи можем - просто сделаем прослойку конвертор сообщений где будем сами сериализовывать в транспортный формат и обратно и вышележащий слой не заметит разницы"....ну тогда все в мире есть агностик гы гы и где теперь твой бог (с)
НО...
мы вообще о чем говорим? Я уже потерял нить разговора. Проблема "200 или не 200" это не только проблема "щас было хттп, будет вебсокеты"(мой косяк что об этом упомянул, а тебя как понесло)
Тут проблемы "проблема 404" (хотя тут можно сказать "у норм админа все норм"), "проблемы с батч операциями", ну и конечно главное - "коды хттп хорошо натягиваются на проблемы транспорта, валидации, и другого общего, но решили коды слать в хидере и теперь вынуждены все туда пихать, а как то не очень коды хттп мапятся. да и у каждого свое мнение на какой код мапить" - да и тело ответа нужно бы послать в случае той или иной ошибки на радость клиенту, который пишет на языке со стат типизацией (и тут голову ломаешь "как это парсить без JObject.Parse то" )
В проекте WPFApp есть ошибки, но он не используется (подглядываю туда, пока переписываю), основной - WPFApp4.
Можно как-то заигнорить WPFApp? Сейчас приходится выгружать для дебага, а потом перезагружать проект.
> и проверит. на своем уровне проверит что это валидный жсон валидного формата
Так. А какой это уровень-то? Это уровень приложения разви, проверять, что это валидный жисон валидного формата? До приложения, так-то должны только валидные запросы доходить, а все остальное - еще на промежуточном слое - отфильтроваться.
Ну и да. Тебе вот прям кто-то мешает вернуть в ресте 404, а в теле: {"error":"not found", "errorCode":228} ? Это как-то прям противоречит ресту? Да нет, у реста никаких таких ограничений.
Еще раз - это удобно. Это просто настраивается и поддерживается. На клиенте - тебе не нужно думать, а через прокси я там общаюсь, чи напрямую с сервером, а какой сервер это мне отдал и прочее. И поддержка всего этого дела - проще, если вы не сами себе архитекторы, а заранее садитесь и декларируете - какие коды что значат.
Ладно. Мне не хочется дальше рестосрач развивать. Решение про всегда 200 - не лучшее. Всегда посты - тоже не лучшее. Поддерживать это сложнее, а со временем - апи превращается в кашу, потому что каждый себе придумает кодов, придумает как ему что отдавать, а потом - надо это становится стандартизовать, чтобы на сторону передать. И вы страдаете какой-то херней, вместо работы.
>Так. А какой это уровень-то?
прикладной конечно
>Это уровень приложения разви, проверять, что это валидный жисон валидного формата?
ох ты достал с уровнями. Есть SRP и каждый делает свое дело. тот же кестрел проверяет что к нему пришел валидный хттп (ну парсит тупо), а json-rpc сервер (что аналог того же кестрел) почему то должна заниматься чем то другим? да она парсит жсон сообщение и тем самым валидирует.
>то-то мешает вернуть в ресте 404, а в теле: {"error":"not found", "errorCode":228} ?
вот тут то собака и порылась. МНЕ, МНЕ!!! не мешает. А вот другим почему то мешают. И они так не делают - они используют статус хттп. ДЛЯ ВСЕГО. И в ответ идет голое тело без этой стандартизированной оболочки. И приходится разбираться "ааа у нас такой код значит парсим мы жсон так, а если так то вот этак". Вместо единого и простого парсера ветки error целая пляска с бубном. Потому что "каждый видит по своему", да и вообще думает что на клиенте питоны или что то такое где тупо можно сделать json.loads
и я, как клиентописатель, матерюсь на это трехэтажным матом. потому что читаешь доку, а там описано что оно отдает (что понятно), а вот что вернется в случае ошибки, обычно забывают описать и потом уже в рантайме через время узнаешь что "а вот может быть такая ошибка и там будет совсем другой жсон".
да я понимаю что это не рест виноват. а хотя и рест - как набор рекомендаций он не освещает все и далее "каждый художник". тот же json-rpc строго описывает че как чтобы клиент на своей стороне не строил монструозные switch
>потому что каждый себе придумает кодо
а типа хттп коды не коды ) такие же коды. просто эти коды пытаюстя класть в хттп, а значит вынуждены мапить на хттп. когда ты кладешь код в тело - у тебя проблемы нет. А количество кодов как бы без разницы
>И вы страдаете какой-то херней, вместо работы.
я еще раз повторюсь - пытаться мапить на хттп коды = дополнительная работа. оно никак не влияет на продуманность апи. вон у клауды замечательная апи и без всяких кодов. просто продумана потому что.
>Так. А какой это уровень-то?
прикладной конечно
>Это уровень приложения разви, проверять, что это валидный жисон валидного формата?
ох ты достал с уровнями. Есть SRP и каждый делает свое дело. тот же кестрел проверяет что к нему пришел валидный хттп (ну парсит тупо), а json-rpc сервер (что аналог того же кестрел) почему то должна заниматься чем то другим? да она парсит жсон сообщение и тем самым валидирует.
>то-то мешает вернуть в ресте 404, а в теле: {"error":"not found", "errorCode":228} ?
вот тут то собака и порылась. МНЕ, МНЕ!!! не мешает. А вот другим почему то мешают. И они так не делают - они используют статус хттп. ДЛЯ ВСЕГО. И в ответ идет голое тело без этой стандартизированной оболочки. И приходится разбираться "ааа у нас такой код значит парсим мы жсон так, а если так то вот этак". Вместо единого и простого парсера ветки error целая пляска с бубном. Потому что "каждый видит по своему", да и вообще думает что на клиенте питоны или что то такое где тупо можно сделать json.loads
и я, как клиентописатель, матерюсь на это трехэтажным матом. потому что читаешь доку, а там описано что оно отдает (что понятно), а вот что вернется в случае ошибки, обычно забывают описать и потом уже в рантайме через время узнаешь что "а вот может быть такая ошибка и там будет совсем другой жсон".
да я понимаю что это не рест виноват. а хотя и рест - как набор рекомендаций он не освещает все и далее "каждый художник". тот же json-rpc строго описывает че как чтобы клиент на своей стороне не строил монструозные switch
>потому что каждый себе придумает кодо
а типа хттп коды не коды ) такие же коды. просто эти коды пытаюстя класть в хттп, а значит вынуждены мапить на хттп. когда ты кладешь код в тело - у тебя проблемы нет. А количество кодов как бы без разницы
>И вы страдаете какой-то херней, вместо работы.
я еще раз повторюсь - пытаться мапить на хттп коды = дополнительная работа. оно никак не влияет на продуманность апи. вон у клауды замечательная апи и без всяких кодов. просто продумана потому что.
>Тред лучшего языка на планете Ждем лета...
Скажите, зачем этот аниме-чудо ждет лета? Будет какое-то событие или додо просто лета ждет?
Ты эти роадмапы с настороженностью смотри. Какой только хуйни туда не пихают. Для начала синтаксис подучи а то там много чего незнакомого после жс и тс
Так роадмап я и не знаю никаких...
Даже во фронте их не было толком, грили ну учи вот это это и все.
0 имплемента в реал ворлд, 0 кодинга чего-то осязаемого. Я просто выучил милиард концепций и все. Пришлось смотреть курс на ютубе где чел пишет магазин пиццы, там хоть можн обыло посмотреть финальный резалт того, что учу. Вот я не хочу чтобы и с сишарпом была такая же хуйня - я учил прсото ради учебы.
Честно скажу - с роудмапами не знаком, учился в ентих ваших политехах 6.5 годиков, из которых 4 годика ОЧно.
Заряжал курсачи, бывало, помогало в дальнейшем понять некоторые особенности структур типа DateTime.
Многое чего познается непосредственно в работе.
Не-мимо работяга с тремя годами стажа
Часто заглядываю в доку МС, чуть реже в метанит.
Что-то пытался черпать из Шилдта (но 4 версия СиСярпа уже дохуя устаревшая)
если ты про каст, то это не обычный метод
на их основе генерится метод с именем op_Implicit и каст знает про этот метод и ожидает его правильным без всяких лишних параметров
а вот Convert.ChangeType не знает, он тупенький.
Так я в курсе, что генерится. Я потому и спрашиваю, чому нельзя бахнуть ref, чтобы кастить к ref переменным.
Представь что у меня есть много class Biba, которые холдят struct Boba, которая репрезентирует Bib'у где-то на стороне (вызовы GAPI например). И есть куча методов которые принимают struct Boba по ссылке. При вызове этих методов происходит каст от Biba к Boba. И на этом этапе структура копируется. Можно было бы этого избежать, если была бы возможность написать каст ref возвратом. Компилятор же потом может понять какой метод вызвать в месте каста.
ну вообще майки больше думали про доп вариант такого типа MemoryMarshal а не вот так как ты
Да они много где не подумали.
.NET Framework 4.8
>я уже ослеп походу
Неудивительно с такой кашей. Ты бы инлайны поотключал и учился читать чистые выражения.
Для справки. Alt+F1 покажет тебе то же самое, пока ты держишь их нажатыми, намного удобнее чем постоянно такую парашу на экране наблюдать.
Что если я посреди этого блока вставлю Return?
Если эксепшена нет, остальное похуй, хоть goto делай.
И вообще приму советы по изучению asp.net.
Так бэк везде примерно одинаковый, тебе просто надо понять что на нем делают: поиграйся с rest, soap, попробуй что такое grpc, попробуй чего такое крон джобы, что такое очереди и консьюмеры. Ну вот и поймешь что язык твой дело десятое, да и к тому же может вообще не на своем дотнете писать будешь, не то что он плохой, но на рынке труда щас чет хз, специфичный
Но новые версии перекатываться изи, но можно охуеть от количества сахара при чтении чужого кода. Уже даже стрелочные функции добавили ради экономии двух переносов строк. В целом, мне не очень нравится куда движется развитие C#. Залупа в том, что менять особо не на что.
Собственно. Прикрутил аутентификацию по JWT. Решил использовать шифрованные, типа а почему нет.
И вот тута вопрос. Я хочу чтобы сервис FileStorage - тоже мог из токена получить ин-ю о пользователе(id, пермишины)
Одно решение что я могу придумать - выставить перед ним сервис типа Gateway, который расшифрует токен и положит в заголовки нужную ин-ю.
И мне это кажется какой-то парашей а не решением.
Второе - пихать токен в какое-то общее хранилище вида токен-расшифровка разрешений и инф-ии о пользователи, и при запросе к сервису - FileStorage достанет из этого хранилища инф-ю
Это решение тоже кажется говном.
Кто шарит. Поясните. Как правильно делать это вот?
Не думаю просто что какая-то специфичная хуйня.
>экономии двух переносов строк
коих в рамках класса набирается сотня. А зачем? а прост.
туда же и дебильные
if()
{
a=1
}
else
{
b=1
}
Нужна конкретно она, но как же она убого выглядит.
К 8 дотнету. Ставлю анус...
Обратись к окулисту.
И это здорово
И грядущие херовые изменения гуи заставят перейти на райдер если нельзя будет выбрать текущий вид
>студио заставить выглядить ни как выкидыш нулевых?
Шарп - для зрелых людей.
Здесь как в онлайн-играх, один кусок школоты с писклявым голоском может засрать нормальным людям весь рейд.
Поэтому коммьюнити решило пойти на такой шаг, чтобы всячески не допускать в язык порриджей, зумерьё и прочих любителей фортнайта и тиктока.
Считаю получилось очень эффективно, мы очень рады, что вы не сможете пройти в шарпы в ближайшие 5-7 лет.
Код можно было всегда красить как угодно , рисовать что угодно и форматировать как хочешь
Я же говорю про сам гуи
Мне хватило маркетолухов похеривших гуи винды
Хватило похеривших гуи фф
И тут та же херня
Я как раз с Java на C# перекатываюсь из-за того, что ваш язык активно развивается. Надоело чувствовать себя некрофилом, когда пробую инфраструктуру вокруг джавы. И разрабы максимально стараются не внедрять новых фич в синтаксис
Обертка чтобы дедам жизнь облегчить. Все приводилось к обжектам. Вэлью боксилось. Было актуально до изобретения женериков.
У тебя экспепшон в ебало на 5 строчке, анончик. Я потому и спросил, может я что-то не понимаю.
Но быстрый гуглеж дал понять что деды густо насрали в штаны и нарушили LSP. Никто ведь не чекает IsFixedSize у IList. Не пизди что чекаешь в рабочем коде.
Массив должен IReadOnlyList реализовывать, почему они в Core это не сделали? Пиздец, индусы с этой обратной зависимостью погубят мой любимый шарпик как плюсы
Получается можно делать вот так:
var m = new string[] { "2", "3", "4" };
((IList)m).Add(1);
И ловить эксепшен.
Так нетрудно забыть что к тебе в IЛисте может прийти массив, а ты на нем Add вызовешь без задней мысли.
Вот это место. Охуенная имплементация, что тут сказать.
Скорее легче следить за тем чтобы никто не пихал массивы туда где не массивы чем шизить и чекать.
В репе corefx даже не смог найти обсуждения, что этот проеб рано или поздно нужно фиксить.
Отдельный сервис авторизации, в который могут стучаться только твои микросервисы в пределах твоей vpn.
В самом микросервисе где нужно прокидываешь контекст авторизации который по необходимости стучится в сервис авторизации (например по grpc) и извлекает нужные данные.
Можешь это либо на уровне мидлвари прокинуть, либо через DI.
Без негатива - картинка не наезд, просто капча показалась забавной.
Нехуй сидеть на ноутбуках с микроэкраном. Купи себе нормальный большой монитор и выставь нормальный scale.
Увеличим расстояние между кнопками. Увеличим шрифты надписей.
Как итог - становится проще, остаются только действительно нужные функции.
Всякие настройки тоже отключим. Вот у вас же есть телефон, на нём есть ватсап, вам же не приходит в голову менять там шрифты или цвета.
Так и в студии, всё будет по современному стандарту. Функционал будет доступен для людей с ограниченными возможностями, а не только для отдельных задротов. Всё будет настроено из коробки на нужды среднего человека.
Таков рыночек.
Завидую людям с прекрасным зрением. У меня вот 27 дюймов моник. Но размер шрифтов за счёт масштабирования такой, что это эквивалентно разрешению 1024х600.
Какое же говно. Пиздец. Там в щели между блоками мой хуй пролезет
Почему блядь не сделать нормально. Т.е. чтобы как на прикриплейде можно было делать ПО УМОЛЧАНИЮ. А не каждый раз приходилось окошки рассвывать. Вот это - было бы пиздец как охуенно. И чтобы при этом переключаться между этими окошками можно было быстро каким-нибудь shit+tab
Не. Блядь. Сделаем какое-то говно, влепив какие-то скругления и дырки между блоками.
Пиздец. Вебобляди заебали. Этот дизайн под веб - бесит что пиздец.
И да. Я знаю, что я могу PowerToys сделать вот такой присет, но это немного не то. Все равно приходится каждый раз распихивать окошки по блокам. А я хочу чтобы сохранил и потом оно постоянно так было.
Пусть это хотя бы в превьюхе появится. А то ваши жопы порвались с парочки скринов, а на деле это все будет не так плохо.
Ну. У меня жопа подорвалась с того, что лично мне - нужно чтобы для кода было больше места и можно было бы поставить экран с кодом - по центру.
Почти идеально, это сорт оф прикриплейд, но с IntelliSense, дебагом, рефакторингами, темной темой и для тестов чего-нибудь.
Ну и еще она рвется, потому что у меня на работе монитор 24 дюйма, и я борюсь за каждый миллиметр полезного пространства, а тута - просто взяли и хуйнули на изичах ненужные пустоты.
Ты какой-то шиз. Просто поставь монитор вертикально и режим для доп окошек который скрывает обозреватель солюшенов, ошибки и свойства. Нахуя смотреть на них постоянно при написании кода?
Именно из-за таких поехавший дедов, мы все еще сидим и вилкой говно захошее колупаем вместо ГУИ.
Это ты какой то шиз. Делать по 100000 лишних кликов (и возможно скроллов) для переходов просто ради "зато модняво, все скрыто и огромное"
не разработчики, а смузихлебы.
капча намекает
Поддерживаю.
>без решарпера
>без горячих клавиш
>водит мышкой
>не смузихлёб
Держи в курсе, дед. Весь мой проект у меня на кончиках пальцах, зона досягаемости до любого элемента три клавиши которые нажимаются в десять раз быстрее колупания в окошечках.
смузихлебыч, поясни мне как тебе вдруг станет лучше жить от увеличенных отступов?
Как хуже станет тем, кто любит что на экране больше информации - сразу видно контекст и НЕ НУЖНО дыркаться чтобы открывать то и это как дебил....это сразу видно
как лучше станет тебе поясни.
солюшен эксплорер для быстрой навигации и такое же для кода - ты просто их убираешь с экрана чтобы вместить бесполезное пустое пространство и рад этому. Ты больной что ли? Тебе и без этого было достаточно места чтобы писать код, но у тебя "хочу пустые пространства потому что гладиолус".
С пустыми пространствами мы уже проходили, когда выкатили на десктопы метрошные говноприложения что охеренно ТУПО смотрится на мониторе, который как бы сильно больше чем планшет.
Не бросайся в крайности. Это контрпродуктивно, еще даже обнову не выкатили а у тебя уже жопа сгорела. К тому же мелкомягкие скорее всего они оставят возможность вернуться на старый вариант.
По поводу же солюшена, мне неудобно и отвлекает. Я хочу видеть код когда что-то делаю и только, прыгать по файликам мне помогает решарпер как и выносить в отдельные файлы нужные части кода. Просто нет смысла смотреть на него.
потому что я это проходил уже с фф. И резко появилась необходимость скролить и вообще стало выглядеть по пидорски.
И нет - НЕ ОСТАВИЛИ в фф метода вернуть как было. Просто выпилили флаг compact mode. Но это фф и на 90% все решилось через стили
ОЧЕВИДНО уже сейчас что это будет говно ибо и так понятно что оно будет из себя. А вот оставят ли возможность "вернуть взад" - еще не факт.
>По поводу же солюшена, мне неудобно и отвлекает
ключевое слово МНЕ. не все такие как ты. Некоторые любители и в гит консоль попердолится.
Я вот любитель видеть весь контекст - и поэтому у меня и эксплорер по которому видно где чего и я прыгаю по нему. И "карта кода" чтобы быстро прыгать по методам (та родная что в студии это для мозахистов). И не та что от решарера, а supercharger
Держать в голове виртуальную картину "что где как связано с текущим моментом" - моя голова занята кодом и мне лишняя нагрузка ни к чему - весь контекст тупо перед глазами.
И я такой не один, а таких очень много.
Ну что сказать, хуёво быть тобой. Можешь попробовать по ссылке выше где фидбек собирают, действительно его дать аргументированно со скринами. Может учтут, а может нет.
там и без меня хватает. посмотри сколько лайков под коментами вида "оставьте возможность выключить эту хрень"
>Может учтут, а может нет.
история с кнопкой пуск показательна - никого не слушали, ведь есть "улучшатели", хотя вроде бы очевидна нереальная тупость происходящего.
Ну на винде то можно переназначить все что угодно в оформлении.
Было бы круто на самом деле, если бы они сделали нормальный апи для изменение гуи. Каждый бы поставил то что хотел и норм.
>Ну на винде то можно переназначить все что угодно в оформлении.
ой шутник ой шутник, спасибо посмеялся
было бы круто если бы они работали в сторону юзабилити, но они не могут.
канвас дебаггер мертв
бряки не сохранить и не восстановить - а помню в далекие времена еще на эклипсе можно было сохранить открытые вкладки, закладки, бряки и потом восстановить весь контекст. И все это связано с issue tracker. Годнота в общем.
в студии же - ну полумертвое расширение которое даже рядом не лежало и даже не может сохранить бряки ибо апи студии не позволяет. Тупо сохранить загрузить открытые вкладки. Ни о чем.
>а supercharger
Глянул ради интереса. Выглядит вроде ничего так.
Вопрос - оно сильно тормозное?
Не знаю. Я юзаю только карту кода и вертикальные линии отступов
А если в будущем может стать больше вариантов использования?
Или лучше не совать каждый чих во вью модель, а по возможности выносить, например, выведение значения для сортировки во вью, используя конвертер?
Я дико извиняюсь, никто не подскажет где можно купить на торрентах вот это https://code-maze.com/blazor-webassembly-course/?source=nav ?
выбирай любой вариант. тут нет правильно или нет. есть "в этом случае так наверное более удобнее чем этак"
просто не забывай что вьюмодели и так страдают жирностью по своей природе. Например те же контроллеры - попытки посадить вьюмодели на диету.
Мне сейчас кажется более предпочтительным вариант с кучей классов по простой причине - чтобы случайно не нахуевертить с ёба моделью. Даже если будет интерфейс на каждое применение, я, допустим, спустя какое-то время, забыв что и как, сяду что-то добавить/исправить, ебанусь, кастану в класс и сделаю хуйню.
С другой стороны это наверно уже паранойя, но из-за этого я сижу и охуеваю сам с себя.
Ну и опять же жирная вью модель... Хотя если пилить класс на каждый случай, то будет куча повторяющегося кода.
ты прав - тебе кажется.
на деле тут все фломастеры. ты можешь плодить много классов и сделать себе неудобно. Можешь сделать 1 класс и в итоге он станет делать много разного и тебе станет неудобно. Можешь потом этот жирный разбить на несколько вложенных вьюмоделей (явных или нет) и это тоже может быть неудобно
все оно на самом деле неудобно - всегда или не хватает или слишком жирно, поэтому и фломастеры.
>то будет куча повторяющегося кода.
наследование никто не отменял
>наследование никто не отменял
Модель
Базовая ВМ
ВМ для листбокса с чекбоксом как сабкласс базовой (добавляем свойство bool State)
ВМ для дерева без чекбокса как сабкласс базовой (добавляем свойство bool IsSelected)
ВМ для дерева с чекбоксом как сабкласс предыдущей, но с добавлением свойства bool State - и получается повторяющийся код.
Очень грубо и тупо, конечно, но как-то так. ВМ можно объединить так или иначе, но это уже шаг в сторону ёба ВМ.
хочешь еще неудобств? щас отсыплю.
вот представь у тебя рутовая вьюмодель имеет команду.и в этой команде она что то делает и у нее есть же конечно вложенные вьюмодели
Должна ли эта рутовая вьюмодель распихать данные по вьюмоделям сама?
А если да, то что будет если нужно запихать во вьюмодель которая недостижима?
мессенджер? ну допустим. но это уже косвенность и "это прямо, это через мессенджер, бардак". событийная модель неудобна "где вы все?" и с транзакциями морока (смотри domain event и их проблемы)
медиатор и все через медиатор? а какой? а как шарить? а он же в итоге сам жирным станет, дробить что ли?
или вот
нам нужно уведомить родительскую вьюмодель о чем то
как?
события? - привет проблемы с отпиской
мессенджер? - вообще потом в голове не свяжешь где кто с кем и в какой позе
напрямую получить родительскую вьюмодель в конструктор? - а если потом куда то нужно передать эту вьюмодель, то она захватит и эту рутовую (в общем то как и с подпиской)
слабые события? - нуу это же гемор
или вот.
у нас есть команда. и допустим она на кнопке , на меню и еще где то далеко друг от друга. Что делать? на местечковую вюмодель биндить команду - ой нехорошо ей самой работу делать, в базу лазить.
Конечно же биндим на рутовую через дикий FindAncestor - неудобно и в итоге эта рутовая станет жирной как мамонт.
что делать что делать...а что если раздробить логику работы с моделью и вьюмоделями. вон есть же всякие mvvmC. но что это? у каждого свое видение что есть контроллер. но в инете много тумана и каждый понимает его как хочет. Находим такой пик и радуемся..вернее не радуемся, потому что непонятно как что с чем должно работать.
А в инете если погуглить, то разные реализации.
И вообще, мы же просто хотели убрать команды с вьюмоделей. А что если не рутовую модель искать, а сделать шаред вьюмодель как раз с командами и ее можно забиндить где угодно. но епт - это ж тот же самый медиатор только теперь держащий команды в себе. И раз шаред, то значит у вьюмоделей появляется контекст, где они могут добраться до этого шаред. А это зависимости.
Лучше идти на завод. Капча намекает
хочешь еще неудобств? щас отсыплю.
вот представь у тебя рутовая вьюмодель имеет команду.и в этой команде она что то делает и у нее есть же конечно вложенные вьюмодели
Должна ли эта рутовая вьюмодель распихать данные по вьюмоделям сама?
А если да, то что будет если нужно запихать во вьюмодель которая недостижима?
мессенджер? ну допустим. но это уже косвенность и "это прямо, это через мессенджер, бардак". событийная модель неудобна "где вы все?" и с транзакциями морока (смотри domain event и их проблемы)
медиатор и все через медиатор? а какой? а как шарить? а он же в итоге сам жирным станет, дробить что ли?
или вот
нам нужно уведомить родительскую вьюмодель о чем то
как?
события? - привет проблемы с отпиской
мессенджер? - вообще потом в голове не свяжешь где кто с кем и в какой позе
напрямую получить родительскую вьюмодель в конструктор? - а если потом куда то нужно передать эту вьюмодель, то она захватит и эту рутовую (в общем то как и с подпиской)
слабые события? - нуу это же гемор
или вот.
у нас есть команда. и допустим она на кнопке , на меню и еще где то далеко друг от друга. Что делать? на местечковую вюмодель биндить команду - ой нехорошо ей самой работу делать, в базу лазить.
Конечно же биндим на рутовую через дикий FindAncestor - неудобно и в итоге эта рутовая станет жирной как мамонт.
что делать что делать...а что если раздробить логику работы с моделью и вьюмоделями. вон есть же всякие mvvmC. но что это? у каждого свое видение что есть контроллер. но в инете много тумана и каждый понимает его как хочет. Находим такой пик и радуемся..вернее не радуемся, потому что непонятно как что с чем должно работать.
А в инете если погуглить, то разные реализации.
И вообще, мы же просто хотели убрать команды с вьюмоделей. А что если не рутовую модель искать, а сделать шаред вьюмодель как раз с командами и ее можно забиндить где угодно. но епт - это ж тот же самый медиатор только теперь держащий команды в себе. И раз шаред, то значит у вьюмоделей появляется контекст, где они могут добраться до этого шаред. А это зависимости.
Лучше идти на завод. Капча намекает
и этот последний шаред медиатор он ведь как контроллер же - ведь принимает команды и уведомляет вид (который VM). чем не контроллер?.
Как медиатор он зло, но контроллер это ж добро )
А нормальная ли эта реализация? почему в инетах делают что то другое? нипанятна, памагите))
не вижу в твоей схеме ничего особенного. можно и наследованием и супер моделью порешать.
Подскажите пожалуйста, как сравнивать обобщённые типы данных между собой. Скажем, есть класс в котором я сортировку делаю, так вот, при попытке работы с дженериком, жепа получается.
Находил одно из таких предложений в инете:
Class Myclass<T> : MyBaseClass<T> : where T : IComparable<T>
поле: IComparer<T> myComparer;
Затем в самом условии: myComparer.Compare(data1, data2) > 0
Но проблема в том, что валится всё на том, что myComparer NULL'овый. Как его правильно инициализировать? Или быть может надо реализацию интерфейса IComparable переопределять? Подскажите пожалуйста!
непонятно зачем ты делегировал сравнение и у тебя вдруг стало необходимом дополнительное поле в классе, но если уж то лези инициализация
LazyInitializer.EnsureInitialized(...)
хотя зачем тебе поле вообще....
Допустим есть долгоиграющий async:
asynd Task DoWork()
и он вызывается в обработчике клика мыши, как правильно гасить первый вызов если он еще не закончен? Короче какой тут паттерн?
Это была контекстная шутка на пять сек, ты уже развёл КРИНГЕ, а обьяснять это вообще пиздец.
Смотрите. Допустим, у меня монолит по причинам - проще деплоить, маленькая команда.
Дальше. Мое приложение - это система мониторинга и управления арендованными роботами.
Что оно делает.
1. Робот - подключается к моему серверу по своему робото-протоколу. Раз в минуту отправляет мне по роботопротоколу данные о своем текущем состоянии.
2. Есть веб-морда, с помощью которой пользователь(человек) - может следить за состоянием роботов, а так же отправлять им команды, в духе - начни готовить, начни уборку, постриги кусты.
3. Приложение - используют и люди из сервиса поддержки, потому - оно предоставляет сквозной интерфейс с высоким приоритетом, для отправки комнад по секретному протоколу от сервиса поддержки роботам.
4. У самого приложения - есть акции, и периодически уже сверху менеджер может сделать акцию - приведи друга, получи скидку на месяц аренды робота.
Важное условие, роботов - очень много, а потому - нужно стараться экономить на ресурсах, т.к. заказчик уточнил, что у них свое железо, и спецификация железа: Pentium4, 2 гига оперативы и 100ГБ ХДД в рейде.
Ну так вот. Как должна быть построена-то архитектура, чтобы это было чисто и этим было удобно управлять и развивать?
Я просто не понимаю. Все примеры чистой архитектуры в интернете - это какая-то унылая фигня с крудами, в которых лезем в базу, достаем из базы. А вот как в таком случае-то предполагается делать чисто. Ведь нужно и какие-то очереди задач прикрутить, и выделить высокоприоритетный интерфейс для поддержи, и рассылать уведомления об акциях.
В общем. Кто шарит дальше чем взять медиатор и круд намутить - поясните, если не сложно.
Так как правильно оформить, вручную что ли самому менеджментом заниматься? Там же всякую херь нужно отслеживать типа если отмена не закончена, то дожидаться завершения предыдущего вызова.
Хуйню какую-то напесал. В твоём случае надо было не оборудование закупать, а использовать облачные сервисы. Yandex IoT Core https://cloud.yandex.ru/docs/iot-core/ стоит 115 рублей за миллион сообщений. Считаем:
Допустим, у тебя 100 роботов, каждый отправляет 1 сообщение в минуту, получается:
(43800 x 100) / 1,000,000 x 115 = 503 рубля в месяц.
Далее, всё это дело пишется в какую-нибудь условную YDB. А дальше по API можно раздавать сайту, приложению и другим потребителям данные. По сути, это обычные временные ряды. Надо будет этот временной ряд как-то агреггировать и прочие операции делать. В идеале конечно лучше брать специализированные базы, а-ля https://iotdb.apache.org/, InfluxDB, CrateDB, Riak TS, они лучше аггрегируют данные. Если ты всё в SQL-базу будешь писать, у тебя будет пиздец какая проблема с масштабированием, и с запросами типа "покажи мне усредненные данные с 3-го робота за последний месяц, с шагом усреднения 2 часа". В обычной базе данных а-ля PostgreSQL вряд ли получится так сделать, не запрашивая 40 тысяч записей за раз.
Всё остальное в принципе хуйня. Под веб-морду есть готовые компоненты а-ля https://awslabs.github.io/iot-app-kit/ Акции-хуякции это всё делается через событийно ориентированную архитектуру по триггеру.
Смотри картинку, плюс-минус как это должно выглядеть.
ну если не используешь разные Observable реактивные, то конечно вручную - просто новый CancellationTokenSource (а старый cancel),получить токен, запустить с ним активность. и проверять его постоянно + 1 раз после получения результата активности в основном потоке - может результат уже не нужен и там не будет гонки "отменили, новый запустили, используем невалидный результат".
капча вообще невменяемая.
> Yandex IoT Core
> MQTT-сервер
Я вроде не говорил, что роботы по MQTT общаются.
В тексте: Раз в минуту отправляет мне по роботопротоколу
Ну и вопрос таки не про яндексы и прочее. А про то, как соблюсти чистоту, когда у меня приложение не просто - достать из базы, положить в базу.
И монолит взят специально, чтобы нельзя было сказать: Ай, сделай сервис управления роботами, сервис хранения данных, идентити хуйни кафку-ребит и погнали.
Я про случай:
Я начинаю писать
Console.WriteLine("Hero name is : {hero.Name}");
Вижу, что ебучий $ забыл и перемещаю курсор, добавляю.
Вот было бы удобно чтобы я просто чет нажал и этот $ появился.
Допустим, для случая вида Console.WriteLine("Hero name is : " + hero.Name); такое есть в качестве рефакторинга.
Просто пальчики коротенькие, до $ тянуться тяжело...
Ctrl+. -> make interpolate string
Использовать AABB и определять килинкли или нет?
про каналы и пайплайны может?
Стрим про стримы.
Лол, вообще нет упоминания про SQL
Или это относится к "то что обычно на уроках инфоматики было"? Ну охуеть.
>че в шарпе делает volatile
А что делает? Этот вопрос сложен даже для тех кто книги про шарп пишет.
Не загоняйся. Просто пиши await везде где вызываешь async метод и все. Я уже 2 года так делаю, меня никто еще не раскусил. В душе не ебу ни про какие паттерны.
ну ТЕПЕРЬ в ней написано про то, что на деле нет никаких гарантий того, что будет прочитано именно последнее значение.
А до этого этого маленького аспекта нихера не было, что привело к рождению многих статей где интерпретируется по разному. Сейчас не хочу искать, но в свое время я прочитав липерта с его "думаете гарантирует? а вот нихрена" перечитал много чего чтобы понять "как это не гарантирует, с чего он это взял это, этот неизвестный никому человек".
капча ну просто звиздец
Так сделай асинхронкой или через Task.Factory.StartNew
работает. с 7 шарпа можно async Task Main и даже Tas<T>
Благодарю. Его как-то отдельно учить надо или пару приложений по туториалам посмотреть как делается и по ходу разберусь?
Основы учить отдельно. Вряд ли ты просто посмотрев код разберёшься, как работает DI. Ну а дальше ковырять примеры.
Я пишу на пятом шарпе и .NET Framework 4.0. Как мне сделать асинхронный Main???
>Я пишу на пятом шарпе
а зачем ты это делаешь? проспорил что ли?
Делается то элементарно, но...зачем
Еба сколько там всего. Ладно попробую. Хотя чет в конфе сишарпа в телеге хаят этот метанит
> в конфе сишарпа в телеге хаят этот метанит
Правильно, надо же убедить себя, что покупка курсов за 100к не была пустой тратой деняк.
ну так бы и сказал что тебя прокляли. Тебе в церковь нужно. А про шарп забудь. И вообще про программирование забудь. А не то карма тебя настигнет.
ну там профи сидят а не курсовкатывальщики
Конфы в телеге притягивают сплошных долбоёбов
Чего заново учить дебич? Я все концепции наизусть помню, просто свежие нужно дркинуть сверху
>джавадебил
Не проецируй. Никогда не писал на этом говне и не собираюсь. Просто перекатился в ерланг в свое время и сейчас возвращаюсь.
Лично мое мнение - SQL не относится к тому, что надо знать программисту на начальном этапе. По ряду причин. Главная из них - разные СУБД ведут себя по разному и какая используется конкретно в этой фирме - хуй знает. А под знанием SQL как раз обычно прячется понимание, какой там план запроса составит PG, какой MySQL, какой MSSQL, и как их оптимизировать надо, какие там у кого индексы и когда надо, а когда - нет, сверху вся хуйня с транзакционной целостностью, локами и прочий дроч.
В общем - не совсем знания для вкатышей.
Можно конечно было бы написать про базу в духе селектов-джоинов-юнионов ну и третья нормальная форма, но именно это - совсем простые темы, которые осваиваются за 10 минут, а третья нормальная получается сама у большинства людей.
>Я пишу на пятом шарпе и .NET Framework 4.0.
Земля тебе пухом братишка.
>Как мне сделать асинхронный Main???
Из обычного main вызываешь асинхронный метод через
.GetAwaiter().GetResult();
2) Я так понимаю новый шарп 11 совместим только с новым дотнетом 7, нельзя на последних шарпах писать на предыдущих дотнетах?
Как я понимаю, нет-фреймворк это часть винды, поэтому годная стабильная штука, а мультиплатформенные дотнеты это соевые однодневки выбрасываемые на помойку каждый год, и по сути та же джава, на винде чужеродное пердящее говно. Как и джава, дотнет может используется в хуерпрайзе, но для нормальных приложений такое же говнище как джава или тот же электрон.
1. На винде без проблем. На линуксы новые в репах может не быть старого дотнета, а руками может ругаться на зависимости (в теории). Внутри докера проблем конечно не будет
2 а где то разве не так? Везде так где есть рантайм для выполнения кода. Старый рантайм физически не может выполнить инструкции про которые он не знает и это не сахар.
.
Какие проблемы со скачиванием могут быть? Готовые релизы есть как на сайте Майков так и прямо на гитхабе.
Для того чтобы писать на последней версии тебе не обязательно нужен таргет на последний дотнет. Нужен последний сдк и компилятор соответственно.
Выставляешь настройках проекта версию языка latest или конкретную, а дотнет например 6.0. Компилятор ведь собирает в IL при JIT или в ассемблер при AOT, так что если нет каких-то breaking changes в IL (а это вообще было когда-нибудь?), то никаких проблем.
>Для того чтобы писать на последней версии тебе не обязательно нужен таргет на последний дотне
Фиг там. Латест он выставит от таргета, а если указать версию языка то будет ругаться
Тебя стоит уволить и обоссать.
А в чем проблема? При установке нового SelectedItem делаешь старому селектед oldSelected.isselected=false
а с мультивыбором еще проще, ведь забинден прямо на нужный элемент. Ну разве что нужно где то реагировать на изменение селектед, но тут куча разных вариантов от события до чего угодно
язык неоч джава лучше
Нет, мёртвое типа COBOL.
MSDN
Пруфс?
Поскольку стандартных HTTP-кодов было недостаточно, каждый ответ (если он шёл от приложения) содержал развернутый индикацию успешности или отчёт об ошибке (или сразу о нескольких, если их было больше одной).
А когда пошли первые жалобы мы столкнулись с одним интересным явлением - пользователи начисто игнорировали тело если получали что-то кроме 200 в ответ, и совершенно искренне не могли понять зачем читать тело если есть код.
Годы (буквально) разъяснения, примеры в документации - ничего не помогало, на каждую жалобу уходило несколько итераций службы поддержки чтобы получить тело с подробным отчётом.
По этой причине следующая версия API была построена по простому принципу - 200 - запрос дошёл до приложения, >= 300 - не дошёл. И дело пошло - с тех пор проблем и вопросов у пользователей сильно поубавилось, потому что детальные отчеты в теле были достаточно красноречивы, и самое главное - их стали читать и парсить.
С тех пор у меня есть чёткое убеждение - не надо смешивать транспорт (HTTP) и приложение (JSON/XML/etc), а также не надо пытаться впихнуть в куцые варианты кодов HTTP варианты ответов приложения - их банально недостаточно и они практически бесполезны в сложных API. А если API доступно не только через HTTP (да, есть и другие транспорты), то отсутствие привязки только упрощает разработку.
К тому же, если уж заставлять пользователя читать тело вне зависимости от кода - сами коды имеют мало смысла, их основное назначение - индикация того дошёл ли запрос до приложения или нет, и на этом всё. В самом крайнем случае можно использовать серию 5xx для индикации того что запрос не был обработан (т.е. безопасно его повторить), но не более того.
Разумеется, в очень простых API, где всё влезает в HTTP-коды их можно использовать (хотя и остаётся неоднозначность с 404), но это частный случай.
По поводу кэширования - есть же вполне себе стандартизованный Cache-Control, который решает проблемы с прокси и прочими посредниками, а если прокси его не понимает или пытается "умничать" - то грош ему цена.
Поскольку стандартных HTTP-кодов было недостаточно, каждый ответ (если он шёл от приложения) содержал развернутый индикацию успешности или отчёт об ошибке (или сразу о нескольких, если их было больше одной).
А когда пошли первые жалобы мы столкнулись с одним интересным явлением - пользователи начисто игнорировали тело если получали что-то кроме 200 в ответ, и совершенно искренне не могли понять зачем читать тело если есть код.
Годы (буквально) разъяснения, примеры в документации - ничего не помогало, на каждую жалобу уходило несколько итераций службы поддержки чтобы получить тело с подробным отчётом.
По этой причине следующая версия API была построена по простому принципу - 200 - запрос дошёл до приложения, >= 300 - не дошёл. И дело пошло - с тех пор проблем и вопросов у пользователей сильно поубавилось, потому что детальные отчеты в теле были достаточно красноречивы, и самое главное - их стали читать и парсить.
С тех пор у меня есть чёткое убеждение - не надо смешивать транспорт (HTTP) и приложение (JSON/XML/etc), а также не надо пытаться впихнуть в куцые варианты кодов HTTP варианты ответов приложения - их банально недостаточно и они практически бесполезны в сложных API. А если API доступно не только через HTTP (да, есть и другие транспорты), то отсутствие привязки только упрощает разработку.
К тому же, если уж заставлять пользователя читать тело вне зависимости от кода - сами коды имеют мало смысла, их основное назначение - индикация того дошёл ли запрос до приложения или нет, и на этом всё. В самом крайнем случае можно использовать серию 5xx для индикации того что запрос не был обработан (т.е. безопасно его повторить), но не более того.
Разумеется, в очень простых API, где всё влезает в HTTP-коды их можно использовать (хотя и остаётся неоднозначность с 404), но это частный случай.
По поводу кэширования - есть же вполне себе стандартизованный Cache-Control, который решает проблемы с прокси и прочими посредниками, а если прокси его не понимает или пытается "умничать" - то грош ему цена.
Ответь, любитель 200, что там создает транспорт-то?
А за что транспорт просит мзду?
Может быть скажешь, почему транспорт - каким-то образом решает, поддерживаемый ли медиа-тип или нет?
Ладно. Я не хочу очередной рестосрач разводить. Просто это все забавно, когда говорят про транспорт в контексте HTTP. А потом - мы берем нормальный транспортный протокол типа TCP-UDP и такой фигни вообще не возникает: хочешь - гоняешь модбас, хочешь - DLMS, хочешь - IRС, хочешь - просто отправь файл и на той стороне - порешают че с ним делать. Транспорт ведет себя как транспорт, мать его. Да, иногда может отвалиться и приложению надо нахлобучить что-то, чтобы самому уже гарантировать доставку, но это именно что ложится в транспорт. А вот эта вот залупистика с тем, что HTTP - теперь транспорт, это просто рофл на самом деле какой-то, и нежелание спецификацию подробно читать, чтобы самим делать нормально.
>мы берем нормальный транспортный протокол типа TCP-UDP
а ты когда берешь это тоже лезешь в содержимое tcp пакета и коды ЛОГИКИ пихаешь в его хидеры в расчете "а вот доставайте код логики из хидера tcp пакета, хуле вы"?
А если ты это не делаешь, а позволяешь tcp/udp/жопаdp просто доставить, то зачем ты постоянно сравниваешь теплое с мягким?!
это риторический вопрос.
Няша, HTTP - прикладной протокол. Если для твоего приложения он не подходит - значит ты просто неправильную технологию выбрал.
Что тут блин сложного-то?
Ты же не пытаешься через FTP включить лампочку или че ты там пытаешься через HTTP делать. Почему-то некой интуиции тебе хватает, чтобы не пытаться извращаться, даже если это реально можно сделать всяческими ухищрениями.
Но вот когда речь заходит про HTTP - сразу начинается эта фигня: Ряяяя, HTTP-транспорт. Ну, блин, серьезно. А можем мы в таком случае этот транспорт по USB погонять без лишних телодвижений? TCP - можем вполне, ему в принципе похуй по чему гоняться. Покажи мне в таком случае, как ты будешь организовывать общение браузера через USB или UART подключения к серверу.
Я хочу пообщаться с анончиком, который ее запостил же.
Только сейчас починился сосачик, целых 2 дня не с кем было пообщаться.
Ну да ладно.
> HTTP - прикладной протокол
Но из этого НЕ следует что я обязан обязательно быть прибит к нему гвоздями и не могу быть на уровень выше и использовать его как банальный транспорт в который умеет клиент.
поэтому
>Если для твоего приложения он не подходит
отлично подходит - сообщения доставляет, клиент умеет с ним работать искаропки, коды не требуется подгонять под коды проткокола и они могут быть сколь угодно завязаны на логику, а не на протокол.
Проблем нет.
Я выделил жирным для непонятливых. Завязываясь на особенности хттп ты ВЫНУЖДЕН разгребать и все неудобства этого выбора - это и в пасте описано и необходиость клиенту писать if портянки для разбора, непонятки с батчами и так далее.
Можешь жить? ну замечательно. Также ты возможно можешь решить возникающие проблемы...которые не возникли бы если бы ты сам не решил их создать своим выбором.
А ещё HTTP - протокол передачи ГИПЕРТЕКСТА. То есть HTML. Передаёшь JSON-ы => используешь HTTP неправильно. При единственном правильном использовании HTTP сайт должен выглядеть как пикрил.
Чел, у тебя на скриншоте картинка, бинарный файл, какой текст, иди проспись.
Только вчера ебал стримы с массивами байтов как в Си байтоёбля! хексдампы! по HTTP, просто чтобы картинку в ГИПЕРТЕКСТ положить как у тебя на скриншоте.
То есть, я могу взять 11 шарп (на 10 винде) и скомпилить под винду 7 (там стоит рантайм дотнета 6)?
Это был сарказм. Я и не респонс-шизик и понимаю, что HTTP ещё 20 лет назад во времена SOAP использовали как транспортный протокол.
Будет работать если из новых фич 11-го шарпа ты будешь исползовать только сахар. Т.е. то что используется до компиляции в IL. Если же это изменения требующие именно нового рантайма, то нет, если не сможешь накатить его на win7
Но самый главный вопрос. Какое из новых изменений в C#11 тебе нужно настолько сильно, что ты вообще задался этим вопросом?
Да, блять, можешь. Конечно если ты не используешь какие-то новые типы из System, в таком случае тебе действительно нужен новый рантайм. А просто новая версия языка в новом рантайме не нуждается.
> C#11 тебе нужно настолько сильно, что ты вообще задался этим вопросом?
Это https://learn.microsoft.com/ru-ru/dotnet/csharp/whats-new/csharp-11#raw-string-literals
удивительно что эта фича появилась аж в 11 версии языка через десятилетия. Это к тому насколько быстро делаются нужные фичи
1) Эта сахар, значит должен работать и на старом рантайме.
2) Хранить таким образом текстовые данные в коде - мудачество. Не делай так. Для нормальных задач вполне хватает интерполированных строк. А такая хуета для уебанов любящих пихать Raw SQL в код. За такое гвоздь в голову вбивают.
>И мне из всего этого нужен только MVC для вката?
Нет. MVC нахуй сейчас никому не нужен. Достаточно Web Api.
Не нужные - иди мимо. А людям нужно.
Изучай что интересно, но только не веб формы. Так ты быстрее чему-то научишься. Вон блазор поковыряй. Текущий фронтир дотнета в вебе.
Мне безумно нравится изучать сишарп особенно после javascript. Я планировал изучить и blazor и mvc и микросервисы и алгоритмы на шарпе и azure.
Но мне необходимо набрать минимальный набор знаний чтобы начать искать работу. Вот как это сделаю буду для души ковырять азур с блейзером
> А такая хуета для уебанов любящих пихать Raw SQL в код
А ты хочешь запихнуть этот SQL в отдельный файлик и потом подгружать его каждый раз, молить богов, чтобы юзер-долбоеб не удалил папку с ними и вспоминать как там надо параметры в запросе передавать, вместо того чтобы просто видеть это?
Или что? Я не понял.
Можно. Кто ж тебе запретит.
Вообще. Ты можешь так-то вообще одним MSBuild и csc обходиться, если так уж хочется.
Блин. Как я по моно скучаю. Да, была кривой-косой, но мне так нравилось что был выбор. Хочу чтоб кто-то взял и сделал нормальную вендор-фри реализацию шарпов.
> запихнуть этот SQL в отдельный файлик
Можно же заэмбеддить ресурсы.
> молить богов, чтобы юзер-долбоеб не удалил папку с ними
А если он удалит DLL-ки? А если он удалит рантайм дотнета? А если он удалит операционную систему???
> вспоминать как там надо параметры в запросе передавать
Один раз пишешь DAO с заполнением всех параметров и дальше тупо вызываешь везде методы оттуда. Проблема непонятна.
>Можно же заэмбеддить ресурсы.
А можно этого не делать, а иметь запрос прямо "на месте", потому что от запихивания запроса в ресурсы пользы нет, а править ресурсы морока.
К тому же ресурс это....ресурс. А sql запрос не совсем ресурс.
Делаем фичу, меняем sql запросы и эти изменения в истории контроля версий логически связаны, то есть относятся к правильным файлам, а не "отдельный словарь sql запросов, хер пойми где и как он с чем логически связан (ведь сам файл DAO не изменился)" (а уж мерж этого файла - отдельное удовольствие).
Потому и пихали в ресурс не потому что нужно, а потому что не было возможности нормально вписать это в коде.
Аргументы кроме ЯСКОЗАЛ будут? Или ты думаешь, что те, кто использует dapper не осилили EF или что то другое )
Боюсь спросить, а как ты сырые json'ы описывал.
Вещь очень нужная, я тоже не пойму почему только сейчас завезли (на самом деле думал что такое подобное уже есть)
Ебись с @
>Аргументы, в том, что твой софт становится неподдерживаемым куском говна.
скажи это разрабам стековерфлоу, а то они придумали dapper и не знают что их продукт нельзя поддерживать )))
Любимый аргумент говнокодеров. "А вот в MIcrosoft/Google/Stackoverflow так делают, почему мне нельзя".
Потому что ты - не они. И твой говнокод точно не соответствует никаким стандартам.
>>714343
Короче сделал проще - через статическое событие в статическом же классе. Каждый объект в своем конструкторе подписывается на это событие, затем при изменении свойства selected вызывает метод статического класса, в котором уже происходит вызов события, таким образом при изменении объекта об этом уведомляются все остальные. Поясните, насколько это говнокод? Статические классы это же вроде зло и все такое.
задание: обчислить сумму бесконечного ряда
проблема: в sum как ответ выходит знак вопроса
как фикстить?65
Бочку сделал, хуйцов соснул,права на папки у учетки appool раздал
и даже группу IIS_USRS добавил
Что еще этой мрази надо?
абсолютный говнокод. в односелекте события вообще не нужны
в мультиселекте вьюмодель итема должна уведомить что ее выделили. И то ЕСЛИ ДОЛЖНА - вот тогда уж приходится думать "а как при ее изменении IsSelected других уведомлять". и тут уже разные варианты.
> И то ЕСЛИ ДОЛЖНА - вот тогда уж приходится думать "а как при ее изменении IsSelected других уведомлять". и тут уже разные варианты.
Ну так чей плох мой вариант?
Ну других вариантов я не вижу, разве что сделать приватное событие прямо внутри класса и вызывать его в сеттере... Хм, звучит то неплохо.
Поставь точку останова и посмотри результат. Если результат правильный - то чет с форматом.
1. Я бы написал как-то так, если бы на первом курсе учился.
2. У тебя факториал твой - всегда 0. Потому - результат либо инфинити будет.
Консолька - не умеет рисовать знак бесконечности, потому - у тебя вместо него вопросик.
Я знаю что у MediaElement под капотом Windows player, пытался смотреть ивенты системы, никаких ошибок не нашел.
Может кто подскажет как можно отловить хотя бы ошибку - что ему не нравиться? Я так понимаю что это какое-то COM исключение на стороне самого windows player'a.
Я знаю что у MediaElement под капотом Windows player, пытался смотреть ивенты системы, никаких ошибок не нашел.
Может кто подскажет как можно отловить хотя бы ошибку - что ему не нравиться? Я так понимаю что это какое-то COM исключение на стороне самого windows player'a.
В тырнете пока ничего не нашел.
Лучше уж быть вебмакакой, чем ебаться с TREEVIEW.
>unhandledexception
Репортинг ин - нихуя. Я уже обмазал вывод в файлы ибо изначально я натыкал месседжбоксы и я подумал что может там гуишник крашится.
Энивей спасибо, я вообще за него забыл.
ну технически в дотнете есть настройки создавать дамп при краше
https://github.com/dotnet/runtime/blob/main/docs/design/coreclr/botr/xplat-minidump-generation.md
но хз сработает ли если крашится в нативной части.
Мне иис нахуй не нужен, но так заведено в нашей команде где я сорт оф новенький
Оказалось надо доставить всяких фреймворков от 2 го 6го и с каким то из них всё заработало
Ловишь appdomain unhandledexception и firstchanceexception? Вообще такое может если контрол еще не прогрузился, а его уже пытаются запустить.
>а третья нормальная получается сама у большинства людей.
А вот за пятую уже и поговорить можно, но конечно это не для джуна
мимо-синьор-скуль-помидор
Вакансии и даже общая популяность языка никак не отражает его качества, особенно в бизнес среде.
Вакансии формируются не потому что язык лучший, а потому что так получилось что спецов легко найти, людей заменять проще, а еще сам язык по себе проще для изучения, хотя может быть хуже в плане работы, но бизнесу важно просто делать, качественно и хорошо это уже следующая ступень.
Тоже с популярностью, люди ведомы и когда язык случайно стреляет, то уже дальше по инерции он идет вверх по полярности без реальных причин.
Как только ты попадешь на реальную работу ты охреенеешь от тупости людей и их приверженству как уточек к первому что они видели в жизни. Сразу появится понимание того что популярное != хорошее/лучшее.
>Искать вакансии на ХХ в 2023м.
А я не искал. Я лишь проанализировл уровень востребованости.
>>718244
>А в джаве, питоне и жсе еще больше чем в пхп
Я выбираю между пхп и сишарпом. пипитон и прочии жабы с 500 откликами на вакансию меня не интересуют
>>718314
>Вакансии и даже общая популяность языка никак не отражает его качества, особенно в бизнес среде.
Ладно. То есть ты намекаешь, что сишарп для бэка более удобен, чем пхп, но найти работу на нём тяжелее чем на пыхе?
А, дак ты вкатунишка. Тогда советую тебе идти нахуй, а не набрасывать на вентилятор
>А, дак ты вкатунишка.
Скуф, спокуха. Молодые плэйбои типа меня вас заменят, это правда, да. Но это не повод подрываться и посылать меня нахуй из треда, предназначенного для ВКАТА в сишарп.
>То есть ты намекаешь, что сишарп для бэка более удобен, чем пхп, но найти работу на нём тяжелее чем на пыхе?
Я не он, но отмечу что прогаю с 2005 года и весь серьезный промышелнный бекенд что я встерчал, это исключительно Java и потом C#.
Пхп говно говна. Но, объективно говоря, шарп переусложненния душная хуйня.
>Скуф, спокуха. Молодые плэйбои типа меня вас заменят, это правда, да.
Это конечно же неправда. Молодые плейбои сосут хуй у дедов которые знают не только мантры конкретного языка, но и обладают уникальными эсперьтизами во многих областях.
Мань, пограммист(хороший пограмист) получает баблосики не потому, что быстро пишет олимпиадные задачки на очередной алгоритм сортировки. И не потому, что весь такой эджи и сыпет базвордами.
Платян нам за понимание конкретных предметных областей, и за умение понимать и предсказывать когда где что отъебет у бизнеса.
А эти умения получают исключительно с опытом.
Вот возьмем к примеру меня: 12 лет автоматизации аналитики продаж и финансовой отчетности. 2 года автоматизации анализа спутниковых снимков. Ну и немного всякого другого по мелочи.
Ну какой ты мне конкурент со своими полугодом курсов хуяндекс практимума или скилбокса? Не смеши мои седые муди
мимо-38-лвл-синьор-наносек
>А я не искал. Я лишь проанализировл уровень востребованости.
Хорошие компании редко выкладывают вакансии.
А отличные на 30-50 тел так вообще сами ищут когда им кто-то нужен, изредка в своем уютном бложеке публикуя инфу о том что им кто-то нужен.
>Я выбираю между пхп и сишарпом. пипитон и прочии жабы с 500 откликами на вакансию меня не интересуют
Зачем тебе программирование? Ради денег? Иди в 1С, там их больше потому что туда идут только за деньгами.
Вообще язык не особо важен, ты легко его меняешь за пару недель потому что программирование это язык лишь во вторую очередь. Вообще чистый С всему голова.
>Ладно. То есть ты намекаешь, что сишарп для бэка более удобен, чем пхп, но найти работу на нём тяжелее чем на пыхе?
Смотря где ты хочешь работу искать, в некоторых странах C# проще найти. Плюс нужно понимать чего ты хочешь, язык который использует компания это чаще всего показатель чего стоит ждать от компании в целом.
У нас вообще очень слабый рынок по ИТ в плане инновация и хорошего инструментария, в том же C# найдя работу ты будешь писать на какой-нибудь 6-7 версии и тебя по рукам за тот же сорс ген бить будут потому что команда его не знает.
А так да, C# намного лучше других языков для разработки именно из-за инструментов, это по мне самый удобный язык в плане дебага и разработки. Тут можно писать грязные дерьмовый код, а затем парой нажатий превратить в красоту где с легкой правкой сделать код еще и хорошим.
>А так да, C# намного лучше других языков для разработки именно из-за инструментов, это по мне самый удобный язык в плане дебага и разработки. Тут можно писать грязные дерьмовый код, а затем парой нажатий превратить в красоту где с легкой правкой сделать код еще и хорошим.
Вот этот по сути дело говорит. С# хорош своей инфраструктурой. Охуенная среда разработки, даже так, ОХУЕННАЯ. Централизованный репозиторий пакетов, где следят за качеством. Чрезвычайно душная типизация заставляет даже самую тупую макаку писать +- вменяемый код. Плюс богатые возможности по дебагу, автогенераторы всего и вся искаропки, автомапперы, охуенные "клиенты" к самым ходовым СУБД.
Т.е. ты просто изкаропки имеешь весь передовой инструментарий.
Оборотная сторона - очень мало новых проектов по крайней мере в МСК. Вот я чейчас в 2023м году сижу на легаме параше в стиле
.metCore3 и .net5 прости господи. Притом клиентами к бд у нас какие то самописные провайдеры. Вместо Entity или хотя б даппера
Тоскааааа
НО при всём при этом, ежели вкатун хочет в бек, всё остальное ЕЩЕ хуже
Хотя, конечно, зависит в какой именно бек вкатываться. Если шлёпать по кулдауну магазины по продаже вейпов и дилдаков, там хватит "самого популярного в мире языка" пайтона кек.
мимо-38-лвл-синьор-наносек
>Ради денег?
Это + возможность легкого переката за границу в случае пиздеца в экономике или принятия ещё какого-нибудь охуительного закона, разрешающему военкому выебать меня в жопу или лишить квартиры.
По этой причине
>Иди в 1С
не подходит, не говоря уже о том, что 1С - это скучная вакуумная поебень.
>>718386
>это по мне самый удобный язык в плане дебага и разработки
>>718399
>Чрезвычайно душная типизация заставляет даже самую тупую макаку писать +- вменяемый код
Ну понятно в прицнипе. Качество в обмен на скорость написания кода грубо говоря, соответственно и время вката тоже больше будет. Спасибо за пояснение.
>сижу на легаме параше в стиле
>.metCore3 и .net5 прости господи.
Чел, ты сейчас просто у кучи джавистов инфаркт вызвал, записав в легаси фреймворк которому меньше четырех лет (это если про 3.1 говорить, .net5 и того меньше).
Ну понимаешь, я в то же самое время мамкин вебдев на ангуляре, и у меня со времен вката в .net нагуляр вырос с 8 по уже 16й
В мире тайпскрипта всё такое быстрое...
Ну и чтоб ты понимал, вот одна из моих "главных админак"
>о на хх у пхп вакансий на бэкэнд больше в два раза
почему то вакансий на продавца в пятерочку больше чем в президенты. выходит быть президентом убого, а продавцом в пятерочке востребовано.
Это для социоблядей
>записав в легаси фреймворк которому меньше четырех лет
он правильно записал. ведь это все на деле довольно молодое
я вот смог переехать с дотнета4.8 аж только на нет6
а на нет5 не смог (ведь несмотря на циферку он умеет сильно меньше чем 4.8)
Обьясните, в чем может быть проблема, вьюхи отъёбывают под wsl бубунтой, под шиндовс полет нормальный. Никак не могу понять в чем причина
Вот, например, ReadOnlySomeShitViewModel. Это ViewModel для ReadOnlySomeShit? Или ReadOnlyViewModel для SomeShit? И если последнее, не логичнее ли будет изменить на SomeShitReadOnlyViewModel?
Для читаемости, логичности и понятности по моему скромному мнению было бы лучше
ViewModelOfReadOnlyShit
ReadOnlyViewModelOfShit
Но так же низзя, ViewModel должно быть суффиксом...
using ShitROVM = PublicToiletManager.ViewModels.ReadOnlyViewModelOfShit и збс.
Но пишут, что это хуйня и использоваться должно только для коллизий.
ReadOnly и ViewModel - указание на функционал
SomeShit - на суть
Суть > функционала
>>719254
>Но пишут
На заборе тоже дохуя всего пишут. Но там хуи.
Везде свои правила. И на любом новом проекте первое, что ты делаешь прежде чем хоть что-то делать с кодом - спрашиваешь местные кодстайлы и порядки.
Альясы вполне можно использовать, только не такие уебанские как ты предложил.
типо где в левом окне инфа написана, справа прямо редактор кода
И какие книжки есть по c#?
И почему ссылки разные для десктопа, веба и т.д.? С# для каждой платформы свой что ли?
Есть подозрение что тебе куда то вот сюда
https://learn.microsoft.com/en-us/windows/win32/dataxchg/clipboard
>типо где в левом окне инфа написана, справа прямо редактор кода
Боюсь имагинировать что за уровень туториалов в этой параше можно провернуть окромя хело ворлд и сортировки пузырьком. Редактор это же не хуйня из под коня, поэтому что мешает тебе пользоваться Alt+Tab для переключения между тутором и редактором? Ну или за пару тысяч купить дополнительный монитор.
В гибридах я не вижу ничего хорошего.
Единственное, что может быть интересным, это онлайн переводчик кода на шарпе в IL-код https://sharplab.io/
>И какие книжки есть по c#?
В шапке
>И почему ссылки разные для десктопа, веба и т.д.? С# для каждой платформы свой что ли?
Шарп одинаковый, но разные условия для работы, соответственно иной подход, библиотеки. Это не мешает особенности разработки веба использовать в десктопе. У меня, к примеру, так и есть.
Проще с десктопа начать т.к. веб сразу кидает тебя в омут паттернов, сервисов и прочего.
>С# для каждой платформы свой что ли?
Да десктопный C# и веб C# (а еще есть геймдевный C#) это совсем разные языки. У них очень давняя и глубокая история вражды. Может быть когда-то и была надежда, что они станут чем-то одним, но она давно уже утеряна.
>Да десктопный C# и веб C# (а еще есть геймдевный C#) это совсем разные языки
И в чем разница?
Забей, он тралет
такая же какая между процессорами х64 и arm
Есть свёрстанный сайт на реакт который работает на локалхосте с портом 3000 и слушает asp.net web api на порте 5000, но на самом деле нихуя он не слушает, хотя всё подключено(как мне кажется).
как сделать так шоб всё работала?
Я полный ньюфаг, и только начал вникать, воот.
Скрины кода могу показать, но я не буду ничего лить сюда, пушо не ебу что может пригодиться
вот только смена процессора вызовет необходимость переустановки всей винды, но твой совет верный )
DOTNET_CLI_TELEMETRY_OPTOUT
Нашел что надо писать "setx DOTNET_CLI_TELEMETRY_OPTOUT 1"
На сайте другео написано.
А еще написано - закрой установщик и запустите его снова.
И что дальше? Выбрать "восстановить"?
пишет nable to generate assets to build and debug. OmniSharp server is not running.
У тебя установлены приблуды для работы с дотнетом в вскоде?
Просто сейчас - буквально что нужно - это нажать кнопку AddConfiguration и выбрать .net
А дальше - через f5 запустить.
Консольный текстовый треш в графическом приложении.
я устанавливал только с# расширение от микрософта
Нихуя не понимаю.
что надо сделать-то?
Пиздец. Нет нормальных редакторов для C# каких где ебаться не надо так?
Не ебу о чем ты.
А как в DDD, когда у нас богатая модель - закладывать сложную логику?
Типа вот допустим. Учебный пример. Есть две доменные сущности: Зал и Работник. Есть логика - один работник не может быть одновременно в двух залах в один день задействован.
Где это должно быть? В модели зала? В модели работника?
С анемичной моделью - для меня все просто - делаем сервис распределения работников по залам. Уже по этой вот хуйне - понятно, что он может и про залы знать, и про работников - и логика которая связана. Потом - делаем прототип, в зависимости от анализа UX - для пользователя даем наиболее простой интерфейс, а внутри - все сервис разруливает.
Да. Я понимаю, что в DDD надо как-бы с доменным экспертом и все такое. Но если его нет? Есть просто набор требований в духе: система должна позволять выполнять круд-операции базовые + распределять работников по залам, с озвученным выше условием.
все работает, вдруг кому пригодиться алгоритм
https://learn.microsoft.com/ru-ru/dotnet/core/tutorials/with-visual-studio-code?pivots=dotnet-6-0
>Нет нормальных редакторов для C# каких где ебаться не надо так?
визуал студия
райдер
ты сам выбрал каку
>Есть две доменные сущности: Зал и Работник. Есть логика - один работник не может быть одновременно в двух залах в один день задействован.
Сдается мне что тут должна быть какая-то третья сущность (например "Рабочая смена" или что-то подобная), которая уже и будет содержать связывающую их логику.
>>720325
>Я понимаю, что в DDD надо как-бы с доменным экспертом и все такое. Но если его нет?
Тогда лучше не использовать ДДД. Если у тебя нет нормального ТЗ где расписаны все связи, условия консистентности моделей и т.д., то ты просто размажешь всю логику в доменном слое и охуеешь при первом же рефакторинге или изменении чего-либо.
https://pastebin.com/bXc0i6M8
Как ее в шарпе можно нормально запарсить?
Раз принёс жс код то вот и ищи парсеры жса под шарпы. Но я думаю вряд ли ты захочешь работать с ast деревом так что сразу ищи либы (есть и натив и менеджет реализация) для того что бы исполнять его
Asp.net core
>Я запутался в этом зоопарке если честно.
Добро пожаловать в мир нейминга версий продукта у майкрософта, тебя в нем ждет дохуя чудных открытий.
>>721422
>На реддите пишут что вместо asp.net изучать .net core.
Не читай реддит, тем более для изучения чего бы то ни было вообще.
Лень расписывать, поэтому совсем кратко:
Учишь .Net6 и выше (дополнительно ознакамливаешься с .Net Core3.1) для понимания платформы и т.д.
Сверху учишь Asp.Net Core 6 и выше, конкретно для веб разработки.
А почему именно .net 6 а не скажем 7 или 8 (если не путаю вроде недавно выкатили)
да все там просто
были дотнеты 1.1, 2.0, 3.5, 4.0...4.8
ну и со всем этим росли EF и asp.net, винформс и WPF
в какой то момент нашлась голова решившая что кросс это хорошо и нужно рантайм кросс. Но переделать это сложно, поэтому решили писать с нуля "сразу правильно и без депрекатед говна"
А попутно "переписать с нуля всякие EF и ASP.NET". Винформс и WPF никто и не планировал делать кросс - их и не трогали.
Пояснили народу что 4.8 последний и больше развиваться не будет и ждите пока новое сделаем
Дали этому новому имя dontnet core.
Много там херни наделали, переделали, не хотели портировать разные штуки, потом портировали таки часть.
В итоге дописали до "кажись стабилизировали и юзать можно, пора делать его основным, а про 4.8 забыть"
Так этот core ожидаемо стал дотнет 5-6-7, а у сопутствующих продуктов осталось слово core (ну а куда ж без него - тогда не отличить от старого)
поэтому те, кто пишет на 4.8 фреймворке и ASP.NET - просто пишут на старье, которое решили похоронить и оно легаси со всеми вытекающими (некоторые вон и на дотнет 2 пишут, мазохисты)
И в плане "что учить" тут просто
ожидаешь ли ты что на твоей работе будут использовать старье (что кстати можно понять ибо не все можно перевести на новые рельсы) или же ты не хочешь грузить себя голову старьем которого может и не быть на твоей работе...вот и думай.
Не хочу грузить голову старьем. Хочу учить актуальные технологии. Если на работе скажут что легаси нужно поддерживать, хорошо, я это буду делать, но пока у меня нет работы я хочу учить актуальный стек.
С интерфейсами, классами и т.д. знаком.
1.Составить иерархию классов в соответствии с вариантом. Во главе иерархии классов одолжен находиться интерфейс, которые определяет возможность создания объекта с помощью ДСЧ:
interface IRandomInit
{
void RandomInit();
}
>А почему именно .net 6 а не скажем 7 или 8
На .net6 массово начали переходить где-то во второй половине 2022года. И до сих пор еще достаточно много проектов которые крутятся на .Net Core 3.1.
С учетом того, что на 7-й .Net никто переходить не будет, а 8-й выйдет только в конце этого года, то ты его раньше конца 2024 года на реальных проектах вряд ли пощупаешь.
Т.е. учить стоит то, что актуально сейчас и будет актуально как минимум еще полтора-два года, а потом уже хватит простого ознакомления с новыми версиями.
>Что от меня хотят и как это сделать?
А хер его знает. Выглядит как куча несвязанных слов на тему ООП.
Леплю данные в датасурс (похуй какой, взял из самого простого примера https://docs.devexpress.com/XtraReports/403671/detailed-guide-to-devexpress-reporting/reporting-api/create-reports-in-code/create-a-simple-data-bound-report) - данные не отображаются в отчете, данные которые вместо этого руками биндю к лейблам всяким - отображаются.
Сделано всё более-менее по этим двум штукам
https://supportcenter.devexpress.com/ticket/details/t988191/how-to-integrate-devexpress-blazor-reporting-to-a-blazor-wasm-hosted-app
и
https://docs.devexpress.com/XtraReports/401677/web-reporting/blazor-reporting/server/quick-start-in-blazor-reporting/create-a-blazor-reporting-application
ТЛДР - Данные по ExpressionBindings не отображаются, данные по обычным биндам а ля this.nameLabel = "pizda" отображаются
Не слишком мудрёно ли это? И если да, то какие альтернативы могут быть? Думал мб вебхук написать вручную, но будто бы это ебля тоже.
Вебхуки/стейт машина
Поясните, пожалуйста, за локальные переменные и утечки памяти.
Вот есть поле в классе _globalVaariable, оно один раз создается и задается. Потом в цикле переиспользуется сколько надо раз.
А если в цикле (или в принципе в некоем методе, который постоянно будет вызываться) создавать через var локальную переменную, компилятор ее считает как создаваемую один раз, или он будет на каждой итерации цикла выделять память под новую локальну. переменную?
Пример прицепил.
>утечки памяти
Забудь про эти слова. С учетом твоего уровня понимания, ты с такой проблемой столкнешься хорошо если лет через 10 и то не факт.
>>722854
>компилятор ее считает как создаваемую один раз, или он будет на каждой итерации цикла выделять память под новую локальну. переменную
Ты (конкретно ты) не знаешь. У тебя там будет два этапа компиляции. Из C# в IL и из IL в маш.код. И на каждом этапе компилятор может сделать все что сам посчитает нужным для оптимизации. Он может разложить цикл или самостоятельно вынести переменную за скоуп, т.к. увидит, что она не меняется и т.д. Поэтому строго забей хуй на подобный умственный онанизм и изучай базу языка. Отличие типов значений от ссылочных, как ведет себя стринг, упаковка/распаковка, статика и т.д.
>Ты (конкретно ты) не знаешь.
Да, не знаю, поэтому вопрос и задал. При всем уважении, но ты мне пыню напоминаешь, которого спросили про 2+2, а он развез говна на два абзаца. Без обид, если ты (конкретно ты) знаешь ответ на вопрос из примера, то прошу ответить, если нет, то не надо уподобляться бункерному.
Все оказалось очень просто, эту фигню я смог спарсить как json массив через JArray.Parse и с этого момента можно было уже делать все, что хочешь.
Сперва я написал свой метод, который проходился по дереву без рекурсии, а потом понял, что нахуй это не нужно, можно тупо через linq .Descendants().Where() и select и всё, блэт.
>то прошу ответить
Во первых тебе дали прямой ответ - это не твоего ума дело, за тебя это решает компилятор. В каждом случае он будет решать исходя из кучи разных условий о которых ты даже представления не имеешь.
Во вторых, если ты хочешь подробностей то идешь и читаешь книги вынесенные в шапку. Все это описывается в первых главах почти любой книги по шарпу. Если тебе мало - читаешь Рихтера. Если мало ставишь какой-нибудь дотпик и лезешь исследовать IL. Нахуя анону тебе объяснять то, что уже тысячу раз разжевано в интернете.
В третьих - ты пидор, раз вот так сходу съезжаешь на политику.
Ты опять вместо прямого краткого ответа в залупу лезешь, вместо того, чтобы сказать что ты сам не знаешь или промолчать.
Слив засчитан. Нассал тебе на пятак.
Вот при собесе на андроид разраба можно показать свои приложухи например.
Веб для пидоров же. Если б я хотел веб я б жс дрочил.
А по микроконтроллерво нет вакансий. Так что мимо.
Ещё и ответ на ответ говно.
Конечно никто в проде НЕ будет писать под мк на шарпах, но это просто пет проект который можно кинуть в портфолио и показать что как минимум ты не камень. Если ты реально хочешь в это лезть то стоит уметь всего по немногу о что то хорошо т.к. задачи разные и сопосбы их решения тоже
Чмоня, ты загуглить мог, а не агрессировать. https://stackoverflow.com/questions/7383016/reference-type-variable-recycling-is-a-new-reference-variable-created-every-lo/7383090#7383090
Если по простому - там твой код на уровне IL переписывается под выполнение стековой машиной. У нее есть регистры и стек, который и выделяется для локальных переменных. На изначальный код это совсем не похоже ибо другой принцип выполнения. И для выполнения IL инструкций значения помещаются в стек, и при выполнении вытесняются.
и в цикле в любом случае помещенное в стек в конце итерации полностью вытеснено. Плевать где объявлена переменная - она попадет в стек при нужде и уйдет оттуда сразу же по ненужности.
Так что даже для 100 переменных и цикле размер стека может быть на 2-3 значения и ему хватит.
Да.
У стековой машины нет регистров. У регистровой машины есть регистры. Рослин компилит код в ил - стековый язык. Ил во время выполнения приложения, каждого конкретного метода, компилируется джитом в нативный код. Вот нативный код выполняется процессором на регистрах - на регистровой машине.
Пусть меня поправят где я хуйню сморозил. В остальном согласен с этим челом.
Локальными переменными можно стек переполнить. Просто находясь внутри метода, вызови этот же метод.
>У стековой машины нет регистров.
но я так и не понял где сохранятся значения.
параметр1 грузим в стек
параметр2 грузим в стек
делаем операцию и стек опустошается
переходим к следующей операции
А где хранится результат - непонятно по коду IL
На вершине стека.
Представь себе поток - единица выполнения. Поток бежит по строчкам кода, занося в стек значения переменных и выполняя операции над над ними. Сложить два верхних значения, результат оказывается в вершине стека. Вызов функции это тоже значения в стеке - адрес возврата, значения параметров и прочие ништяки про которые шарписатм знать неположено. И так поток хуярит пока не встречает инструкцию ретурн. Одну за другой. Стек начинает сворачиваться. Значение на вершине постоянно меняется. В конце концов на вершине стека оказывается условный ноль и выполняется инструкция ретурн - метод мейн возвращает результат вызывающему коду.
просто там локальные помечены как .locals
что никак не говорит где оно лежит
здравый смысл говорит, что конечно в том же стеке только повыше, но я нигде не нашел где об этом было бы написано явно.
В кадр стека. Это условный мегабайт выделенный виндой потоку под стек. Заходя в метод поток заранее выделяет под локальные переменные память. 3 инта, каждый по 4 байта. После сложения значение с вершины стека вычислений помещается в память выделенную под локальные переменные и занимает там 4 байта.
Физически в этом процессе участвует пара регистров и физическая память в оперативке.
Нигде не сохраняет. Этот код нужен чтобы джитер мог сджитить нейтив. Вот машинный код уже где-то сохранит. Stloc.0 отправляет результат сложения из регистра в память, по конкретному адресу в кадре стека. Затем Ldloc.0 прочтет этот адрес и поместит 4 байта инта в регистр процессора.
https://www.youtube.com/watch?v=wKR1WxLVB0k
Ты попутал разработчика на языке (шарпист)
с разработчиком языка (сишник)
Шарписту нахрен не сдались такие подробности если он сам не пишет IL код. Но даже если иногда и пишет, то проще написать код руками, потом глянуть что за IL получился и перенести.
>Программист oneass шарит за программирование
Вот только неприятная загвоздочка, кто шарит за программирование, программ не пишет, это пиздабол-консультант который только языком мелет.
Попробуй пунктуацию
public class A {
private B _b;
}
public class B : A {}
Где подобное может быть полезно?
>Где подобное может быть полезно?
Ну, если тебе понадобиться создать иерархию классов, где родительский класс может иметь член типа класса наследника, тогда будет полезно.
1. Как прокачиваться, в какую сторону? Основа моего стека - .Net, а также много работал с фронтом на JS (но это не модные React/Angular, а непопулярный ExtJs), SQL. Насколько я понимаю, лучше всего стоит
1.1. Подтянуть фронт, хочу пройти курсы по Реакту
1.2. Погрузиться в Azure, эта облачная инфраструктура тесно связана с .Net
Как вообще стать хорошим, ценным специалистов? Комплексую по поводу того, что перекатился из другой специальности в IT
2. Как искать работу за рубежом? Я застрял где-то на планке 3,3 тысячи долларов в месяц. Варианты нахожу в основном среди фирм, которые перенесли деятельность из РФ, а не напрямую с западными заказчиками.
>Как искать работу за рубежом? Я застрял где-то на планке 3,3 тысячи долларов в месяц.
Ну так дело тут не в локации, а в твоем стеке. Если ты зарубеж с ним сунешься, то еще меньше получать будешь. То что ты получаешь уровень мидла.
>>725038
>Погрузиться в Azure, эта облачная инфраструктура тесно связана с .Net
Нахуй сейчас никому не нужно. Причем не только в РФ, но и за границей тоже. Уже после Core3.1 стало понятно, что .net прекрасно и на линуксе пашет и контейнизируется. Поэтому прокладка в виде ажура стала никому не нужна.
>>725038
>Подтянуть фронт, хочу пройти курсы по Реакту
Это дело если хочешь фулстечить, но лучше тогда еще и TypeScript захватить.
>>725038
>Как вообще стать хорошим, ценным специалистов?
В нынешних реалиях достаточно просто качественно рабоать, уметь исправлять и не повторять свои косяки. Ну и немного развиваться в свободное/рабочее время.
Суть. Че я хочу. Есть библиотека A, есть библиотека B.
Я хочу, чтобы A - могла пользоваться B, но при этом A - про то что в B - ничего лишнего не знала. Но при этом все еще могла бы все что надо дергать.
Потому - что я придумал. Пусть у B будет интерфейс вида:
```cs
[EntryPoint] IReadOnlyDictionart<string, Delegate> Provide { get;}
```
Собственно. Вот в этом суть. Я думаю понятно. A - теперь подгрузив библиотеку - может найти там нужный атрибут, по нему - достать этот Provide и дальше - дергать как надо.
И для моих целей - подход рабочий. НО. Я решил померить разницу в скорости вызова. И меня это смутило. Вот таким вот макаром - вызов метода - в 10-100 раз медленнее. Не то чтобы критично, но меня напрягает. Такая жа срань но с дерганьем из сишных библиотек - намного быстрее работает.
Собственно, теперь мне интересно, а есть ли какие-то способы ускорить? Ну, допустим - выдернуть этот метод и пристыковать его к типу, чтобы создавать тип в рантайме, и потом уже он бы дергал эти методы будто из своего типа. Ну или что-то в таком духе. Кто-нибудь вообще такой хуйней занимался? Поясните плиз.
>Поэтому прокладка в виде ажура стала никому не нужна.
Долбоёп! Это ты прокладка в виде долбоёба не нужен. Как будто бы у тебя свой дата-центр и своё облако с 200+ сервисами.
>Я застрял где-то на планке 3,3 тысячи долларов в месяц
И чё те ещё надо, собака? Мало платят? На феррари не хватает? На устрицы с лимоном не хватает? На студию в москва-сити с мебелью от boca room не хватает?
>Варианты нахожу в основном среди фирм, которые перенесли деятельность из РФ
Ебать ну естественно, ажур ушёл с рынка же. Ты случайно не в анабиозе был последние 1,5 года? Хотя, обходить ограничения из России можно.
>Как вообще стать хорошим, ценным специалистов?
Работать, читать, изучать, развиваться. Ты продаёшь знания и своё время. Чем больше знаний накапливаешь, тем больше можешь предложить рынку.
>Как прокачиваться, в какую сторону?
Ажур + рякт + базы данных (nosql + реляционные бд) для начала будет норм. Ажур - это гигант сам по себе, там невъебенное количество сервисов. Ты пока их все изучишь - состаришься.
У работодателя.
Сразу поясню, почему вот такой вот охуитительный подход.
Мне нужно, чтобы библиотека A - могла пользоваться любой библиотекой, которая реализует вот этот вот простой интерфейс. Допустим, библиотека B - это плагин, который нужно будет инициализировать. Вот A - это как раз инициализатор. Он будет брать из папки 100500 библиотек B и раскидывать их по элементам меню, а то что провайдится - будет кнопочками в подменюшках.
>И чё те ещё надо, собака? Мало платят? На феррари не хватает? На устрицы с лимоном не хватает? На студию в москва-сити с мебелью от boca room не хватает?
В Тбилиси с женой и дочкой - впритык.
>>725125
>Ебать ну естественно, ажур ушёл с рынка же. Ты случайно не в анабиозе был последние 1,5 года?
Я не в РФ сейчас.
>>725125
>Ажур + рякт + базы данных (nosql + реляционные бд) для начала будет норм.
Да, вот об этом я и думаю сейчас. Ажур уже пользую понемногу, но в основном только их пайплайны.
https://github.com/sudheerj/javascript-interview-questions#what-are-the-different-error-names-from-error-object
>Ну так дело тут не в локации, а в твоем стеке. Если ты зарубеж с ним сунешься, то еще меньше получать будешь. То что ты получаешь уровень мидла.
ты клонишь в сторону неактуальности и невостребованности дотнет стека? или что
Ссылка на код
https://pastebin.com/2QYsJTuj
Ссылка на изображение
https://image.civitai.com/xG1nkqKTMzGDvpLrqFT7WA/306b9cad-4137-455e-94b2-f57cce570a00/width=450/21950.jpeg
А ты уверен что твой BitmapFrame. Create сразу начинает грузить ссылку чтобы от него на следующей строке метаданные требовать?
видимо для использования в Image. Это ж часть WPF. Если каждый Image будет блокировать UI, будет атата
Не могу разобраться. Мне надо оторазить изображение и метаданные.
Чтобы добавить изображение в Image.Source, я использую BitmapImage. Но у этого типа, свойство Metadata официально не поддерживается — возвращает NotSupportedException
https://learn.microsoft.com/ru-ru/dotnet/api/system.windows.media.imaging.bitmapimage.metadata
Чтобы получить метаданные, я должен использовать тип BitmapFrame. Но вместе BitmapFrame и BitmapImage мне не удалось подружить, хоть оба являются наследниками ImageSource.
А теперь мой код (скрин или по ссылке https://pastebin.com/78mshqEk )
Код условно можно поделить на два блока: сначала создается BitmapImage, который загружает и отображает картинку, затем BitmapFrame, который ТОЖЕ загружает картинку и отображает метаданные. Т.е. я дважды обращаюсь к серверу.
На SO пишут, что раз оба типа являются наследниками одного и того же, то можно создать BitmapFrame, а потом присвоить UI-элементу в качестве источника Image.Source = BitmapFrame. Но у меня ничего не происходит.
Я пытался создать экземпляр BitmapFrame на основе BitmapImage, но тогда у меня не выводится метаданные.
ты можешь загрузить картинку в MemoryStream (не забывая про его ущербность) и потом получать метаданные 100500 способами.
также ты можешь подписаться на окончание загрузки в BitmapFrame и соответственно обновить данные на UI
преврати DownloadCompleted в await и получишь то, что тебе нужно.
у тебя все равно async void
ну или не превращай в await (тебе async не особ и нужен же), а напрямую подписывайся на события
>преврати DownloadCompleted в await и получишь то, что тебе нужно.
Это как? Это же событие.
Алсоу через декодер (у которого есть событие DownloadCompleted) геморно, как и скачивать изображение на диск — надо определять формат изображения, чтобы создать нужный декодер.
... но через декодер удалось получить и изображение и метаданные.
>Это как? Это же событие.
событие переводится в Task
в общих чертах создаешь хендлер в котором TaskCompletionSource и по окончанию события он SetResult
https://stackoverflow.com/questions/22783741/a-reusable-pattern-to-convert-event-into-task
Но поскольку там 2 события, то лучше метод расширение
https://stackoverflow.com/questions/46709382/async-load-bitmapimage-in-c-sharp
там смотри в конце реализацию GetNewImageAsync
реализации через MemoryStream просто лишнюю память выделят почем зря.
правда меня смущает подписка
if (bitmap.IsDownloading)
{
bitmap.DownloadCompleted += (s, e) => tcs.SetResult(bitmap);
тут точно не будет состояние гонки? это нужно смотреть на исходники класса
Но это если тебе очень хочется "хочу красивый async/await, а не вот эти ваши события фууу"
>DownloadCompleted) геморно, как и скачивать изображение на диск
вообще не знаю о чем ты
первое = декодер с внутри него стрим и он уже декодировал
второе - стрим (и зачем на диск если в память) и можно декодировать чем угодно, что принимает стрим.
>первое = декодер с внутри него стрим и он уже декодировал
Есть JpegBitmapDecoder
Есть PngBitmapDecoder
Есть еще куча.
Т.е. я должен смотреть что я загружаю и использовать нужный декодер.
Кроме того я сейчас проверил, с некоторыми изображениями проблемы с кодировкой. В моем старом варианте я мог загрузить изображение и отобразить его, но при взятии метаданных выскакивало исключение. Если же я загружаю через декодер, то на его создании выскакивает исключение:
System.IO.FileFormatException: Кодек не может использовать указанный тип идентификатора URI.
Ща еще поковыряю.
Можно просто заюзать BitmapDecoder, но с опцией BitmapCacheOption.Default.
У меня BitmapCacheOption.OnLoad стоял.
>событие переводится в Task
А какой в этом смысл, если можно через цикл авейт ожидать?
ага вижу
BitmapMetadata is not available on BitmapImage.
дичь какая то.
В любом случае ты можешь загрузить в MemoryStream, а потом читать его сколько угодно. Ну да, экономить память не выйдет. Ну или еще там чем может можно получить Image и метаданные за 1 шаг. Ты ж ковыряешь - тебе виднее.
>если можно через цикл авейт ожидать?
А ты когда ждешь курьера постоянно выбегаешь на улицу глянуть не пришел ли курьер или занимаешься своими делами и тупо ждешь звонка? )
это риторический вопрос.
Как такое возможно? Простите за бейсик
Я проверяю bitmapSource на null и экземпляр явно пуст. Но как только я хочу извлечь из него Metadata — выкидывет NullReferenceException.
Причем наплевать, что всё обернуто в TryCatch. Как такое контрить вообще?
>то не так то?
Как этому противостоять? Оно плюет на TryCatch.
Если из интернета пытается загрузить каку-то залупу, типа этого
https://image.civitai.com/xG1nkqKTMzGDvpLrqFT7WA/6046154e-6d32-4500-8772-602edb4a4600/width=96/JustMaier.jpeg
... то приложение падает. Ну можно на старте подписатсья на отлов необрабатываемых исключений, но как еще можно этого избежать?
если ты можешь получить его в UnhandledExceptions значит не плюет, а ты что то делаешь не так.
>если ты можешь получить его в UnhandledExceptions
Откуда мне знать? Я предполагаю.
У меня студия ругается, как будто там нет TryCatch.
А еще я скачал этот файл и попытался открыть с диска и TryCatch отработал как надо. Ошибка возникает только при загрузке с сервера. Метод работает тот же самый, только URL другой.
Короче, я эту залупу с ожидающим циклом убрал.
В этой ситуации как раз срабатывает событие DownloadFailed и все нормально. Естественно я своей проверкой IsDownloading ничего подобного отловить не могу, ну цикл как бы прекращается и пытается обратиться к декодеру у которого полномочия как бы всё.
Залупа эти события.
Вот есть случай, когда не возвращается ни DownloadCompleted, ни DownloadFailed. Просто тишина.
При этом статус IsDownloading = false. Оно не загружается, но и не сообщает о результате.
Событие DownloadProgress вообще бесполезное — пишет только когда достигнет 100%.
Я поставил цикл в DownloadProgress, и там странные числа скачут.
Закачка завершилась — об этом сообщило событие DownloadCompleted, а в цикле значение процесса скачет: 84, 100, 84, 100, 100, 84.
Да, циклом счетчик повышается, нужно это как-то спамить запросом IsDownloading, чтобы завершить цикл. Бред из чисел получается только после завершения загрузки.
>выдрочил синтаксис
>Метанита будет достаточно?
Достаточно для чего? Для изучения синткасиса достаточно, а для избавления от говнокодинга — нет. Если ты чет там выдрочил, то уже должен представлять что к чему.
Да.
Зачем отвечаешь если сам не знаешь?
Явно не для тебя.
Haha benis
ну да, работа с изображениями в WPF жесть и вообще не подразумевает экономии памяти или убрать лишние шаги
но у тебя вообще карма.
Бесполезная пародия на chatgpt, которая не была бы унижена если бы просто промолчала. Но нет, низкая самооценка заставила высрать пост, но ума хватило на уровень ответов мейл-ру. И теперь, спустя 4 часа, униженный продолжает позорится и высерая подобие шутки.
Ты жалок.
То что в шарпе анонимные функции сделаны через одно место, через делегаты, как раз нормальный новичковый вопрос, потому что не сразу понятно как этот костыль натягивается на шаблоны.
Как боевая картинка должна компенсировать то чувство ничтожности у тебя внутри? Ведь анон, ты реально спустя 4 часа не отбомбил я реально уже забыл что тебя обоссал и высрал говно шутку, пытаясь компенсировать свою жалкость?
Когда чел использует синтаксис анонимных функций или лямд, рослин генерирует класс, реализует в нем метод и помещает в этот метод код из вашей анонимной функции или лямды.
Кроме того, компилятор может объявить дополнительные поля в этом автоматически сгенерированном классе. Среди них может оказаться ссылка на this объекта в котором вы написали свою лямду.
Еще среди этих полей оказываются значения переменных из лексического окружения лямды. Таким образом вы своей лямдой просто "захватываете" часть состояния объекта внутри которого пишете код. Читайте, копируете байтики из объекта А в неявно аллоцированный объект Б.
Так что и лямды и анонимные "функции" это простые методы по своей сути, реализованные на автоматически сгенерированном компилятором классе. Никакой магии. Обыкновенное наебалово (без негатива).
И делегаты в свою очередь ничего не знают ни про какие функции или лямды. Они просто хранят в себе пару полей: ссылку на объект и название метода (его индекс кажется). То есть откуда вызвать и что вызвать.
Из этого всего следует неутешительный вывод, что если класть болт на отписку от событий или делегатов, то это приводит к утечкам памяти.
Просто вспомните, что ваша лямда замкнувшая this чего-то большого, все еще хранит ссылку на этот объект. А ссылку на лямду хранит в себе делегат. А ГК, как мы все знаем, не трогает объекты которые числятся достижимыми.
Все вышесказанное касается любителей линка. Ведь предикат это та же самая лямбдочка, которая превращается в полноценный объект с участием оператора new, уборкой мусора и прочими ништяками.
Порекомендуйте книгу или какой-нибудь другой источник (я предпочитаю читать), чтобы улучшить свои знания в C# и ASP.NET
По значению, разумеется. То есть аргументы всегда копируются в фрейм вызываемого метода. Просто иногда значение это ссылка на объект в куче.
Из очевидного прочитай Рихтера "CLR via C#".
На анонимном форуме очень трудно сделать независимые посты. Обоссали вы себя сами, ибо сами срете там где едите, токсики анимешные.
Правильное решение, или есть варианты получше?
И единственный способ обновить информацию о тегах - переустановить программу?
Во первых хочу пощупать авалонию, во вторых как мне кажется это сама по себе интересная задачка. Тут и веб, и база данных, и работа с изображениями, много всего короче.
К слову, я правильно понимаю, что десктопных приложений нет других вариантов для базы данных кроме sqlite ну и litedb, если нужна nosql?
да. только сам реализуй атомарность, целостность, индексы, поиск. ерунда же.
ОП, добавь позязя в шапку:
6. С# для создания нейросетей
— https://docs.microsoft.com/ru-ru/dotnet/machine-learning/
Зависит от задач и что именно тебе от БД требуется.
Вот тебе пример нормальной БД для десктопа
https://github.com/CoreyKaylor/Lightning.NET
Не надо добавлять, а то нейрошизики будут здесь всё время спрашивать про эту либу и ежедневно срать постами про ChatGPT.
Не будут. У них свой загон сделали. Хочу, чтобы анончики вкатывались в нейросетки на шарпе и можно было бы здесь обсуждать всякие технические вопросы.
Может организуешь небольшой ликбез? На сколько я понял из всей этой движухой что, чтобы учить нужно владеть библиотечками, которые нативные на питоне. А весь ml net это обертка над ними.
Нет. Прямая обёртка это: https://github.com/SciSharp/TensorFlow.NET , а ML.NET полноценный фреймворк нейросеток на шарпе. Опционально он может использовать модели TensorFlow.
Десять лет уже профессионально программирую на шарпе, надо и основы перечитать, и с последними фичами подробнее познакомиться.
Кокоса Управление памятью. Но там без фитч.
Вообще, раньше были Албахари Джозеф и Бен со своими справочниками полным и кратким, где все очень хорошо описывалось. Полный - если нужно вдумчиво разобраться, краткий - если просто освежить. По факту это был MSDN на бумаге, человеческим языком. Но они остановились на C#9.
Есть еще книжка "C#10 in a nutshell" от одного Джозефа Албахари. Но я ее не читал, поэтому рекомендовать не буду, но вроде отзывы неплохие.
Албахари, правда без "глубины Рихтера". Собственно после него вряд ли кто-то что-то подобное писал.
> utf8jsonreader
Он же и так в свежих аспах по дефолту. Что бы вернуть ньютон нужно специально пакет подсосать
1) Электронная очередь. Учитывая все ньюансы. От выдачи номера, до распределения к кому из операторов клиент попадет на обработку, с учетом того, что задачи у посетителей могут быть разные и что у операторов тоже разная области ответственности. И все должно идти ровно и без долгих простоев. Если делать по честному от и до, то сможешь проработать дохуя ньюансов, о которых не стыдно будет рассказать.
2) Роутинг электронных сообщений. Это когда в какой-нибудь каталог на диске или сетевую шару постоянным потокам сыпятся xml-ки в охуительных объемах и их нужно оперативно оттуда разбирать, обрабатывать согласно бизнес-процессу и передавать дальше, попутно сохраняя нужную инфу в БД и выкидывая нужные ссобщения. Тут тоже дохуя приколов от многопотока, до разбора ЭС и т.д. И как бы тупо это не звучало, но это до сих пор стандарт и куча B2B взаимодействия происходит в таком виде (да-да никаких очередей вам сучечки). Поэтому нужно не просто уметь делать такие вещи, а делать их быстро и эффективно. Вплоть до того, что тебе тупо могут дать xml-ну на несколько тысяч строк и без всяких спеков и xsd схем и ты должен уметь ее разобрать и встроить это в существующий БП.
ну я для себя ocrку делал из гугл линзы, там все просто было, кроме парсинга жсона, для этого пришлось учиться, как работать через ридер кастомно, это не asp проект был, но было весело, а еще и штука полезная
О, вот с xml я еще не работал серьезно.
Можно по 2-му примеру побольше инфы? А то я понятия не имею, какие там xml документы, какая бизнес логика
Ну это очевидно, ienumerable это отложенное вычисление и пока его используешь он будет содержать в себе все захваченные обьекты, но после использования он будет собран в последствии. Например создал лист и вернул из метода, IEnumerable вместе со всеми предикатами будет собран потому что на него никто не ссылается. А про подписки это баян, и решается простым майндсетом "убирай за собой, получил idisposable - вызови диспоуз, когда закончил работу, подписался - отпишись".
Но ты не написал про главное, захват execution context асинками, вот это реально дьявольская вещь. Потому что про те же замыкания тебе учтиво скажут анализаторы кода, а вот про эту хуету никто, насколько я знаю
SomeApp.Services.SomeService.SomeMethod(int someName) +150
Что это за +150? Где именно ошибка? Это типа позиция курсора в тексте метода? 150-й символ? А откуда начинать считать? А комментарии считаются? А пустые строки?
Есть еще флоу-кодинг или как-то так, но я не знаю как это гуглить. Суть в том, что следующая строка является логическим продолжением предыдущей и в бейсике добавляется через нижний прочерк "_"
1. бери и не слушай студию (это даже не компилер), тебя же не бьют за непослушание
2. Это не бейсик
1. глаза мозолит
2. я как раз этот подход стырил с одного тутора про шарп, но забыл как он делался и как назывался.
>чтобы она не предлагала
Чё ты как тряпка. Не будь каблуком, не слушай свою IDE. Поступай всегда по совести. АУФ.
>>733866
>Есть еще флоу-кодинг или как-то так, но я не знаю как это гуглить.
Экстеншены (они же методы расширения) укажут тебе путь. Это база.
Когда поймешь как они работаеют, гугли fluent синтаксис и примеры его применения. Самый банальный из которых LINQ.
Дан код
{ govnocode }
Что выведется в консоль?
Буду благодарен, если подкинете чего-нибудь подобного.
Хочу покормить гопоту дерьмой
Совсем зелёный что-ли?
>Как дать по морде студии, чтобы она не предлагала "упростить" одну строчку из четырех, ставя бессмысленные скобки и уменьшая читабельность?.
Потому что ты не понимаешь, что инициализатор, который позволяет сразу залить значения в поля/свойства создаваемого экземпляра. Если ты иницилазируешь не много полей или вообще одно как в твоём случае, то можешь оставлять все на одной строчке.
Далее, не пиши имена методов с маленькой буквы джавадебил. И уж тем более не используй снейк_кейс шиз
Имена обработчиков событий должны начинаться с префикса "On"
Используй var или короткое объявление конструктора
В итоге твой код должен выглядеть так:
DispatcherTimer foldingUpdateTimer = new() { Interval = TimeSpan.FromSeconds(2) };
foldingUpdateTimer.Tick += OnFoldingUpdateTimerTick;
>Далее, не пиши имена методов с маленькой буквы джавадебил
Это не я, это чужой соурс. Мне нужен бы визуализатор кода с подсветкой синтаксиса, а методами RichTectBox WPF это сделать невозможно. Наткнулся на проект AvalonEdit, вот ковыряю палкой.
>Далее, не пиши имена методов с маленькой буквы джавадебил
А почему студия не научилась делать это сама, кстати?
Я думал "On" нужно приписывать только к методам, которые вызывают события.
Чёт я вообще не понял прикола ставить его. Визуально выделить? Ну такое.
А больше ни на что и не влияет он
Генерит-то она так, как называется имя твоего контрола, если ты про автоматическую подписку.
>Чёт я вообще не понял прикола ставить его. Визуально выделить?
В бейсике нет точки с запятой, обозначающей конец строки, поэтому любой перевод каретки означает этот самый конец.
И вот случаи как пикрил выше, когда новая строка является продолжением предыдущей, нужно как-то идентифицировать.
Это своего рода инвертированная точка с запятой. Что считаю гораздо удобнее т.к. чисто статистически визуальная строка совпадает с логической гораздо чаще, чем наоборот.
Каждый дрочит как хочет, главное не тащи в проекты где так не делают (нигде лично не видел такого извращения)
>Генерит-то она так, как называется имя твоего контрола, если ты про автоматическую подписку.
может быть. хотя я не уверен что там имя.
но даже это тупо. Сделали бы OnmycontlNameChanged
Хватит хуйней страдать. Это .Net тред.
Влез, блять, неделю назад и пытается строить из себя вахтера. Здесь бейсик обсуждали еще до твоего существования ИТТ.
"On" я видел только в методах, вызывающих событие, типа OnPropertyChange. Возможно иначе будет путаница с обработчиками событий.
Я догадывался.
Это мой. Но я далеко не считаю что C# единственый язык для .net. Есть тот же F#, да даже на чистом IL можно вполне можно что-то делать.
Вот только VB - практически мертв. И размышления "вот в VB была пиздатая фича, не то что..." крайне неконструктивны. До шарпа был делфи, до него паскаль и в них тоже было много пиздатых штук. Но они ушли и остался шарп.
Бейсик не зря в свое время назвали языком плодящим калек. Он сильно ломает мышление и это мешает принятию нового. Лучшим выходом в твоем случае было бы забыть опыт на VB и попытаться осваивать новый язык (не обязательно шарп) без оглядок на него.
Ага братиш, тока в асп 300 вакансий на всю РФ, а в спринге 1.5к, а качество сейм
И? Это говорит только о том, что на джаве больше легаси, что не удивительно ведь она была намного популярнее старого вендорлокнутого дотнета.
Дельфи никуда не ушел, живет себе прекрасно как всегда, а то что быдло из него ушло, так это только в плюс. Теперь шарпоговно стало помойкой для быдла, поздравляю.
Про асинк (tpl) написал, потому что это самое распространённое, т.к напрямую с тредами, скедулерами и т.п мало кто работает. Может видел в bcl есть ряд методов с префиксом Unsafe? Например ThreadPool.UnsafeQueueUserWorkItem или UnsafeRegister на CancellationToken, это как раз семейство методов, которые сапресят контекст и не передают его дальше. А execution context это например AsyncLocal. Поэтому когда из http реквеста дергаешь какой нибудь синглтон на поработать подумой что в него может попасть
>Вот только VB - практически мертв.
По воле самой майкрософт, которая перестала его поддерживать.
>Он сильно ломает мышление
Чем же он ламоет? Сретеотип из 90х, когда был учебынй бейсик, а сейчас он на 90% это шарп, и многие штуки за последние годы перетекли в шарп внезапно из бейсика.
Точка с запятой это далеко не новое, а старое, причем старое еще на момент возникновения шарпа. Но МС важнее влиться в тусовочку "серьезных языков", чем не заставлять юзеров заниматься бесполезной расстановкой разделяющих знаков, которые важны только в 10% случаев.
Это статистика, против которой идти — долбоебизм и сектантство. Часто ты пишешь несколько логических строк в одной? Посчитай сам.
>чем не заставлять юзеров заниматься бесполезной расстановкой разделяющих знаков, которые важны только в 10% случаев.
Ну-ну. Вот так и появился пайтон с одним из самых ебанутых решений в дизайне языков программирования. "А давайте отступы сделаем частью языка, а то нам скобки расставлять лень."
>>734913
>Это статистика, против которой идти — долбоебизм и сектантство. Часто ты пишешь несколько логических строк в одной? Посчитай сам.
Ты современный промышленный код на шарпе то видел? Там полно многострочных конструкций. И гораздо лучше один раз поставить точку с запятой в конце нескольких строк, чем в каждой расставлять символы подчеркивания.
А зачем? Типа петухон непривычен или деплоить модели хочется в шарпе? Или хочется по быстрому какую-нибудь хуиту обучить и сразу встроить в свое уютное приложение?
Ладно, я сам ответил на свой вопрос.
На самом деле проблему можно решить каким нибудь расширением, которое ставит точку с запятой по нажатию Enter или Shift + Enter (в зависимости от стиля работы). Бейсик, собственно это и делает.
А пайтонисты просто долбоебы и решают то, что и так решено автодополнением. Другое дело джава скриптизеры, у которых нет четкой позиции "никогда не ставим разделитель", либо "всегда ставим разделитель". Вместо этого "хош ставь, а хош не ставь" и получается что:
x{
...
}
делает не тоже самое, что:
x
{
...
}
Там шарфик догнал джаву по использованию в индустрии
https://survey.stackoverflow.co/2023/#most-popular-technologies-language-prof
Как же мощно ебка идет, а ведь с выхода .net core даже 10 лет не прошло
Наконец-то можно перекатываться.
Майки ебурят, кайф
Никто разве не может предложить как ускорить вызов тянущихся с рефлексии методов? Майки же как-то это делают.
Ладно. Пойду исходники смотреть.
Тейк был в том, что лямбды для предикатов это нагрузка на ГЦ. Лямбды для обработки событий это легкий способ получить утечку.
Понятное дело, что механизмы дотнета это учитывают. Шарписту выстрелить себе в ногу трудно. Все эти монструозные системы управляющие памятью за нас для того и нужны, чтобы васяны на заводах голову себе не забивали хуйней и писали бизнес код, а не кучу вилкой чистили.
Однако одно дело наслушаться инфлюенсеров, и получить определенный майндсет, а другое дело понять самому. Говорят, что если можешь объяснить другим, значит понимаешь сам.
Про многопоток и асинхронщину детерминистично рассказать не смогу, поэтому пробовать пока не стану.
Если хочешь этим заниматься, то конечно. Посмотришь на тестовые задания, разберешься что от тебя хотят.
Откликаться то можешь, но смысла в этом будет мало пока ты его не выучишь. Только если попытаться на тоненького проскочить.
Сейчас под джуном на веб-разработку подразумевается, что ты можешь с нуля собрать хотя бы простенький веб-сервис на Asp.Net с использованием БД, какой-нибудь ORM и с хоть каким-то представлением об архитектуре (хотя бы тупо по слоям уметь разбить). Ты просто посыпешься на первых же вопросах про конвеер запросов, фильтры, лайфтаймы в DI и т.д.
>Я выставил резюме на хх как джун C# разраб, но за 2 недели мне так никто и не написал,
А ты резюме покажи и анон скажет тебе чего ты стоишь и откликнется ли на него хоть кто-нибудь вообще.
я знаю про захват контекста
только асинк тут причем?
захват таймером - беда ибо таймер может существовать годами даже.
захват ThreadPool так себе проблема.
а асинкам контекст нужен хотя бы для того же AsyncLocal
Годится только для каких-нибудь мелкоскриптов или небольших приожений, когда нужно поэкспериментировать по быстрому.
Более-менее комплексный сервис эта штука не вытягивает.
Ну и на самом деле штука вполне оцененная. Т.к. когда майки попытались её по тихому выпилить, комьюнити нехило так взбугуртнуло и её тут же назад вернули.
что именно или ты просто экстраполируешь.
По сути для скриптинга и надо, визуальное что подергать, гейминг. Но думаю в юнити нехера не работает))
там вроде хотели сделать эксклюзивно для вижлы, поэтому бугурт вроде больше был за свободу, чем за фичу. Хотя хз, по мне это прям серебряная пуля вышла. Я писал что-то типа веб-тестов или даже полу-бота, надо было в глубоком вложение что-то подергать, а так бы приходилось все 100500 шагов каждый раз занова исполнят и перезапускать (ну не только вход, а еще тучу вещей). Тут даже шустрые динамические языки не помогли бы ибо тоже перезапуск нужен.
40к джун - это ты где видел такую зп? Просто интересно
80к - это уровень trainee, когда у тебя вообще 0 опыта и 0 скилов.
Мелкие в него уже научились? Как-то находил какую-то залупу в винформах, там надо было реализовать ебанутый интерфейс из 30 методов.
в компиляции
Или может это ок, просто мне не оч нравится.
Мб через метод расширения базового класса ебануть?
К примеру в проекте на пикрил 1 отсутствует платформа
Microsoft.Windows.Desktop.App.Wpf
А вот в проекте на пикрил 2 есть, потому что оно является библиотекой пользовательских элементов
Как это добавить в первый проект?
Мне понадобилось заюзать System.Diagnostics.PresentationTraceSources
И вдруг оказалось, что в System.Diagnostics такого класса нет (хотя должен быть). Я догадываюсь, что это из-за того, что мой проект не является библиотекой пользовательских элементов или WPF.
Но вообще удивило, что библиотека с одними и теми же неймспейсами и классами являются разными по содержанию. Я втречал отсутствие библиотеки, но чтобы такое.
Норм. Только
1) Название метода (AdaptTo) ебанутое. Если это у тебя маппинг, то и называй MapTo
2) Проверок на null нет.
Гугли DDD
>где мы должны создавать классы с данными
А сервис это не класс с данными?
>Наследование таким образом получается отдельно с данными и отдельно с поведением, что странно
Когда у тебя сложная структура данных и поведения, то поседеешь, пока все это заменишь или адаптируешь под другую платформу или под другой формат данных. Поэтому объект сепарируется на несколько других объектов, которые в зависимости от условий можно с легкостью заменить.
На какие элементы сепарируется? Ну зависит от того, что в перспективе может измениться: операционная система, браузер.
Для примера у тебя класс срет месседжбоксами, а тебе его надо протестировать. Ты будешь вручную закрывать всплывающие окна во время тестов? А часто тесты проводятся на машинах, к которым даже не подключен дисплей. Может оно и прикольно когда месседжбокс принадлежит какому-то окну, но в сложных приложениях это становится совершенно не прикольным.
Поэтому создают отдельный сервис конкретно для месседжбоксов, к которому классы обращаются. И когда нужно протестировать эти классы, то сервис месседжбоксов подменяют на пустышку, которая не выводит ничего. При этом сам сервис удовлетворяет ООП, почему нет?
И вариаций тысячи. Ты можешь один сервис логирования заменить на дрогой без изменения всего приложения.
У меня весь код в ссаных (буквально желтого цвета) подчеркиваниях.
Пиздец бля. Только отошел от точек с запятой и тут это говно. Какой же мусор, пиздец.
Как же у меня горит. Почему я не могу передать стринг как обжект,
Братан, купи (скачай) какой-нибудь норм учебник по последним версиям дотнета - там популярно объясняется, что такое nullable и почему за использование object наказывают раскаленной кочергой. Или просто выруби nullable в csproj, false там напиши, и ручками везде проверяй на null.
>и почему за использование object наказывают раскаленной кочергой
Я знаю почему, но в данном случае метод записи в реестр SetValue требует object.
Возможные аллокации. Рекомендую ознакомиться с BenchmarkDotNet
https://youtu.be/8Slzd1G7f9Q
Но на самом деле, единственное место где мне это потребовалось учитывать — это при отрисовке графики. Ну еще один челик мобилочками занимался и эму это тоже было важно.
Шиз, если даже анализатор умирает от кринжа и включает тревогу - то ты туго срешь.
Будь я тимлидом у тебя, переключил бы nullable ворнинги на ошибки, чтобы ты, обезьяна, не смогла собрать проект, пока не уберешь на собой
Проверь свое value с помощью string.IsNullOrWhiteSpace() и кумпилятор узбогоится.
И все нулове детерминируй с помощью проверок, инициализации в конструкторе =new() или =null!.
Ну и разумеется этот совет не касается переменных которые могут иметь null. Такие как раз стоит помечать как налабле и проводить проверки везде где кумпилятор тебе советует.
>И все нулове детерминируй с помощью проверок, инициализации в конструкторе =new() или =null!.
Это как? Сейчас мне нужно писать что-то типа пикрила. А можно как-то компактнее все делать?
Можно, конечно. Но зачем? Другими словами это уже вкусовщина/конвенции/выебоны. Главное чтобы работало и не ломалось.
Встроенный налл гуард про последнее.
Фигурные скобочки можешь убрать.
В елсе можешь исключение кинуть, в котором все для будущего себя описать, что и почему пошло по пизде - в твоем случае, вэлью пустой пришел.
Эксепшен этот можешь перехватить выше и попытаться получить вэлью еще раз. Если опять не получилось кидай уже там ексепшен и сообщай через него почему не все сломалось.
if (vr == null) throw new NullReferenceException();
// дальнейшее использование vr без вопросиков.
Допустим в методе я десяток раз использую экземпляр класса, и мне что - 10 раз проверять его на null перед тем как обратиться к его свойству?
Есть какие-то способы один раз проверить и дальше не проверять? Выйти из метода я не могу, есть другие действия, которые мне нужно выполнить.
Как можно заставить её запоминать слова и чтобы это сохранялось в следующих проектах?
Ну давай, поясни мне - тупому.
В первой строчке я ОЧЕВИДНО создал экземпляр.
Какого хуя студия требует, чтобы я его проверял на null?
Она требует проверять не его, а Directory. Ты бы хоть мышку навел да подсказку прочел.
Ты прежде чем в кодинг лезть, читать научись. Тебе компилятор прямым текстом пишет CS8602 и то, что " 'Directory' may benull here"
Ставь восклицательный знак после Directiry если уверен или ебашь проверку на null;
>Чел, не еби себе мозг. Тебе же сказали выключи в свойствах проекта <Nullable>disable</Nullable> так все делают.
>так все делают.
Утенок, может тебе в жаватред? Там из-за таких как ты аж целый новый язык делать пришлось.
Ты к чему эту хуету высрал, вахтер хуев? Ебать вековая мудрость. А попу мыть надо? Пиздец.
Напиши один раз HttpUtils.
Почему второе не всегда работает, когда речь идет о переменных?
> Разве не очевидно,что все классы могут быть Nullable?
могут, но имеют ли право?
в этом и проблема "ошибки на миллиард долларов", что не всегда имеют право.
В этом и суть анализа чтобы ты ЯВНО указал что "этим вот можно null"
ну ты выключи в настройках и по старинке лови NRE
конченная капча
Мобилки, мкшоб.
Сколько платят?
За что посадили?
леща бы дал
найс обертка из-за которой вместо одного дженерик параметра надо писать два, чтобы что? убедиться что мапинг вызывается для каких-то Base типов? нахуя?
убери 1 дженерик и сделай
ToZalupa<TZaulpa>(this BaseShit shit) where TZaulpa : tvoikalisjopy
>Пилю движок для симуляций на последнем шарпе, сидя в НИИ.
Анончик из НИИ, серьезно озвучь з.п. хотя бы плюс\минус. Очень охота знать сколько сейчас можно получать в науке. Ну и какие есть перспективы роста и сколько приходится перерабатывать за текущий прайс?
Просто сам несколько лет назад продал душу бизнесу и ушел из авиа-космоса. Интересно имел бы сейчас такой же выхлоп от своих трудов.
эээх. а ведь есть в языке такая няшофича как explicit/implicit operator. Но нет - маптукают явно, фу.
Всегда тяну flurl, брат жив
> Вот так и появился пайтон с одним из самых ебанутых решений в дизайне языков
Ну а в рубях например нет ни проблемы отступов, ни скобок, ни точек с запятой. Кроме тех случаев, где они объективно (плюс-минус) нужны.
В среднем 150к, я типа мидл в местной кастовой системе. Но у нас не совсем бюджетная богодельня, мы на коммерческих заказах. Ну и прям наукой у нас занимаются только учёные в говне моченые, а я прогер в основном
В догонку
>сколько приходится перерабатывать за текущий прайс?
Нискока, но я сам иногда подпушиваю на выходных по удалёнке, потому шо в кайф
Как я понял, основная суть DI в уменьшении зависимостей. Но вот проблема, в туторах обычно пример строится в пределах одного проекта и как бы все там хорошо. Но как только я пытаюсь соорудить что-то вроде prism, когда у меня каждый сервис — это отдельный проект (пикрил).
Тут начинаются вопросы, начну с первого. Каждый сервис должен реализовать интерфейс, а где этот интерфейс нужно хранить в моем случае? В каком месте?
Вариант 1. Интерфейс, представляющий сервис мы храним в пространстве проекта, в котором находится этот сервис.
Проблема: другим сервисам придется линковать проект, чтобы получить этот интерфейс, что по сути создаст зависимость от которой мы все так бежали. Даже если взять известные логгеры, то интерфейс ILogger у каждого свой и вот это вот хваленое "с DI мы можем один сервис с легкостью заменить другим" не работает т.к. тот же майкрософтовский ILogger это не тот ILogger что у Serilog — у них даже методы по разному называются.
Вариант 2. Все интерфейсы мы скидываем в отдельный общий проект. Зависимости от конкретных модулей как бы нет, но все равно есть зависимость от какого-то модуля, который в итоге превратится в помойку.
Вариант 3. Все сервисы храним в проекте хоста сервисов. Но тогда мы создадим зацикленность т.е. ServiceA нужно линковать SreviceHosting для получения интерфейса, а SreviceHosting нужно линковать ServiceA для получения экземпляра сервиса.
>В каком месте?
Почти всегда 2 и немножко 1
Причем по 2-му варианту у тебя даже может быть несколько таких подпроектов. Например один общий CommonContracts который шарится на все сервисы и в самих сервисах собственный подпроект Contracts.
Вариант 1 лучше делать когда реализация со своим интерфейсом представляет какой-то отдельный подключаемый модуль, который можно выкинуть в любой момент.
Вариант 3 - ебань какая-то.
Сервер может поддерживать фичи которые юзает браузер но не юзаешь ты в коде
Я бы так сделал.
Мужик, я и сам поверхностно раньше знал IoC/DI в C#. Мне на одном собесе порекомендовали книгу. Я её купил на торрентах, прочитал и гуднайс стал понимать. Хорошая в целом книга.
Симан, Дерсен: Внедрение зависимостей на платформе .NET
Подробнее: https://www.labirint.ru/books/789121/
https://www.labirint.ru/books/789121/
> Каждый сервис должен реализовать интерфейс, а где этот интерфейс нужно хранить в моем случае? В каком месте?
CompanyName.ServiceName.Abstractions
Типичная структура примерно такая.
При чем правда DI пока не понял.
Да. Там еще каждому сервису и солюшину целиком по папочке Core надо добавить. В ней - в рамках солюшина - то что общее-общее для всех. В папочках сервиса - то что в рамках сервиса - общее.
>Тогда в чем смысл DI, если зависимость по сути осталась?
Ответ был на вопрос "где хранить интерфейсы"
>Что мешает напрмую передать нитерфейс при инициализации?
Передавать кому? Инициализации чего?
Просто проект в котором у тебя методы расширения, для того чтобы запихнуть в DI.
Сорт оф:
static IServiceCollection AddServiceA(this IServiceCollection services);
static IMyApplicationBuilder UseServiceA(this IMyApplicationBuilder app, ServiceASettings settings = null);
В принципе - не обязательно бы было выделять сборку под это дело отдельно, но так часто удобнее.
Разверну мысль почему удобно.
Вот я, допустим, при разработке сервиса - хочу тесты погонять. Так - мой проект с тестами - может дефолтное окружение получить и начать гонять, а не заниматься настройкой этого дефолтного окружения.
Другой пример. Я хочу чтобы в моем сервисе - не было лишних зависимостей, ну, не нравится мне что мой сервис тянет какие-то Microsoft.Extensions.ЧтоТоТам. Хочу чтобы мой сервис - был чист от этого добра и, если мне надо - мог бы переехать с майковского DI на какой-то другой. Собственно - так я могу ограничить себя и тянуть в сам сервис только то что надо ему для работы, а вот эти вот DI, логгеры и прочее - пусть в отдельной сборкe хранятся.
Опять же - так делать не обязательно.
>Передавать кому? Инициализации чего?
Сервис хост при инициализации сервиса передает ему экземпляры других запрашиваемых сервисов.
Зачем выдумывать DI, если можно хранить условную глобальную коллекцию сервисов и пусть сервисы сами берут оттуда нужное.
Возможно из-за того, что экземпляр сервиса создается только по запросу. Ну наверно сервис хост это просто такой удобный менеджер, который делает все сам.
>Зачем выдумывать DI, если можно хранить условную глобальную коллекцию сервисов и пусть сервисы сами берут оттуда нужное.
Вопрос из серии "Зачем нужен GC, ведь можно самому ебаться с указателями и менеджментом памяти"
>>739978
>Хочу чтобы мой сервис - был чист от этого добра и, если мне надо - мог бы переехать с майковского DI на какой-то другой.
И как часто тебе приходится DI менять на готовом проекте и по какой причине?
> И как часто
Не то чтобы часто. Последний раз - слезали с нинжекта на этот вот майковский.
> по какой причине?
После появления майковского DI - тот же нинжект - считай сдох.
я тоже слезал. так то майковский самый убогий по фичам, но сидеть на 2х стульях надоело и слез с SimpleInjector на майковскую какашку.
>>740144
Ну так я и о чем. Я о нинжекте последний раз слышал года 3...4 назад. Сейчас по моему кроме автофака и майковского уже ничего не осталось актуального. И фич второго хватает в 95% случаев.
По факту смена DI это событие уровня "перелезаем на новую версю LTS". Там либо все проходит гладко и нормально, либо есть breacking changes, которые ты никакими абстракциями и слабым связыванием не учтешь и придется по любому, что-то курочить. Поэтому в какой-то момент нужно остановится и сказать себе, что налайткожено достаточно, пора и поработать.
По задачам.
Нефтегаз?
Это копия, сохраненная 28 июля 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.