Это копия, сохраненная 22 апреля 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Литература вторым постом
1. Ресурсы:
— https://dotnet.microsoft.com/learn
— https://docs.microsoft.com/ru-ru/dotnet/csharp/
— https://metanit.com/
2. Онлайн-компиляторы:
— https://ideone.com/
— https://dotnetfiddle.net/
3. WinForms или WPF?
Зависит от задачи. Для небольших проектов, скорее всего, будет достаточно винформочек. В случае, если разрабатываемое приложение достаточно серьёзное, то возможно его стоит писать с использованием WPF. WPF очень хорошо работает с паттерном MVVM ( https://ru.wikipedia.org/wiki/Model-View-ViewModel ), и позволяет пилить очень кастомизированные интерфейсы с помощью XAML, что в случае с WinForms делать намного сложнее.
4. Мне тут знакомый_нейм сказал, что C# умирает, это правда? Может не стоит его учить?
Неправда. C# активно развивается, недавно вышел .NET 5 и С# 9.0. Дотнет стал полностью опенсорсным и кроссплатформенным. В том же энтерпрайзе он очень даже востребован.
5. Какую IDE выбрать?
Для Windows самым очевидным вариантом будет Visual Studio ( https://visualstudio.microsoft.com/ru/downloads/ ). Бесплатной Community-версии более, чем достаточно для большинства задач. Также есть версия для macOS.
Кроссплатформенный полуредактор/полуIDE VS Code ( https://code.visualstudio.com/ ).
Кроссплатформенный IDE Rider ( https://www.jetbrains.com/rider/ ).
Также существуют C#-плагины для Atom и Sublime Text, но функциональность там достаточно сильно урезана.
6. С# для мобильной разработки
https://dotnet.microsoft.com/apps/xamarin
Новые возможности C# 9.0: https://devblogs.microsoft.com/dotnet/c-9-0-on-the-record/
Текст шапки: https://pastebin.com/pbK8CGqw
— The C# Player's Guide, третье издание (RB Whitaker) — отличная книга для ньюфагов, всё расписывается довольно подробно, очень много примеров кода.
— C# 9 and .NET 5 – Modern Cross-Platform Development (Mark Price) — подойдёт для ознакомления с платформой. Затрагивает все технологии, имеющиеся в .NET (веб, мобильная разработка, машинное обучение), ни во что не углубляясь.
— C# 8.0 in a Nutshell (Joseph Albahari и Eric Johannsen) — огромнейший справочник, over 1000 страниц, покрывает почти все области, начиная с синтаксиса и базовых типов и заканчивая интеропом и рослином.
— C# 8.0 Pocket Reference (Joseph Albahari и Ben Albahari) — просто выжимка из книги сверху, можно всегда держать рукой.
— Pro C# 8 with .NET Core 3 (Andrew Troelsen) — 1600-страничный учебник по шарпу, покрывает BCL, WPF и ASP.NET, небо и даже аллаха.
8. Более хардкорный материал
— CLR via C# (Jeffrey Richter) — это классика, это знать надо.
— C# in Depth (Jon Skeet) — написана в виде истории версий C#, начиная с C#1.0. Описываются возможности, которые были добавлены в определенной версии и далее достаточно хардкорно и подробно эти возможности расписываются.
— Writing High Performance .NET Code (Ben Watson) — отличная книга. Фокусируется на методах оптимизации приложений, профилировании. Крутейшая и достаточно детальная глава по GC. Рассматриваются достаточно известные проблемы вроде "for vs foreach", "класс vs структура", кастинг, боксинг, перфоманс регулярок, коллекций, исключений. Короче всё, что нужно, чтобы вам перезвонили.
9. Литература по WPF
— Pro WPF 4.5 in C# (Matthew MacDonald)
— Windows Presentation Foundation 4.5 Cookbook (Pavel Yosifovich)
10. Литература по ASP.NET
— Pro ASP.NET Core 3 (Adam Freeman)
— Professional ASP.NET MVC 5 (Jon Galloway, Brad Wilson, K. Scott Allen, David Matson)
11. Литература по асинхронности и параллелизму
— Concurrency in C# Cookbook (Stephen Cleary) — книга, написанная в формате "проблема - решение". Кроме базовых вещей, вроде асинков и параллелизма рассматриваются TPL Dataflows, Rx (реактивные расширения), тестирование всего этого асинхронного добра, ну и работа этого всего на более низких уровнях абстракции.
— Multithreading with C# Cookbook (Eugene Agafonov) — в основном ничего интересного, но есть довольна неплохая глава про синхронизацию, пусть и не слишком детальная.
— Pro Asynchronous Programming with .NET (Richard Blewett, Andrew Clymer) — опять же, интересного немного, но неплохие главы про асинхронность + UI и анализ дампов памяти в windbg.
12. Литература по мобильной разработке
— Creating Mobile Apps with Xamarin.Forms (Charles Petzold)
— Xamarin.Forms Projects (Johan Karlsson, Daniel Hindrikes)
— Mastering Xamarin.Forms (Ed Snider)
13. Литература по машинному обучению
— Introduction to Neural Networks for C# (Jeff Heaton) — изучение нейронных сетей с примерами кода на шарпе. Под конец пишем программу для распознавания символов и нейроботов.
— Machine Learning Using C# Succinctly (James D. McCaffrey) — довольная коротенькая книга на тему машинного обучения с примерами кода на C#. Ничего особого: k-средние, классификация, наивный байес, но с кодом, который всегда можно поразбирать, если что неясно.
14. Разработка игр
Unity-тред в /gd/
15. Но я не знаю английский, как я буду это все читать?
На некоторые из перечисленных книг есть переводы, которые можно найти на том же рутрекере, однако зачастую эти переводы неактуальны и/или содержат неточности. Кроме того, переводы обычно пилятся только для нескольких самых популярных книг, более-менее серьёзный материал не переводят. Всегда можно сесть со словарем и понемногу читать, переводя непонятные фрагменты. Это очень полезно, так как в любом случае в программировании без знания английского делать нечего. Если очень хочется, то гуглить по запросам: "C# 7.0. Справочник. Полное описание языка", "C# для профессионалов. Тонкости программирования", "Программирование на платформе Microsoft .NET Framework 4.5 на языке C#".
16. Что еще нужно знать, чтобы взяли работать за еду?
— Базы данных — подойдет любая книга по MSSQL/MySQL/PostgreSQL. DDL, DML. Джойны, индексы, нормализация. В контексте шарпа еще ORM: Entity Framework, Dapper.
— Системы контроля версий — обычно гита достаточно: add/commit/push, merge, rebase, checkout, remote, diff, разрешение конфликтов.
— GitHub — issues, пулл-реквесты, теги, релизы, Actions.
— Алгоритмы — сортировка, поиск, оценка сложности алгоритмов, рекурсия, алгоритмы на строках.
— Структуры данных — связанные списки, деревья (бинарные, красно-чёрные, b-деревья), хеш-таблицы, графы.
— Если идти в веб — HTML, CSS, JavaScript, веб-сокеты, REST, JS-фреймворки (Angular, React, Vue).
— Паттерны проектирования, стиль кода, архитектура приложения, внедрение зависимостей, MVVM (если хочется в WPF), SOLID.
17. Я не умею читать, что посмотреть?
— C# Fundamentals: Development for Absolute Beginners — https://goo.gl/meyyxO
— Набор курсов по C# от O'Reilly Media (28 часов, на английском) — http://rutracker.org/forum/viewtopic.php?t=5082978
— Канал по C# IAmTimCorey (на английском) — https://www.youtube.com/user/IAmTimCorey
— The C# Player's Guide, третье издание (RB Whitaker) — отличная книга для ньюфагов, всё расписывается довольно подробно, очень много примеров кода.
— C# 9 and .NET 5 – Modern Cross-Platform Development (Mark Price) — подойдёт для ознакомления с платформой. Затрагивает все технологии, имеющиеся в .NET (веб, мобильная разработка, машинное обучение), ни во что не углубляясь.
— C# 8.0 in a Nutshell (Joseph Albahari и Eric Johannsen) — огромнейший справочник, over 1000 страниц, покрывает почти все области, начиная с синтаксиса и базовых типов и заканчивая интеропом и рослином.
— C# 8.0 Pocket Reference (Joseph Albahari и Ben Albahari) — просто выжимка из книги сверху, можно всегда держать рукой.
— Pro C# 8 with .NET Core 3 (Andrew Troelsen) — 1600-страничный учебник по шарпу, покрывает BCL, WPF и ASP.NET, небо и даже аллаха.
8. Более хардкорный материал
— CLR via C# (Jeffrey Richter) — это классика, это знать надо.
— C# in Depth (Jon Skeet) — написана в виде истории версий C#, начиная с C#1.0. Описываются возможности, которые были добавлены в определенной версии и далее достаточно хардкорно и подробно эти возможности расписываются.
— Writing High Performance .NET Code (Ben Watson) — отличная книга. Фокусируется на методах оптимизации приложений, профилировании. Крутейшая и достаточно детальная глава по GC. Рассматриваются достаточно известные проблемы вроде "for vs foreach", "класс vs структура", кастинг, боксинг, перфоманс регулярок, коллекций, исключений. Короче всё, что нужно, чтобы вам перезвонили.
9. Литература по WPF
— Pro WPF 4.5 in C# (Matthew MacDonald)
— Windows Presentation Foundation 4.5 Cookbook (Pavel Yosifovich)
10. Литература по ASP.NET
— Pro ASP.NET Core 3 (Adam Freeman)
— Professional ASP.NET MVC 5 (Jon Galloway, Brad Wilson, K. Scott Allen, David Matson)
11. Литература по асинхронности и параллелизму
— Concurrency in C# Cookbook (Stephen Cleary) — книга, написанная в формате "проблема - решение". Кроме базовых вещей, вроде асинков и параллелизма рассматриваются TPL Dataflows, Rx (реактивные расширения), тестирование всего этого асинхронного добра, ну и работа этого всего на более низких уровнях абстракции.
— Multithreading with C# Cookbook (Eugene Agafonov) — в основном ничего интересного, но есть довольна неплохая глава про синхронизацию, пусть и не слишком детальная.
— Pro Asynchronous Programming with .NET (Richard Blewett, Andrew Clymer) — опять же, интересного немного, но неплохие главы про асинхронность + UI и анализ дампов памяти в windbg.
12. Литература по мобильной разработке
— Creating Mobile Apps with Xamarin.Forms (Charles Petzold)
— Xamarin.Forms Projects (Johan Karlsson, Daniel Hindrikes)
— Mastering Xamarin.Forms (Ed Snider)
13. Литература по машинному обучению
— Introduction to Neural Networks for C# (Jeff Heaton) — изучение нейронных сетей с примерами кода на шарпе. Под конец пишем программу для распознавания символов и нейроботов.
— Machine Learning Using C# Succinctly (James D. McCaffrey) — довольная коротенькая книга на тему машинного обучения с примерами кода на C#. Ничего особого: k-средние, классификация, наивный байес, но с кодом, который всегда можно поразбирать, если что неясно.
14. Разработка игр
Unity-тред в /gd/
15. Но я не знаю английский, как я буду это все читать?
На некоторые из перечисленных книг есть переводы, которые можно найти на том же рутрекере, однако зачастую эти переводы неактуальны и/или содержат неточности. Кроме того, переводы обычно пилятся только для нескольких самых популярных книг, более-менее серьёзный материал не переводят. Всегда можно сесть со словарем и понемногу читать, переводя непонятные фрагменты. Это очень полезно, так как в любом случае в программировании без знания английского делать нечего. Если очень хочется, то гуглить по запросам: "C# 7.0. Справочник. Полное описание языка", "C# для профессионалов. Тонкости программирования", "Программирование на платформе Microsoft .NET Framework 4.5 на языке C#".
16. Что еще нужно знать, чтобы взяли работать за еду?
— Базы данных — подойдет любая книга по MSSQL/MySQL/PostgreSQL. DDL, DML. Джойны, индексы, нормализация. В контексте шарпа еще ORM: Entity Framework, Dapper.
— Системы контроля версий — обычно гита достаточно: add/commit/push, merge, rebase, checkout, remote, diff, разрешение конфликтов.
— GitHub — issues, пулл-реквесты, теги, релизы, Actions.
— Алгоритмы — сортировка, поиск, оценка сложности алгоритмов, рекурсия, алгоритмы на строках.
— Структуры данных — связанные списки, деревья (бинарные, красно-чёрные, b-деревья), хеш-таблицы, графы.
— Если идти в веб — HTML, CSS, JavaScript, веб-сокеты, REST, JS-фреймворки (Angular, React, Vue).
— Паттерны проектирования, стиль кода, архитектура приложения, внедрение зависимостей, MVVM (если хочется в WPF), SOLID.
17. Я не умею читать, что посмотреть?
— C# Fundamentals: Development for Absolute Beginners — https://goo.gl/meyyxO
— Набор курсов по C# от O'Reilly Media (28 часов, на английском) — http://rutracker.org/forum/viewtopic.php?t=5082978
— Канал по C# IAmTimCorey (на английском) — https://www.youtube.com/user/IAmTimCorey
Шапка протухнет к следующему перекату.
Что думаете? Конечно, очередные инфоцигане, НО
>халява
>есть порог входа
Все, что начинается на utm.
Вах курс хяроший. Всей семьей три сезона проходим уже...
Зачем тебе вообще понадобился EF, когда есть ADO.NET, Dapper и linq2db? EF - это было в 2к10 прикольно, модно и молодёжно, сегодня - это убогая ПАРАША.
>ADO.NET
Ты сам параша.
>Dapper
Ну хуй знает, ЕФ на минималках. Кококо перфоманс сравним с качественно приготовленным ЕФ.
>linq2db
И в чем профит? хотя кокрастоке мерж там есть
Сейчас модно гнать на ЕФ, но обычно это делают дурачки, которые обосрались с ним по неопытности, так же само обосрались бы и с другим.
using var trans = context.Database.BeginTransaction();
//что-то, что вызовет SaveChanges
// еще что-то, что вызовет SaveChanges
try{
...trans.Commit()
}
catch(FooException ex) {}
catch(BarException ex) {}
catch(FooBarException ex) {}
мне что, в каждом кетче писать trans.Rollback?
Ребят ,я студент ,закончил внешние курсы в епаме на внутренних курсах послали нахуй абсолютно всех студентов , не проводя собеседования. Хочу вкатиться джуном за еду,но везде требуют "Знание основ ASP.CORE" . Сама кора достаточная обширная, часто слышал ,что новичку будет трудно с ней разобраться . Какие области коры чаще всего запрашивают работодатели с джуна ? Всем спасибо
Да.
>Сама кора достаточная обширная
Никто не спрашивает какую-то конкретную хрень из кора. Максимум поебут мозги вопросом IEnumerable vs IQueryable.
>что новичку будет трудно с ней разобраться
Нет.
>Знание основ ASP.CORE
Core и ASP.NET Core - разные вещи.
Открыл рандом резюме ,пишут примерно так ".NET Framework/Сore" . Ну спасибо за ответ ,пойду тренироваться
Шарписты, помогите эту хуйню
https://github.com/username1565/System.Data.SQLite
куда-то сюда впаять:
https://github.com/username1565/nanoboard/blob/dev/nanodb.exe-source/Database/PostDb.cs
чтобы было опциональным.
Кококонпелятор какую-то хуйню пишет, заебал уже.
Структура базы на пикрил, здесь: https://2ch.hk/crypt/res/45030.html#47339 (М)
Алсо, как сбилдить этот сиквелайт на linux, с помощью mono, блядь? Там тоже какая-то хуйня.
Может чё-то добавить надо, или да?
По первой же ссылке роадмап по асп. С этими навыками в 2к21 на помидора могут взять.
Опять ты выходишь на связь? Заведи ишью, чел который занимается сейчас нанобордой лучше тебе поянит, почему ты дурачок
Да.
Хз, пару лет. Мне кажется, достаточно запилить пет проект за пару месяцев, где используется вся та фигня, чтобы иметь хотя б общее представление.
>что и я вступил и измазался в EF
Ну не вступай, не обмазывайся, умник.
Делай все тоже самое с дапером/адо или ебись в жопу с хранимками, где ты вообще к ошибкам С# кода доступа не имеешь.
Вообще, если ты хочешь только ДБ ексепшены обрабатывать - выноси свое говно в юнит оф ворк и там это обрабатывай. Если ошибки бизнесслогики - ну тогда уже ебись по месту.
Что такое эта наноборда? Типа аппа, которая в кортинки на других бордах свою инфу добаляет и потом считывает и строит вам свою юорду? Это вообще работает? Как она определяет с каких постов данные брать?
Код на C# будет выглядеть как код на PHP или того хуже, C# не умеет возвращать длину числа пи.
15.
РНР-блядь, учись мягким скилам. Понятно, что ты на РНР себе только хомпйджи делал и то криво в одно рыло, но шарфикогоспода работают в команде и обоссут тебя.
Начальный пись ты уже получил.
Так что тебе надо еще-то?
Хорош косплеить цыганку. Ты вообще пальцем в небо. Не знаешь ровным счетом ничего про мой бэкграунд, а уже с напыщенным видом с ЧСВ до небес кудахчешь: ТЫ НИ МОЖЕШЬ ТО, ТЫ НИМОЖИШЬ СЁ.
Ты какой-то ебанутый. Либо озлобленный вкатыш, либо анальник, сидящий на зарплате среднего класса в 17к, потому что другого объяснения я не вижу. Все мои успешные коллеги себя так не ведут, наоборот все довольно доброжелательны и пояснят что угодно из мира кодинга просто и понятно, без выебонов.
Использованияе токсичных напыщенных словечек "средний класс", "вкатывальщик" как будто что-то плохое.
Галюцинации и слова в голове, которых никто не говорил: "ни можишь" и т.д..
Стресс тест завален.
Вам перзвонят с психушки
Второй пись на прощание- вам.
Меня по asp.net спрашивали про dependency injection. Правда конкретно к asp.net это отношение не очень имеет и я собеседовался на мидла, но тем не менее
Чета туплю пздц.
Вот у меня есть List классов в котором есть List классов в котором есть поля.
Вот мне надо взять List второго уровня.
Вот первый главный класс
public class Root
{
public List<Line> lines { get; set; }
}
Вот второй
public class Line
{
//
//
public string name { get; set; }
//
//
}
Все все это дело лежит в List<Root> AllItems = new List<Root>();
Как мне взять Line по имени фирсОфДефаульт? Это LINQ но я чета туплю
Помогите плэззз.
Чета туплю пздц.
Вот у меня есть List классов в котором есть List классов в котором есть поля.
Вот мне надо взять List второго уровня.
Вот первый главный класс
public class Root
{
public List<Line> lines { get; set; }
}
Вот второй
public class Line
{
//
//
public string name { get; set; }
//
//
}
Все все это дело лежит в List<Root> AllItems = new List<Root>();
Как мне взять Line по имени фирсОфДефаульт? Это LINQ но я чета туплю
Помогите плэззз.
Новичку нужно просто знать что был фреймворк и сейчас он как-бы для легаси, а все новые проекты - на коре. Этого достаточно.
Лично я бы джуна погонял по докеру и линуксам, по архитектуре(ну, банально: спроектируй фейсбук или промышленную систему отслеживания аварий на производстве в близком к реальному времени), по алгоритмам, ну, это естественно если он нормально на базовые вещи ответил бы про ООП, солид, DI, многопоточку, асинхронщину, SQL, n+1; очереди, планировщики; да, про фронтенд еще неплохо бы спросить, ну, хотя бы что-то из большой тройки плюс ванила(на уровне понимает ли джун что там фреймворк за него делает или считает это магией), умение пользоваться вебпаком, препроцессоры, да, еще про тестирование: как, чем, зачем, TDD, ну и естественно системы контроля версий, как будет с конфилктами бороться, умеет ли ветки сливать нормально и т.д. Но это все если у тебя рост меньше 190см и тело не подкачанное, в этом случае - просто спросил бы: нравится офис?
А можно методом расширения плиз, я смутно понимаю че там как ты сделал)
Наследование, полиморфизм, инкапсуляция. Паттерны. Почему аггрегация вместо наследования.
Спасибо братишка.
Очень помог.
С 5 утра сижу делаю бота для пое.
Бошка не варит, так бы еще сидел до 3 ночи думал как эту хуйню сделать.
Спасибо.
ЧТо за бот? Судя по всему - торговый.
Я раньше тоже хотел, но полноценного, ане торгового, но как прикинул обьем работы...
Это нормально будет кк-то скопипастить их через Include или типа того?
Допустим, я более-менее уверен, что эти классы не получат внешних зависимостей и в месте копипаста не отвалятся.
По АСП еще спрашиват пайплайны, екшнфилтры, отличие и т.д. "Пользователь нажал ссылку в броузере, што праизойдет?".
Могут еще моделбайндеры спросить.
"Как оптимизировать сайт )))"
РЕСТ, опенАпи (свагеры), вебсокеты.
Ну и куда ж без диспоз/финалайз, заебали, я уже выучил эту хуйню. Иногда даже интерфес вс абстрактный класс проскальтзывает, с новый шарфиком стало сложнее отвечать лол.
А вас шо спрашивают еще?
Кор уже тоже почти легаси лол ебать время летит, помню как мы ждали релиз кандидата кора шобы заюзать
>докеру и линуксам
>.нет
Ты ебанутый?
>архитектуре
>жуна
Ты ебанутый (2)?
>остальной поток сознания
Ты ебанутый (3)?
Это вопросы и набор синиора+ уже. Или ты тралишь?
Да не троллю я.
> архитектура
Таки вопросы просто показывают насколько человеку это ваше программирование интересно само по себе.
Отвечать на них как на экзамене - нет необходимости. Просто показать как бы ты решал задачу, показать способность анализировать, предлагать решения и УТОЧНЯТЬ ВХОДНЫЕ ДАННЫЕ, а не сесть как аутист и сидеть пытаться что-то высрать из пустой башки.
> докер и линукс не для дотнета
Алло, блядь, деда. Ауууу. В чем ты-то собрался запускать? В азуре? Ну охуеть, может еще интерпрайз MS SQL - использовать предложишь?
Ну не с людьми торговать.
А в лиге новой покупать у мудака предметы, валюта карты, осколки.
Там выхи и зеркало может прокнуть.
А торговый бот это ну в пизду, это в память игры нужно лезть за сообщениями а я хуй знает ваще как это сделать.
>В азуре? Ну охуеть, может еще интерпрайз MS SQL - использовать предложишь?
Да. В чем проблема-то?
> Да. В чем проблема-то?
Даже не знаю. Может быть в том что любой бизнес тебя с такими ценами на новом, еще не приносящем прибыль проекте, пошлет нахуй?
Ну она не новая) Просто я только сейчас соизволил его сделать. экспедиция же.
Ну эмуляция нажатия кнопок, контрл+ц считываю что продает, чекаю выгодная ли цена, потом вбиваю цену, пытаюсь купить, смотрю по цвету пикселя купил или нет, если не купил то прибавляю больше. Также по цвету пикселя определяю за какую валюту я покупаю.
А на каком уровне нужно знать докер?
Вот мне в моей программе нужно хранить файлы сканов документов клиентов и операции с ними:
- добавлять/удалять файлы
- переименовывать и возможно добавлять примечания
Все это ясен пень внутри самой программы, а не лазить по папкам (пользователи вообще не должны иметь такой возможности - об этом ниже)
Конечно самый простой способ - тупо хранить их вот так как есть на сервере, и работать с файлами напрямую. Но это хуита - это как бы конфиденциальные данные и класть их так открыто где-то на сервере, чтобы кто-нибудь из увольняющихся сотрудников их слил в даркнеты...
В легаси наследстве от предыдущих поколений программистов файлы запаковывались в запароленные архивы, но:
- с ними было капец как неудобно работать (добавлять, удалять файлы - под это была своя прога, но она постоянно на пустом месте роняется, операторам не нравится)
- архивы можно взломать - в интернете полно прог снимающих пароли с архивов
Но в 1С я видел что оно режет файлы на какие-то куски - то есть как я понимаю берется файл, и распидораживается на кучу кусков. А вот сама прога знает как это все собрать и этим всем управлять.
Так вот - есть что нагуглить по такой теме? наверняка же есть какие-то готовые решения. Просто такое велосипедить я не осилю.
А работаю я один (у меня задача - старое ныне не работающее легаси переписать с нуля)
Да банально берешь какой-то sha1 от файла и используешь в качестве имени, поверху хуяришь какой-то AES.
В плане контейнера - ну зип без компрессии.
Функционал который мне нужен помечен как private, а наружу торчит апи, который мне не подходит.
Нужно написать функцию, которая из строки вытаскивает числа, регулярки при этом использовать нельзя.
Сам пока додумался только до вот этого https://pastebin.com/Yf0cr22z
Гуглится же на изи
string a = "aaa123bbb";
int value;
int.TryParse(string.Join("", a.Where(c => char.IsDigit(c))), out value);
Ты нагуглил какую-то дичь
aaa123bb4b -> 1234
В моем понимание должно быть
aaa123bb4b -> [123, 4]
Ну и если ему регулярки запрещено использовать, то и линк не положен.
>Ты нагуглил какую-то дичь
Нагугли лучше, ебана.
>>69005
Твой тоже.
И ты про вские Е и т.д. забыл.
Если похую на перфоманс и нужен 100% результат со всякими изьебствами - бегай по строке и IsNumeric /Double.TryParse ебай
Но твой пердун преподаватель просто ожидает от тебя решение как ты и написал, только нахуя ты там какие-то старт-енд юзаешь, сабстринги? ПРОСТО, если чар подходит к условию - ложи его в массив и потом парсь. Можешь IsNumeric/TryParse вместо своего ренжа еще юзать
Нахрена гуглить, если написать быстрее.
>Твой тоже.
Моего кода тут нет.
>пук
А хер знает что ты там сказать пытаешься. Но твой код говно даже не делает что должен.
Тема про конечные автоматы. Регулярки - это тоже конечный автомат. Вещественные числа, баги и так далее сам.
https://dotnetfiddle.net/yUNX4p
Пример:
жопа хуй пизджа
абу не ебу
алилуя алаху хабар
Ищем "жопа хуй" и получаем тру
Шутки шутками ,но спустя огромного количества идиотских собесов ,я большую часть этой ебалы освоил ,лол Хз на каком уровне правда ,но все же
С отрицательными
Смотрите. Допустим я делаю видеоплеер. Допустим я такой умный и решил выделить ЯДРО, ядро инициализирует основные финкции приложения, такие как гуй, обработка нажатий, имеет ряд событий и т.д. Так вот, все остальное я решил делать через отдельные сборки и назвал их ПЛАГИНАМИ. Каждый плагин реализует интерфейс: IPlugin у котрого есть метод void Plug(Core core), void Start(), void Stop(). При запуске приложения я подгружаю из папочки Plugins дллки и достаю все классы имплементирующий IPlugin, вызываю метод plug.
Так вот. Теперь я хочу чтобы можно было закинуть новую длл в папочку во время исполнения приложения и он бы подтянулся. Как мне это сделать?
Есть строка "09/23/2021"
Надо регуляркой сделать из нее "2021-09-23"
Это ебучий специфический софт, который понимает только "C# regular expression syntax"
Прикалываешь? Элементы массива не умеешь переставлять местами?
Через регулярку: https://dotnetfiddle.net/ymdT6T
Ну очевидно, разбиваешь а потом собираешь в нужном тебе виде.
Исключения для исключительных ситуаций. Для ожидаемого поведения можно использовать рельсы как у чела на F# выше, хоть там и говнокод.
>Что такое "рельсы"?
https://fsharpforfunandprofit.com/rop/
>Невалидные данные по бизнесс требованиям это исключительная ситуация?
Нет.
>хоть там и говнокод.
А как сделать не говнокод? Я просто только изучаю fsharp в целях автоматизации проекта на с++
Не мешать все в кучу, разбить хотя бы на модули.
Да при чем тут Ф#?
На С# как быть?
Возвращать резалт обжект как врапер выглядит говном. Лучше уж ексепшн пиздануть, не?
>На С# как быть?
Реализовать плюс/минус похожее. Нет никакого общего решения, зависит от конкретного случая. В ASP.NET MVC это например ModelState.
>Лучше уж ексепшн пиздануть, не?
Твои исключения - говнокод. Замерь производительность аллокации объекта против бросания исключения. Дык, ты еще ляпнул, что у тебя бл исключениями пронизана. Если тебе надо показать две и больше ошибок валидации, ты два исключения бросаешь? Или что ты наговнокодил?
Ну какой еще моделстейт. Я за бизнесс логику говорю.
Тоесть таки типа резалт обжекта? Что-то я нигде такого не видел в либах, все кидают ексепшн и не парятся.
На производительность похуй, хватит эту мантру повторять.
"Две и больше" - агрегейт ексепшн.
>Что-то я нигде такого не видел в либах
Мой пример - не пример, ага.
>все кидают ексепшн и не парятся
>На производительность похуй, хватит эту мантру повторять.
У такого кода не только проблема с производительностью. Мне изначально поебать, что у тебя в коде происходит, не еби потом мозг другим своими вопросами тогда про красоту. Еще разберись, что такое бизнес логика и какое отношение она имеет к валидации.
>Невалидные данные по бизнесс требованиям это исключительная ситуация?
А можно пример? А то напрашивается очевидный ответ - если метод может обработать данные, то это не исключительная ситуация, если не может, то исключительная, и по принципу самурая чем раньше выкинет эксепшн тем лучше. Приход плохих данных от пользователя/из вне это не исключительная ситуация, это обычное дело и программа должна это обрабатывать в обычном режиме (валидировать данные перед прокидыванием их в БЛ).
А БЛ не должен их валидировать, что ли?
Ну вот пришел тебе запрос достать юзера. Не важно как с фронта вообще или по велению нибирианца.
Ты в либе точно видишь - данные хреновые. Ид кривая или вообще нулл, не важно.
Что делать? Вот чел выше, если я его правильно понял, советует вместо Юзера возвращать что-то типа Result<User>, где будет стейт операции. Может оно и правильно, но мне теперь во всех методах выше нужно будет проверять этот стейт, допустим метод вызывается не напрямую, а через кешировалку или мапилку. Когда же с ексепшеном - пизданул и забыл "выше, кому интересно, разберутся, кому нет - не законсюмят дальше".
Какой нахуй модел стейт, не слушайте того долбаеба из 2015-го.
Но, то, что он сказал, что лучше стараться не выкидывать исключения везде - правильно.
Где можно в API - из контроллера сразу возвращаться, через NotFound, BadRequest или через кастомный wrapper для респонсов.
Если валидация происходит в специальных стандартизированных методах типо Validate(), например у моделей методы прописаны через интерфейс, то можно оттуда возвращать опять же wrapped validation result и контроллер затем его обрабатывает и возвращает ответ.
В случае же когда валидация происходит под тремя слоями энтерпрайзной логики, которая проверяется уже хуй знает где - то да, там будут исключения и их ловить через общий try/catch, а не локальный в методе.
>возвращать что-то типа Result<User>
Если not found - то возвращаешь NotFound("User not found"), а никакой не Result<User> и не ебешь себе мозг, фронт проверяет пусть статус кода и отображает свою свистоперделку.
>Какой нахуй модел стейт, не слушайте того долбаеба из 2015-го.
То был пример. Меня любое решение не устраивает. Начиная от out параметров и заканчивая возвращением Result/bool.
>Если валидация происходит в специальных стандартизированных методах типо Validate(), например у моделей методы прописаны через интерфейс
Это решение тоже хуевое, поскольку нарушает принцип единственной ответственности.
>В случае же когда валидация происходит под тремя слоями энтерпрайзной логики, которая проверяется уже хуй знает где - то да, там будут исключения и их ловить через общий try/catch, а не локальный в методе.
Ну вот, допустим, такой сценарий, только мы создаем это с нуля.
Опять же, забудем о слоях выше, да-да, должно на презентейшене валидироваться и т.д а можно глобальный екшен фильтр на кастомные ексепшн и похуй где он высран. Но ведь и на БЛ должно же, так? Вот этот случай расматриваем. БЛ нихуя не знает что там выше и не должен.
Так финальный ответ? Метод в библиотетеке, допyстим UserManager.GetUser(UserId id) при невалидном UserId что должен возвращать/делать? Метод в библиотетеке, допyстим UserManager.CreateUser(User id) при невалидном User что должен возвращать/делать?
Да десять раз уже повторил, что мы не говрим о презентейшн/консюмер слоях. Мы либу нахуй пишем. Уровень бизнесс логики, которому похуя откуда вызываться.
Например, луковая архитектура. Переворачиваешь свой код наизнанку таким образом, чтобы у нее не было зависимостей типа коннекшена к базе данных. На доменном уровне только бизнес логика, инфраструктура сбоку.
К чему ты это высрал? Да, у БЛ не будет доступа к конекшенам, только к репам. И что?
Как это твечает на вопрос, бросать ексепшены или Result<User>/out param?
И на вопрос, нужна ли валидацтия в БЛ слое?
>Это решение тоже хуевое, поскольку нарушает принцип единственной ответственности.
Хуевый только ты, речь про исключения, возврат ошибок и их обработку, а ты доебуешься ко всякой мелочи.
Замени Validate() у моделей на отдельный слой валидирования или другое - суть одна и та же, что сказать-то хотел?
Это отвечает на вопрос, что ты долбоеб, который пихает валидацию в бизнес слой. Если ты пишешь либу, то ты кидаешь исключение и возвращаешь результат операции.
>только к репам
Неправильный ответ.
>Замени Validate() у моделей на отдельный слой валидирования или другое - суть одна и та же, что сказать-то хотел?
Что это не одно и тоже.
>ты долбоеб, который пихает валидацию в бизнес слой
А ты долбоеб с нереюзабельной, дырявой БЛ.
>Неправильный ответ.
Какой правильный?
Я очень смутно себе представляю как ты переиспользуешь БЛ.
>Какой правильный?
Не мешать все в кучу.
>Ну вот пришел тебе запрос достать юзера.
>Что делать?
Зависит. Если логика доспукает, что можно запросить несуществующего юзера, то возваращать или null или Result.NotFound. По хорошему вышестоящий слой должен сначала проверить есть ли юзер а потом совершать операции над ним. Но из-за того, что запросы в бд дорогие, то сие действо часто объеденяют в одну операцию.
>во всех методах выше нужно будет проверять этот стейт
>Когда же с ексепшеном - пизданул и забыл
Не-не-не. Тебе в любом случае проверять или тип эксепшена или тип резалта. Главное запомни - эксепшн это когда что-то пошло по пизде. Строить нормальный поток выполнения приложения на эксепшенах это трэш.
Метод в библиотетеке, допyстим UserManager.GetUser(UserId id) при невалидном UserId что должен возвращать/делать?
Смотря как он спроектирован. Скорее всего исключение, но если Get там подразумевает поиск, а не просто доставание, то исключений быть не должно.
>CreateUser(User id) при невалидном User что должен возвращать/делать?
Опять же зависит. Если с точки зрения логики это нормально, что юзер может не создаться (например имя занято), то никаких эксепшенов, если отвалилась база - то эксепшн.
>Я очень смутно себе представляю как ты переиспользуешь БЛ.
Метод UserManager.GetUser(UserId id) дергается и с веб апы одной, и с другой, и с воркера, и с аллаха. Доверять им нельзя.
>Не мешать все в кучу.
Так у тебя, судя по всему, кокрастоке намешано. Это ответсвенность БЛ запрашивать сохранение данных. Через репы.
>>70062
Но проверять в одном месте (на презентейшене, например), а не во всей цепочке.
>>70063
>что юзер может не создаться (например имя занято), то никаких эксепшенов
Да. Вот тут вопрос. Если не ексепшн, то что тогда? Result<User>/out param? А почему (перфоманс опускаем)?
В общем, ребятки, вот я начал гуглить ваши эти онион архетектуры (оказался обычный мультилейер (3)) , и в первом же примере и репы в сервисах (БЛ), и ексепшены.
https://code-maze.com/onion-architecture-in-aspnetcore/
>Result<User>/out param?
out для tryXXX паттерна, но учитывай, что результат будет да/нет и аут не работает в асинхронщине. Result для асинхронного или если вариантов завершения несколько.
>Но проверять в одном месте (на презентейшене, например), а не во всей цепочке.
Если ты проверяешь по всей цепочке, то ты где-то свернул не туда. Данные слишком далеко от места, где они нужны. Получай их там где известно что делать с результатом.
>Метод UserManager.GetUser(UserId id) дергается и с веб апы одной, и с другой, и с воркера, и с аллаха. Доверять им нельзя.
Если что-то не так, кидаешь исключение. UserManager - god object, про это говорит твой суффикс Manager.
>Это ответсвенность БЛ запрашивать сохранение данных.
Потом у тебя тесты на инфраструктуру, вместо тестов на БЛ. БЛ срать как данные хранятся.
>я начал гуглить ваши эти онион архетектуры (оказался обычный мультилейер (3))
У онион внизу домен, у трехзвенки - дал. Схема неправильная: в домене тоже могут быть сервисы, сервисы - это уровень приложения, репозитории могут быть на всех слоях одновременно, инфраструктура отдельно от представления. У тебя по ссылке нет валидации в сервисах.
Я вот хочу сделать веб-приложение. Суть. Есть пользователи. Они могут создать каталог. Внутри каталога они могут создать подкаталог произвольной вложенности, в каждом каталоге могут храниться файлики произвольных типов.
Так вот. Я решил это реализовать(в плане базы) примерно вот таким вот макаром как на прикриплейде.
Покритикуйте и дайте предложений как можно лучше было бы сделать.
>А как локализовать строки, которые у меня в js? a? a? a?
strings[localStorage.getItem('locale')].MySuperString
А можно по-подробнее, я только начал с js'ом. Что за strings, localStorage и как их наполнить?
Чем три от нод отличается? Зачем тебе различать нод и файл? Зачем ты коллекцию нод назвал просто нод? Зачем тебе юзер ноды?
> Чем три от нод отличается?
Тем что как сущность это должен быть корень. Примерно как / в линуксе. Так вот, как мне кажется - вполне логично вынести эти корни в отдельную сущность, чтобы в случае если нужно показать список доступных пользователю "корней" не нужно было искать среди нод все у которых нет родителя.
> Зачем тебе различать нод и файл?
Ну, типа вот пользователь удалил на высоком уровне, в это время другой пользователь копировал себе какой-то файл, в случае если разделены эти сущности - файлик просто добавит ID куда надо и все, не нужно думать как разруливать транзакцию. А сами файлы из базы можно удалять с какой-то переодичностью, если они больше ни в одной ноде не присутствуют и никто не пытался их куда-то вернуть.
> Зачем тебе юзер ноды?
А, про это забыл написать. Ну, типа пока владелец не удалит весь каталог - пользователи могут там мутить свои мутки: удалять что-то, сварачивать-разворачивать, переименовывать, но эти изменения будут только им видны, плюс вносить изменения, которые чтобы попали в основную ноду - должны будут быть подтверждены владельцем, плюс владелец каталога решает какую часть всего дерева показывать кому. Как-то так.
У всех классов общее Id, Name, Description, Nodes, только в случае с File почему-то перекочевало в FileType часть свойств.
То есть 2 варианта:
- как у тебя, но тогда надо было Node назвать подкаталогом, а Tree каталогом
- тоже самое, но через наследование от Node и дополнительным свойством NodeType или дискриминант
using ASTRALib;
using DevExpress.XtraEditors;
using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.Columns;
using DevExpress.XtraTreeList.Nodes;
using Microsoft.Win32;
using Rastr.Core;
using Rastr.SimpleMAPI;
using Rastr.UI.Properties;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace Rastr.UI
{
public class MControl : UserControl
{
private string DefaultStatus;
private string DefaultBtn;
private DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider m_ErrorProv = new DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider();
private readonly RastrEngine engine;
private IContainer components;
private GroupBox groupBox2;
private TextEdit tbCompany;
private TreeList treeList1;
private TreeListColumn treeListColumn1;
private TreeListColumn treeListColumn2;
private TreeListColumn treeListColumn3;
private SimpleButton bLicense;
private LabelControl Status;
private TextBox tbUser;
private LabelControl labelControl3;
private LabelControl labelControl2;
using ASTRALib;
using DevExpress.XtraEditors;
using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.Columns;
using DevExpress.XtraTreeList.Nodes;
using Microsoft.Win32;
using Rastr.Core;
using Rastr.SimpleMAPI;
using Rastr.UI.Properties;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace Rastr.UI
{
public class MControl : UserControl
{
private string DefaultStatus;
private string DefaultBtn;
private DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider m_ErrorProv = new DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider();
private readonly RastrEngine engine;
private IContainer components;
private GroupBox groupBox2;
private TextEdit tbCompany;
private TreeList treeList1;
private TreeListColumn treeListColumn1;
private TreeListColumn treeListColumn2;
private TreeListColumn treeListColumn3;
private SimpleButton bLicense;
private LabelControl Status;
private TextBox tbUser;
private LabelControl labelControl3;
private LabelControl labelControl2;
так тип поля это же string int boolean, обозначает что можно ввести в этом поле, а что дает тип TreeList? получается это отсылка к какому-то классу?
Чел... про типы рассказывается в любой книге в одной из первых глав. Классы/структуры это и есть типы. string - класс, TreeList - класс, int/bool/mystruct666 - структуры.
Жесть
ок, спасибо, смотрел в ютубе и статьях, там в основном описывается что поле определяется как int/string/etc, поэтому возникли затруднения.
Посмотрел cshtml файл, js который в него инжектится и собсна сам контроллер, но так и не нашел ничего такого. Сори за нубский вопрос, я понимаю что ответ скорее всего найдется в гайдах-туторах по веб-разработке, но я просто в вашем программировании не силен.
Я даже твой вопрос не понял.
Например, у меня такая нищая структура в проекте - контроллер - датаменеджер - репозиторий - дбконтекст. Я хочу всё обмазать Result'ами, типа поступил запрос на обновление записи в базе - если нет айди из датаменеджера (проверяю в датаменджере) возвращаю NotFoundResult и т.д. Теперь вопрос: есть определенный метод, в котором надо сделать транзакцию. Я её делаю через using transaction, дальше try catch , в catch'е rollback. И после роллбека возвращаю UnexpectedResult, который в контроллере переделываю в 500 ProblemDetails. Конечно еще проблема что приходится ради транзакции тащить Dbcontext в датаменеджер, ну ладно не в этом суть.. Вопрос в том, что мне таким образом в try catch получается надо теперь все запросы к базе обмазать? Или как вообще происходит обработка эксепшонов снаружи контроллеров. Хочу чтобы в случае когда я UnexpectedResult возвращаю и когда просто кидается какой-то рандомный экспешон из-за проблем с базой возвращалось одно и тоже. Или это хуйня и можно забить?
>хочу всё обмазать Result'ами
Не надо все обмазывать резалтами.
>если нет айди из датаменеджера
Кидай исключение. С точки зрения UI, пользователь не может обновить несуществующую запись.
>Вопрос в том, что мне таким образом в try catch получается надо теперь все запросы к базе обмазать?
Да. В новом асп есть мидлвари, так что транзакцию можешь туда засунуть.
>Или как вообще происходит обработка эксепшонов снаружи контроллеров.
Обычно вешают фильтр, который отлавливает все исключения и кастит их той или иной ошибке. Пользователю не в коем случае нельзя показывать исключение.
>Или это хуйня и можно забить?
Чем тупее написан код, чем меньше он вызывает вопросов, тем лучше.
Все хуйня, забей и выкинь нахрен. Особенно протаскивание контекста в датаменеджер. Выкидывай тогда репозиторий, если датаменеджер знает про дб.
>все запросы к базе обмазать?
Не все, а те, которые ты можешь обработать и продолжить выполнение, если сервер с базой ебнуло молнией такое не надо ловить.
>обработка эксепшонов снаружи контроллеров
В asp net есть специальный мидлварь, который обрабатывает ексепшоны и в случае если никто его (эксепшн) не перехватил отвравит ответ 500 - Servery Pizda.
>Кидай исключение. С точки зрения UI, пользователь не может обновить несуществующую запись.
Не соглашусь. Если айди приходит от пользователя, то это нормальная ситуация, что пользователь проебался. В терминах хттп BadRequest а не ServerError. Но если это произошло в процессе обработки провалидированных данных, то да, ошибка в приложении и это эксепшн.
>Конечно еще проблема что приходится ради транзакции тащить Dbcontext в датаменеджер
UnitOfWork создай, который будет все персистить, отправлять реальные запросы на апдейт. В нем же инкапсулируй создание транзакции, если надо. Если работаешь чисто с ЕФ-ом, то все просто и красиво строится.
Dbcontext ни в коем случае в явном виде не тащи вне дата/инфрастракчар слоя.
Вот я выше спрашивал за кастомные ексепшены, а тут они кокрастоке могут помочь, на уровне презентейшена ты можешь чекнуть, кастомный ли он, какой тип (и подтип - я предлагал енумкой) и вернуть бедреквест нужного типа или 500. Но чет меня начали обсерать с таким подходом.
>>70673
>Чем тупее написан код, чем меньше он вызывает вопросов, тем лучше.
Хм. Смелое утверждение. А как же орхитектура? Как же ентерпайз физбазз? Наследие предков не чтишь сука?
Улыбаются ли тебе твои предки, когда ты в 3 строчки в одном месте пол спринта закрываешь?
>А как же орхитектура? Как же ентерпайз физбазз?
Когда тебе будут заводить тикеты хуе-мое-нехуя-не-работает и ты будешь такое фиксить дохуя времени, чтобы исправить ровно одну строчку, начнешь проклинать предков.
Да, но надо больше абстракций.
>>70701
Холивар хуйня, "надо больше абстракций", если, конечно ты только не чувствуешь в себе силы написать новый ДбПровайдер или патчить текущий в случае изменений.
>>70700
Будет аргумент "поппередники наговнячили", внутри души скажу "спасибо" им. Деды знали толк. Кто понял жизнь - тот не спешит.
Минута пошла.
UserRepo : BaseRepo<User, IMyDbContext>{
base.Get(id);
base.Create(User user);
base.Update(User user);
SomethingNotBase(User user)
}
В чем проблема-то?
У тебя есть репо.
Репо консьюмит репо сервис.
Вася запросил детали о пользователе по гуиду.
Сервис обработки запросов дернул репо сервис.
Репо сервис дернул репо, в ней пользователя не оказалось.
Репо сервис бросает дочернее к BaseRepoServiceException исключение.
Исключение ловит глобальный обработчик исключений и формирует красивую джесонину Васе о том, что нет данных, а заодно логирует событие.
Все.
Проблем довольно много. Где транзакция? Где поиск по критерию?
>SomethingNotBase(User user)
Юзвера вместе с ролью вставляешь?
> Где транзакция?
В UnitOfWork
Ctor(IUnitOfWork<IMyDbContext> unitOfWork)
: base(unitOfWork)
>Где поиск по критерию
Сам пили, сучара "GetSomethingNotBase"
>Юзвера вместе с ролью вставляешь?
Depends. Но лучше завести RoleRepo
Так ты не увидишь проблемы. Не забудь еще апдейт и делит по критерию. И мультивставку.
И апсерт.
Какой проблемы? Самые общие случаи в бейс репо.
Остальные - пили сам в нон дженерик репах.
Нипанимаю.
>апдейт и делит по критерию
ЕФ+. Но да в этом случае надо заморочится с юнитОфворком и в каждом методе репы конектится к транзакции. Я обычно игнорю это лол.
В этом случае надо поебать себе мозг, а потом прийти к выводу, что абстракции потекли. Абстракции головного мозга.
В каком месте абстракции потекли?
Разве что, что некоторые операции будут вне транзакции (но это можно реализовать легко требуя открытия в месте, где ты вызываешь такие методы транзакции вручную. типа using IUnitOfWork.CreateTransaction() либо заморочится и в репах это сделать). Где тут протечка?
Бумп.
>В каком месте абстракции потекли?
Смотри, абстракции нужны, чтобы уйти от деталей реализации, иначе польза от тех абстракций? Т.е., чтобы заменить MSSQL на MongoDB, или наоборот, достаточно изменить репозиторий.
Я натягиваю сову на глобус, перечисляя то, что не умеет EF. А ты из MongoDB делаешь реляционную базу данныхMSSQL.
Чтобы сделать то, что не умеет EF, мне надо IMongoDbRepository сделать? Тогда мне надо еще его вызывающий код исправлять - потекли абстракции.
Мое скромное мнение - да, надо оборачивать в свой ексепшн, в инер - оригинальное, в методе документировать все возможные ексепшены, который он может выбросить.
Но мне лень обычно лол.
Ну и другие мнения тоже интересны.
Все не так. Это все еще будет UserRepo. Но вот трахаться тебе прийдется внутри него и юнитоф ворка.
Я имел ввиду, что ради удобства я не создаю транзакции в ручную в сервисах и ожидаю, что ЮнитОфВОрк.Сейв() сделает все сам.
И это супер просто, когда под капотом ЕФ и его нативные операции, но да есть операции, которые выпадают с ЕФ-ного контекста и тут уже решать, или не гарантировать транзакционность вообще, илиюзать явную через ручной using IUnitOfWork.CreateTransaction(), или заморочится и сохранить "юнит оф ворк сделает все сам и транзакцию создаст и кофе, и отсосет" и поебстись в репах
Ребята, ну уже не 12-й год, уже давно все поняли, что EF, Linq2Sql, etc - это и есть репозитори и самому это писать нужно только для ADO.NET/Dapper или другой лоу-левелной DAL, ну обновите уже методички свои и признайте что все знатно обосрались, проталкивая этот паттерн как дефолт.
С другой стороны, работы меньше станет на галерах, да и фактори себя не напишут.
Мда да даб да.
Да ты не тренде. Давно уже твои братки перешли на лоукод.
Все давно поняли, что надо один ендпоинт на бек, который будет принимать запрос к CosmosNoSqlNoBrainDB и все.
Некст левел - встроить это в клиента и синкать по пирам. Но серверсолюшн.
>EF
Не использую, потому что нужен перформанс (не хочу и долго профилировать функции) и часто надо писать какую-то хрень, которая не ложится на IQueryable. Еще и тесты ведут себя по разному, нужна дб в памяти, некоторые linq запросы без такой дб кидают исключения.
>Linq2Sql
Не вижу не одного плюса, какая-то жуть.
>ну уже не 12-й год
Холивар будет вечен.
Так обосраться легко. Достаточно поставить платного носорога и увидеть обосрамс. На одном проекте даж пилят ЭФ++, огромное расширение для экспрешин три с блек джеком и шлюхами.
Больше всего веселья с триггерами, когда надо запилить распределенный аудит или делать валидацию пермишином перед любым действием.
ЧТо за носорог?
>с триггерами
А чем проблема-то?
>валидацию пермишином перед любым действием.
При чем тут Еф или датаслой вообще? Или вы тригером валидируете? Ну сами тогда себе злобные буратины
Ну и так по мелочи: оконные функции, разнообразные специфические sql оптимизации, генерация значений по определенному правилу...
>>70804
>ЧТо за носорог?
https://hibernatingrhinos.com/products/efprof
>А чем проблема-то?
В аудите с этим:
https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/distributed-transactions
>При чем тут Еф или датаслой вообще?
Надо запретить делать действие в мультитенант системе, если нет к нему доступа. У нас не через триггер, это просто один из вариантов решения.
EF - это как Windows/Mac, да, можно одним кликом всё сделать, но когда нужно выйти за рамки стандартных сценариев - начинается трэш и понимание, насколько over dependent всё на жирных слоях этой либы/фреймфорка.
Вообще, любая жирная зависимость - это головная боль в долгосроке, и нужно старатьcя избегать этого по максимуму.
И это не только в .NET, это в целом так должно быть:
https://github.blog/2018-09-06-removing-jquery-from-github-frontend/
Я лично склоняюсь к середине - юзаю micro-ORM, которые не так просаживают перфоманс и в случае чего могут быть быстро выпилены из проекта.
при этом могут быть цифры еще в рандомных местах
Ты {6,} применил на всю скобку. Считай без регулярки, что длина строки 6 и больше.
Так у тебя написано, что ты хочешь 0-9...
На другом пике показал как работает фигурная скобка на круглую скобку. \d - это [0-9]
На двух из трех моих пикчей я ограничил количество точек до 3. Голубой - первый мач, синий - второй мач. Если ты хочешь, чтобы вся строка состояла только из трех символов и был только один мач, то тебе надо еще добавить символы начала и конца $ и ^
Ну, допустим, на нативном SQL - я могу сделать хитрый рекурсивный запрос и получить сразу родителя всего дерева, да там будут циклы и все такое, но оно все равно будет довольно быстро(проверял по крайней мере на дереве с 10к нодами и 150 уровнем вложенности).
А вот в EF ничего кроме как:
var item = node;
while(item.Parent is not null){item = item.Parent;}
return item;
придумать не могу. Как понимаю, таким макаром - еф будет каждый раз подгружать родителей, что значит запросы к базе лишние что не оч удобно.
Пока что придумал еще костыль типа добавить каждому листу ссылку на корень чтобы сразу можно было его достать, но это костыль-костыль какой-то.
Ну блин(((
Тогда другой вопрос. Как организовать хранимки чтобы я мог при первом старте в контейнере сразу насоздавать их и потом дергать?
Хранимку миграцией создаешь, из эфки дергаешь по имени.
Сделал я бота для пое, он гемблит.
На скриншотах, чекает пиксели и по ним проверяет.
Вот у меня вопрос. Как в C# работать я памятью ?
Хотелось бы еще торгового бота сделать но он на пикселях не получится так как надо сообщения с чата принимать.
Как вообще такое делают? Есть гайды что бы на простых примерах показывали?
Пока я думаю что есть ячейка памяти в которую помещаются сообщения из чата. Вот их надо как то найти только я хуй знает как.
И лезть в память игры это сильно палевно?
Я вообще думал, что у пое было только два кор проекта: анализ траффика и анализ памяти (поехуд).
Посмотри поехуд, я на него когда-то забил хер и его вроде переименовали, но ты его легко найдешь и на его основе захуярили некоторых ботов.
И да, лезть в память палевно. В пое есть защита от этого. Поехуд когда-то умел редактировать память, чтобы например вырубить дождь для обладателей картофельного пк.
Я тебе уже объяснил, что многих ботов написали на основе поехуда. У него есть функционал для торговли. Но, чтобы ты знал, то, как он там сделан, у пое тоже есть защита. Если ты сам такое начнешь писать, получишь бан через какое-то время.
>2 года не обновлялась
Она живет и процветает, только под другим названием. На него должна быть ссылка. Там местный абдула разбил каждый модуль на плагины, но я забыл название.
Я сейчас с мобилы, не могу нормально код смотреть. Нашел этот репозиторий.
https://github.com/Qvin0000/ExileApi
Вроде этот
На сколько вообще сложно такова бота сделать?
Вроде функци мало, принимай сообщение, парси, приглашай, меняйся и проверяй что бы не наебали.
Добрейшего вечерочка, шарпаны. Как вообще неврождённому приложению обзавестись бд на сервере (с MS SQLServer)? Ну т.е. вот есть вроде такая концепция - кодфёрст, все дела, когда бд мы создаем в коде и запиливаем ее потом через миграции (включая инишал для создания самой бд). Как этот подход совместить с реальной ситуацией? Какого пользователя для этого создавать в бд для указания в строке подключения? (Юзера или логин? Бд ведь еще не существует до первой миграции.) С ролью dbcreator? А не слишком жирно и небезопасно? Но если создать менее привилегированного сервер же пошлет приложения нахер при попытке совершить первую миграцию (создание самой бд)? Как вообще инициировать эти самые миграции на реальных серверах? Есть какие-нибудь гайды/общепринятые подходы? В 99% обучающих материалов учат создавать бд в локалбд с трастед конекшн и инициировать миграции аосредством апдейт-датабейз с консоли в студии блджат
Лол, чела зовут Queuete, а Qvin - это другой говнокодер. У этого проекта было контрибьютеров больше, чем членов у портовой шлюхи.
>На сколько вообще сложно такова бота сделать?
Через траффик вообще забей. У тебя не получится остановить отправку сообщений, чтобы увидеть магическое слово и не быть спаленным. Зато это самый лучший бот будет. Сорцы не найдешь, только описание алгоритма.
Память сделана через поиск шаблона. Ты если далек от умения находить шаблон каждый апдейт, твой бот сломается на следующее обновление. Идея предельно простая: читаешь ивент слушая найденную функцию https://en.wikipedia.org/wiki/Entity_component_system и эмулируешь нажатие кнопок. Как эмулировать кнопки и не спалиться, найдешь у авто фласок, если трейд выпилили.
Про чтение пикселей вообще забей.
Дальше сам, я больше ничего не скажу.
В пизду такое счастье.
Я думал как в артмани, найти ячеку памяти и подменить)
А отправка сообщения?
Это типо слушаем трафик который идет в игру через прокси сервер?
Ну в принципе мне хватило бы просто прочитать сообщения от юзера а потом я и пикселями могу сделать.
Делаешь простой инсталлятор, где на одном из этапов будет выбор провайдера и ввод строки подключения. Если БД на сервере нет - в установщик ее тоже засовываешь.
Использовать дб ферст. Ты же не собрался креды продакшена пихать в контроль версии? Код ферст - это гиблое дело.
Вот есть у меня СтрингБилдер, и я хочу конвертнуть его в стринг но не хочу создавать еще одну переменную. Так можно?
Span шоль? Через него можно хоть изменять неизменяемые итернированные строки в шарпе.
Есть еще void*, мой любимец.
Какие? Простейший инсталятор пилится за 2 часа и потом просто переиспользуется. Разве что там софту пиздец сколько настроек нужно.
>Простейший инсталятор
Вменяемый еще стоит что-то около 5к бачей.
>Разве что там софту пиздец сколько настроек нужно.
Наивно думать, что все закончится на создании какого-то там dbcreator. Слишком идеальный мир получится.
При чем тут контроль версий? Пайплайна распердолит. Но да, в основное приложение ддл_админа выдавать не хочется
>При чем тут контроль версий?
На тему, что я часто вижу как секреты пихают в контроль версий для каждого энва.
Хз. У нас все аппсетинги под гитигнором
dynamic ?
Нажатие эт понятно СендВайт а вот как зажатие?
Мне надо зажать кнтрл и нажимать лкм.
От сложного к простому:
SendInput
keybd_event
SendKeys.Send
Последнее вроде не умеет контролы слать. Для мышки похожее апи.
сап, аноны, обьясните сокральный смысл services.AddScope(className), services.AddTransient(className), понятно что в случае AddSinglton, мы дергаем один и тот же обьект в контроллер или разные контроллеры, и у него свое состояние например или рекомендуется использовать когда обращаемся к чему нибудь внешнему( кэш, конфигурация например). Что же в случае services.AddScope(className),services.AddTransient(className) все сложнее. Можно подсказать наглядный пример по смыслу. Когда нам надо это использовать и без этого не обойтись.
Объясню на примере вонючего EF.
- Если сделать Singleton, контекст довольно быстро из-за кеша начнет пиздец тормозить.
- Если сделать Transient, потеряешь все плюшки кеша.
- PerRequest можно сделать только в ASP.NET.
- В какой-нибудь вундервафле придется использовать кастомный Scope вместо PerRequest.
Есть БД, упрощено говоря, в ней две таблицы User и Work
В первой столбцы
UserID и UserName
Во второй
WorkID, UserID1,UserID2, UserID3.
Как можно подменить имена во второй таблице на имена из первой (вместо ИД выводились имена)?
Для такой херни я бы вообще вьюху создал и делал бы просто выборку из нее.
Благодарствую анончик!) Стало попонятнее)
Что проще понять
Пусть в User будет
User Name
1 Петя
2 Вася
3 Катя
В Work будет одна строка
WorkID User1 User2 User3
1 1 2 3
Надо вывести через EF Core
User 1 = Петя, User 2 - Вася, User 3 - Катя.
Тебе надо написать три джойна или три подзапроса. Тип джойна влияет только на наличие значения UserId.
Спасибо, вечером попробую.
Вопрос очень важный, прошу помочь!
В общем, я анализирую файл. Там есть два типа строк: одна содержит "=", а вторая ";". Задача - извлечь эти строки и раскидать их по ячейкам таблицы
В чем цимес ситуации: второй тип строк идет под первым (например, первый_тип_строки '\n' второй_тип строки). Однако может быть такое, что второго типа строки просто нет.
И я блять не понимаю, как мне настроить логику программы таким образом, чтобы если есть второй тип строки, то функция обрабатывала и первый тип и второй тип и запихнула в одну строку таблицы. Если же нет, то работала только с первым типом строки.
У меня получается все так, что он либо работает со всеми типами отдельно, либо только с первым, либо только с теми участками файла, где есть и первый и второй типы строк (см выше)
Может вы мне подскажете? Надеюсь понятно все объяснил...
Да я бы рад, но у меня там цикл, за одну итерацию считывается только одна строка, я дурак забыл это упомянуть
Хм, что ты под парс_2 подразумеваешь? А так звучит годно
Хотя у меня идея захуярить два цикла, в одном запихнуть все в лист и чтоб второй тип строки сливался в одну с первым и потом этот лист обрабатывать
Ты сказал, что у тебя первая и вторая строка различаются символами. Значит их можно различать. Читаешь по одной строчке, чекаешь тип строчки и вызываешь функцию для парса первой строчки или второй.
Ебобо? У тебя там переменные называются a, b, c, huj? Иначе как может придти в голову идея переменной предназначенной для 'x' присвоить значение 'y'. Но вообще C# строго типизированный язык, и без ебли с dynamic/object такого не сделать.
>>71181
Выглядит как какая-то ненормализованная хуита. Неплохо бы вынести назначения работ юзерам в отдельную таблицу.
Я вроде разобрался с проблемой. Достаточно костыльно, но оно работает. Спасибо что откликнулся)
Анончики, кто в этом году вкатился? Расскажите что спрашивают чаще всего
Ну про стулья там, про полотенце... Ты просто скажи что ты с двача, там поймут.
Сильная и строгая - синонимы. C# со слабой типизацией из-за имплисита как и плюсы.
Ты не понял. У сильной и слабой типизации нет прям такого четкого определения. И если брать строгое определение строгой типизации, то у шарпа слабая типизация, а если слабое определения, то у шарпа строгая типизация. Этож каламбур был... Я же кек написал... грустно.
Но вот сравнение с С це перебор. Даже при неявном касте в решетке ты получаешь строго типизированный объект.
С розлином ¯\_(ツ)_/¯
Напиши сорс генератор на EF.
Вот есть асп кор приложение с ролями для юзеров. Есть сервис IFooService { Foo[] GetFoos()//реализация тащит данные из бд }
У Foo есть свойство Foo.IsPrivate и нужно обычным юзерам выдать страницу со списком foo, где IsPrivate = false, а юзерам с ролью "Рептилоид" все foo. Вопрос: кто где и как должен решить что показывать. Распишите плиз подробно от прихода запроса, до выдачи ответа. Пока у меня такие варианты:
1. Контролер проверяет роль и вызывает метод GetFoos, который принимает желаемое значение IsPrivate: fooService.GetFoos(isPrivate: false). Недостаток видится в том, если вызов будет из нескольких контроллеров, придется дублировать проверку ролей.
2. IFooService требует IAuthService, в котором можно получить роль и возвращает только достимые foo. Недостаток - IFooService делает слишком много и имеет несколько причин для изменеий.
3. Контроллер вытаскивает все foo и сам фильтрует. Недостаток - тянутся лишние данные с бд.
Ты можешь написать неявное преобразование Foo в Bar, которые никак не связаны. Я думаю тот анон про такое писал.
а, ну так если ты можешь в шарпе юзать dynamic (aka object с рефлекшеном), то c# это язык с динамической типизацией, всё логично
Отличается все равно от фшарпа, где даже аппер каст надо явно делать.
Ответ: хз. Напиши тест. Желательно на .нет 6 рк1, потому что помимо jit, появилась профиль оптимизации (кокой-то мотюк с 3 букф).
А как раздробить сервис? Т.е. в нем будет такое
if(!auth.UserInRole('Reptiloid'))
...query = query.Where(f => !f.IsPrivate)
И что куда дробить? Родилась такая идея
IFooAccessFilter { IQueryable<Foo> Fileter(IQueryable<Foo> foods)}
В IFooAccessFilter инжектить IAuthService, а сам IFooAccessFilter инжектить в IFooService. И тогда получится IAuth предоставляет данные о юзеер, IFooAccessFilter решает что можно а что ни-ни, а IFooService исползуя фильтр тянет только нужные данные. И это вроде неплохо масштабируется и на IBarService, IGovnoService.
Надо смотреть на конкретную картину в целом. Может ты себе сам внушил, что сервис делает слишком много. Чтобы не получилось, что тебе по приколу захотелось заниматься оверинженирингом.
Да, C# мультипарадигменный по всем параметрам. И рыбку съесть и на пенек присесть. Ну или ни рыба ни мясо, кому как нравится.
>>71506
Смотри. Рефлексия всего лишь смотрит в метеданные, которые во время выполнения уже существуют. А в случае динамика в рантайме запускается некоторое подобие компилятора на минималках, который сначала обрабатывает его.
>f => !f.IsPrivate
К слову, есть паттерн спецификация. Куда можно абстрагировать всю эту чушь и избавиться от дублирования кода.
Да, идти на бессплатные курсы у галер.
По факту получился словарь, в котором ключ - кортеж из двумерного массива и кортежа действия, содержащего координаты клетки поля, в которую делается ход; Значение - double для q-значения.
В чём проблема: при обновлении q-значений вместо их перезаписи происходит вставка идентичной по ключу записи, что кажется максимально странной хернёй для словаря. Пикрелейтед как это выглядит при отладке.
В какую сторону глядеть, чтобы пофиксить?
Конечная цель перезаписывать значения по имеющемуся ключу, а не создавать его дубликат (по крайней мере по всем значениям так выглядящий).
Словарь же не должен иметь возможности вставлять одинаковые ключи в целом, а тут я пошёл нахуй с дефолтной записью словарь[ключ] = значение.
Аноны, объясните пж что не так, ошибка то до безобразия простая, просто я не могу её найти
>ошибка то до безобразия простая
Меня всегда забавляли такие экспертные мнения. Проблема в потере третьего параметра. Ctrl + K, D чтоль еще нажми.
https://dotnetfiddle.net/vTgQIa
Действительно, затупил. Thx, анон.
>в треде обсуждают циклы
>как мне по id вытащить рекорд
>пачиму моя рекурсия не работает
А что ты хочешь пообсуждать, няша?
На самом деле мерзотненькая хуйня. Вроде и удобно, и сам таких ошибок не совершаешь, но если тупо смотришь на код чужой - это оч непросто заметить с первого раза.
Какого хуя, блядские инструменты EF - не хотят мне генерировать миграцию, если я переношу метод Main из класса Program?
Ну, допустим, я - ебланстер, и мне не нравится что метод Main в классе Program, ну вот такой я ебанутый, хочу чтобы такое охуенное слово для других целей использовать. Выношу в класс EntryPoint в котором метод Main делает:
new Program(string[]args).Run();
И ебучие инструменты миграции - тупо не хотят работать, дескать мы метод такие-то методы не нашли в классе Program. Ну охуеть, блядь. Разве нельзя было, блядь, не тупо сдыхать, а так и написать и попросить указать место куда стучаться, раз вы такое вот говно сделали?
Я наполняю ванну рекордов и мы с тобой всю ночь на пролет обсуждаем циклы и рекурсии.
Смотри IDesignTimeDbContextFactory и аргументы команды. И успокой свое траханье.
Вообще не понимаю при чем там метож мейн.
Нихуя загуглить не могут, а потом "ЕФ гавно пайду лучше в АДО((("
Вот в визуал студии я отлаживаю и запускаю программу. Иногда ее закрываю. И вот она начинает ебать голову потом. Перестает копировать, я перезвпускаю студию, иногда помогает сразу а иногда нужно ждать только хуй знает чего ждать то.
Он по дефолту навешивает хук. Хуй знает, что ты там чудишь идеешкой. Если помогает рестарт пк, то все понятно.
Аноны, помогите придумать реализацию. Вот у меня есть объект, а в нем 20 полей int, надо вызывать один метод при присваивании значений этим полям. Возможно ли сделать что-то типа сеттеров у этих полей без дублирования сеттеров в каждом?
С INotifyPropertyChanged в любом случае надо в каждое свойство копипастить один и тот же код.
Можно сделать классы с кастомным implicit кастом, но тогда читаемость по пизде пойдёт, когда я буду инты присваивать классу. Разве что сделать дженерик и в скобках инт оставлять, чтоб понятнее выглядело откуда он взялся. Но это всё равно звучит как нечитаемая хуйня.
Рефлексией магию сотворить? Но это тоже звучит как костыль.
Или не ебать мозг и просто вызывать Set(...)? Но меня ОКР долбит.
Проверять поля на изменение в цикле? Вообще пиздец.
И если делать вместо интов классы, то в любом случае надо в конструкторе писать лапшу с вызовом конструкторов каждого класса, чтоб передать в него что это за поле вообще. Что тоже не нравится мне.
Сделай сорс генератор по атрибуту или суффиксу класса.
Рестарт пк помогает в любом случае.
Сейчас вот скомпилироаал программу и запускаю ее в релизе без студии и она нихея не работает.
Не происходит копирование(
Мог бы Fody взять просто, подписаться на нотификации и что тебе там надо делать.
https://github.com/Fody/PropertyChanged
А почему лучше фоди-то?
На самом деле гуд фича. И фоди это таки риск (сам автор писал, что когда он уходил - никто нахуй либу не поддерживал), но все же.
Фоди изменяет сгенерированный ил. Сорс генератор дописывает код до компиляции.
А то я на заводе работаю и завод немного(сильно на самом деле), заебал, но вкат на звавод происходил так:
-Привет, шарп знаешь?
- Знаю.
- Ок, вот тебе пека, иди работать.
И судя по всему в других местах немного не так.
Стандарт.
ООП.
Наследование. Модификаторы доступа. Боксинг анбоксинг. Структуры данных. Паттерны проектирования.вкатывальшику нужно просто знать что такие есть.
Ну и общие воросы, что такое clr, что такое нет, нет кор, нет фраемворк, в чем разница.
Корочи зайди на метанит и там посмотри вопросы.
А ну еще sql. Так же желательно представлять что такое EF core. Ну если прл еф кор спросят то там и linq. Так же асинк авейт. Ну еще сериализация и структура json, но это легко, там пару строк кода.
Эт вопросы только по языку. А ведь есть еще впф, асп нет кор.
Впф я хуй знает, а в асп коре там я ебу вопросов, выебут в хвост и гриву. Модели, представления, контролеры, фильтрация, зависимости, модели представлений, частичные представления, апи, куки, маршрутизация, авторизация. А еще сигналР и Блейзор там тоже еще можно пачку вопросов придумать.
Но ты не пугайся, это все изи, главное практика.
Корочи теория это хорошо, но вот даже если ты наизусть весь метанит выучиш и слово в слово сможешь его пересказать тебе это не поможет.
Я сам вкатывальщик и уже давно понял что без практики ты нихуя не изучишь.
Придумай себе проект и делай его.
Только не придумывай очередную соц сеть или телеграм бота
Нужно что то что бы было интересно тебе. Что бы ты горел и хотел это делать.
Вот мб в игру какую играешь, сделай чит или бота для игры. Или у друзей спроси какой бы сайт им был бы нужнн и сделай им его.
s1 это конструктор с передачей ReadOnlySpan<Char> на самом деле и его не существовало до .net core 2. В классе String объявлены разные перегрузки конструкторов, например перегрузка с созданием строки из масива символов.
s2 существовала всегда
s3 - более поздняя и удобная версия s2(но её нельзя использовать для объявления поля внутри класса).
s4 это последнее добавление в язык и упрощённый вариант для s1, чтобы не писать второй раз имя класса, на любителя впрочем.
Всё равно не понимаю смысл s1 и s4. Я могу пока просто забить на это ?
>ООП
Ну, тут наверное чек. Как минимум за наследование-полиморфизм-инкапсуляцию могу пояснить + солид.
>Боксинг анбоксинг
чек
> Структуры данных
Хм. Вот тут у меня сомнения. Потому что многое на практике не применял, только знаю когда что надо в теории, но на практике только пригодились деревья, да стек, очередь, списки, массивчики.
> Паттерны проектирования
Если те что у банды четырех - чек. Если MVC-MVVM - тоже чек. Другие - хз.
> clr
Чек, хотя если будут спрашивать по кишкам - только общее знаю.
> что такое нет, нет кор, нет фраемворк, в чем разница
Чек
> sql
У sql много чего. Если просто про запросики и n+1 - чек, если какая-то специфичная фигня типа как какие индексы строятся - наверное не чек. Ну и специфичная для конкретных СУБД фигня, типа вот в этой можно это, а в той то.
> еф кор
Ну, опять же тут получается зависит. На текущей работе я его просто как хранилище использовал.
> асинк авейт
Чек
> Впф
Не интересно и не собирался на декстопы
> представления, контролеры, фильтрация, зависимости, модели представлений, частичные представления, апи, куки, маршрутизация, авторизация
Это все чек, если подразумевается веб. Просто потому что на текущей работе именно это использовал частенько.
> сигналР
Чек
> Блейзор
Знаю что есть, руками не трогал, только создавал проектик посмотреть. На текущей работе Webapi+angular+nginx+docker
>ООП
Ну, тут наверное чек. Как минимум за наследование-полиморфизм-инкапсуляцию могу пояснить + солид.
>Боксинг анбоксинг
чек
> Структуры данных
Хм. Вот тут у меня сомнения. Потому что многое на практике не применял, только знаю когда что надо в теории, но на практике только пригодились деревья, да стек, очередь, списки, массивчики.
> Паттерны проектирования
Если те что у банды четырех - чек. Если MVC-MVVM - тоже чек. Другие - хз.
> clr
Чек, хотя если будут спрашивать по кишкам - только общее знаю.
> что такое нет, нет кор, нет фраемворк, в чем разница
Чек
> sql
У sql много чего. Если просто про запросики и n+1 - чек, если какая-то специфичная фигня типа как какие индексы строятся - наверное не чек. Ну и специфичная для конкретных СУБД фигня, типа вот в этой можно это, а в той то.
> еф кор
Ну, опять же тут получается зависит. На текущей работе я его просто как хранилище использовал.
> асинк авейт
Чек
> Впф
Не интересно и не собирался на декстопы
> представления, контролеры, фильтрация, зависимости, модели представлений, частичные представления, апи, куки, маршрутизация, авторизация
Это все чек, если подразумевается веб. Просто потому что на текущей работе именно это использовал частенько.
> сигналР
Чек
> Блейзор
Знаю что есть, руками не трогал, только создавал проектик посмотреть. На текущей работе Webapi+angular+nginx+docker
Я вот сам не верю в такое.
Вот история.
Сделал я бота корочи, который кликает в ПОЕ. В лиге он покупает предметы.
Ну все хорошо все работает без проблем вообще.
Скинул я его корешу.
Он пробует и говорит что не работает.
Я думаю как так то нахуй, скорее всего он персонажа не так поставил и пиксили не сходятся по которым нужно кликать.
Он высказывает предположение что из за размера персонажей клики не попадают. Ну ок, у меня вичка у него глад.
Я захожу на глада, и точно не работает.
Только вот я потом захожу на вичку и у меня ТОЖЕ БЛЯТЬ НЕ РАДБОТАЕТ.
Проблема в том что с какова то хуя данный метод перестал отжимать контрл в игре
public static void Ctrl_MouseLeft(int xpos, int ypos)
{
// Key Ctrl + Mouse Left
keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYDOWN, 0);
SetCursorPos(xpos, ypos);
mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0);
Thread.Sleep(200);
mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0);
keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0);
}
Он должен кляцнуть на вкладку а потом на продавца.
Но он цепляет вкладку и начинает ее пидорасить.
Это просто пиздец какой то. Я кеш почистил уже и нихуя.
Просто если бы мне кто то сказал что вот я в игре сделал действие и перестало что то работать притом что это что то не зависит от игры, оно просто нажимает кнопки и может нажимать эти кнопки и без игры.
Блять как так то нахуй
Комп перезагружал уже.
Я просто не могу в это поверить.
Это как если бы человек увидел инопланетянина и мне рассказывал бы то я ему вызвал бы дурку.
Но я рили вам не пижу, так все и было.
Программа одна и та же. Причем я ее утром допилил и с утра она фармила, я заходил и выходил из игры все ок, а тут 1 раз сменил перса потом взял основного и такой пиздец.
Я вот сам не верю в такое.
Вот история.
Сделал я бота корочи, который кликает в ПОЕ. В лиге он покупает предметы.
Ну все хорошо все работает без проблем вообще.
Скинул я его корешу.
Он пробует и говорит что не работает.
Я думаю как так то нахуй, скорее всего он персонажа не так поставил и пиксили не сходятся по которым нужно кликать.
Он высказывает предположение что из за размера персонажей клики не попадают. Ну ок, у меня вичка у него глад.
Я захожу на глада, и точно не работает.
Только вот я потом захожу на вичку и у меня ТОЖЕ БЛЯТЬ НЕ РАДБОТАЕТ.
Проблема в том что с какова то хуя данный метод перестал отжимать контрл в игре
public static void Ctrl_MouseLeft(int xpos, int ypos)
{
// Key Ctrl + Mouse Left
keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYDOWN, 0);
SetCursorPos(xpos, ypos);
mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0);
Thread.Sleep(200);
mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0);
keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0);
}
Он должен кляцнуть на вкладку а потом на продавца.
Но он цепляет вкладку и начинает ее пидорасить.
Это просто пиздец какой то. Я кеш почистил уже и нихуя.
Просто если бы мне кто то сказал что вот я в игре сделал действие и перестало что то работать притом что это что то не зависит от игры, оно просто нажимает кнопки и может нажимать эти кнопки и без игры.
Блять как так то нахуй
Комп перезагружал уже.
Я просто не могу в это поверить.
Это как если бы человек увидел инопланетянина и мне рассказывал бы то я ему вызвал бы дурку.
Но я рили вам не пижу, так все и было.
Программа одна и та же. Причем я ее утром допилил и с утра она фармила, я заходил и выходил из игры все ок, а тут 1 раз сменил перса потом взял основного и такой пиздец.
Надо тройную ссылку при перекате делать. К примеру, вот так:
>>65540 (OP)
>>65540 (OP)
>>65540 (OP)
А я в старом треде 2 недели просидел.
Работы нет - пиздеж. По вебу сейчас голод. За неделю на джинни приглосов 20 приходит. Из них в 10 будет красивый стек: кор, ангулар, опционально микросервисы.
Сам подумай почему для вызова процедур нужен стек. Как еще хранить параметры вызова и состояние регистров хранить, чтобы востановиться после возрата из подпроцедуры?
ASP.NET MVC, .NET 5. У меня есть страница Razor, называется app.cshtml - на неё легко зайти, невозможно забыть, и легко потерять, она работает. Я хочу, чтобы запросы на сайт вроде сайт/сычёв и сайт/срака вели на аналогичную страницу как сайт/app?id=сычёв, но при этом выглядели как сайт/сычёв. Разве я много прошу?
Я сделал раутинг, он выглядит так:
endpoints.MapRazorPages();
endpoints.MapControllerRoute(name: "Apps", pattern: "{controller=Home}/{(звёздочка)pageID}", defaults: new { action = "ShowInfoPage" });
- и эта хуйня работает, я получаю выход в нужную функцию. Но потом из этой функции мне нужно подставить нужную страницу app.cshtml, и параметр. И ёптваюмать, это не работает.
return View("~/Pages/app.cshtml"); - вот эта срака переводит на нужную страницу, но теряется ViewData.
Меня заебло тупить. Как в этом ёбаном MVC подменять страницу без изменения пути в адресной строке?
Я вроде как решил это, создав нормальный View и Model, но хотелось же на нормальный RazorPage вывести.
А ты знаешь что в одном солюшене может быть несколько проектов? >>73035
Чего блять? МВЦ и РазорПагес разные вещи. Их, конечно, можно вместе использовать, но надо нормально маршруты настроить. Ну и возвращать из контроллера страницу нельзя. Либо редирект, либо темплейты по-человечески сделать, которые и пага и вью будет использовать.
Это что за хуита? Смешно что такая хуита когда-то была в С++, времен 6.0 версии студии до 98 стандарта, и ее пофиксили.
С какого она в шарпе-то делает?
Защита от говнокода.
>>73261
Вот есть этот класс https://docs.microsoft.com/en-us/dotnet/api/system.windows.threading.dispatchertimer.start?view=net-5.0
>Applies to .net 5.0
Компитабилити пак поставил, пытаюсь гуглить в нугете - он есть только в каком-то левом пакете, который не ставиться. Непосредственно в reference assemblies на харде в .нете WindowsBase нету, только во фреймворке, но он очевидно нихуя не подключается.
Как его поставить?
https://dotnetfiddle.net/uxl6Hg
Теперь задание тебе: запили мне
bool Foo(string bar) { }
Чтобы он приносил миллион долларов в месяц.
Пришло время переустанавливать шиндус. У меня WindowsBase.dll лежит в папке кора. Ты кстати в какой папке смотришь? А кор у тебя 5 или 3?
У меня .NET 5. Либы у меня все были сложены по дефолту приблизительно в C:\Program files(x86)\Reference assemblies\ .
И что у тебя кор делает в папке фреймворка? Core по умолчанию идет в C:\Program Files\dotnet. Либы для десктопного сдк C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\5.0.0.
Спасибо, добавил с последнего пути - сбилдилось, только в студии подсвечивает все равно ошибку, нужно навернуть еще какой-то анализатор?
>Компитабилити пак поставил, пытаюсь гуглить в нугете - он есть только в каком-то левом пакете, который не ставиться.
Начиная с VS2017 изменился формат csproj. Теперь он намного чище и без всякого мусора.
Чтобы получить WindowsBase.dll и еще ворох всякого говна, необходимо у csproj указать sdk Microsoft.NET.Sdk.WindowsDesktop и/или TargetFramework net5.0-windows.
Краски не хватило на другие машинки.
Не знаю
Значит продолжу этого анальника читать
>А ты знаешь что в одном солюшене может быть несколько проектов?
Конечно знаю. Только вот дело в том, что тимлиду не нравится, когда ты какие-то там библиотеки классов делаешь, которые нужны только тебе и прочее-прочее.
Он долюбоеб что-ли?
Разделение по класс лайбрари, даже если они будут юзаться только в 1 солюшене - ок, ибо четче границы, меньше связанность, легче отслеживать зависимости и всякие там кроссреференсы.
Пруф ми вронг
ИнпутСимулятор как раз сделали для таких рукожопов как ты.
Представь, что тебе надо пилить фичи по фича флагам. Например, есть надо запилить фичу, которая будет фиксить другую фичу. В какой контроллер ты ее засунешь? Как ты решаешь проблему с роутом?
90% - манкижоб.
Но и там умудряются обосраться.
Большинство круд нормально сделать не смогут даже.
https://docs.microsoft.com/en-us/dotnet/core/extensions/workers
Performing a time-based operation on a schedule.
А под регистрацию RegisterController, LoginController под логин. Один контроллер - один экшн!
Чтобы правильная выдалась, нужно добавить манифест и в нём раскомментить тег supportedOS.
Почему - хз.
>словарь, в котором ключ это (int[,], (int, int))
Пиздец.
Закинь на какой нибудь дотнетфидлле, нахер мне твои картинки разглядывать.
>аргументы функции с большой буквы
>таплы в паблик интерфейсе
>назвать кортеж с параметрами ширина-высота ДЕЙСТВИЕМ
>if(true) return true; else return false;
Ну ты и еблан, чел. Говнокодовое клише просто, ну и мерзость.
>else if(x.Satate != y.State)
Нахуя ты это делаешь? Ты сначала проверил содержимое массивов, а потом являются ли два массива одним инстансом... Если они один и тот же массив, то содержаимое у них будет одинаковое, если тебе важно содержимое, а не инстансы, зачем ты проверяешь ссылки?
Могут быть ключи, у которых State null, но при этом одинаковый кортеж Action. Если останется просто else, они ж разными признаются.
>>74408
Последний пункт поправил, действительно хуету сделал. В остальном немного мимо, аргументы с маленькой, действие т.к. из состояния совершается действие и оно в словаре получает оценку. Хз как это можно реализовать не через словарь.
Такая проблема:
1 Вот у меня есть дома на холодильнике сервер
2 На ажурке есть статический сайт, который делает запрос напрямую на мой белый IP
проблема: клиент из европы не может получить ко мне доступ (вот не знаю почему)
3 Кто-нибудь знает как я могу использовать какой-нибудь ExpressRoute или PrivateLink чтобы клиент обращался не к моему IP, а к ажуровскому, а ажурка "под капотом" делала редирект на мой айпишник? у ажурки есть ко мне доступ
Не хочу платить несколько тысяч в месяц ради клента
Посмотрел доку. Десятая винда начинается с 10.0, начиная с висты они для какой-то обратной совместимости использовали 6.х. Так как эта хрень записана в реестре и была возможность обновиться с восьмерки на десятку, реестр мог не обновиться и некоторые легаси программы могут читать 6.3 или даже 6.2 вместо 10.0.
>ключи, у которых State null, но при этом одинаковый кортеж Action
При чем тут вообще action у тебя какая логика сравнения State? И кстати, загугли что такое отладчик и как им пользоваться.
А, понял ошибку. Действительно неверная строчка при логике сравнения содержимого, а не ссылки. Спасибо, анон!
Сап аноны!
Появилось задание - разработать аддон к VS чтобы можно было автоматизировать добавление комментариев
Сам такой хуйней никогда в жизни не занимался. Интересует вопрос, а какой собсна тип проекта выбрать? Extensions development то я скачал и VSSDK тоже (если это не одно и то же конечно), а дальше? Мне выбрать плагин, аддон или что вообще?
Заранее спасибо!
Доку2 открывал хоть, или еще одна жертва обучения через ютуб?
> make sure you have installed the Visual Studio extension development workload, which includes the VSIX template
>...
>Step 1. From the File menu, select New > Project. Search for "vsix" and select the Visual C# VSIX Project and then Next.
Значит все правильно сделал, спасибо!
>автоматизировать добавление комментариев
> GetUser(int id)
> Comment: "Gets user"
> Очень полезно, спасибо.
А чем вас существующие решения ну строили? Тот же гостдок?
Но как это выглядит со стороны таблицы методов и объектов типов? Указывает ли вообще указатель на объект-тип насдедуемого класса на базовый класс?
Я так проверяю игрушечные технологии от реальных, с которыми можно работать. К примеру, в 2017 язык Golang не справился с такой задачей.
С фшарпиком это не совсем верный способ. Эта хуйня мультипарадигмальна - раз. Два - .net там есть -> ты можешь просто те же формы достать и хуячить.
Другое дело, что когда ты начинаешь там более-менее сложные штуки делать, а в довесок которые требуют таки перформанса, вся эта изящность и красивость идет нахуй. Достаточно загуглить обычный такой realWorldExample, где включается бизнас-логика, валидации и проч-проч, как фшарп начинает казаться тем еще говном.
Я что-то очень сильно сомневаюсь, что ты знаешь дх12 или вулкан, задавая такие вопросы.
Потому что функцональщина для тупых. Это самая легкая в понимании парадигма, которая требует от тебя ровно одну извилину. Даже no-code сложнее в освоении, чем функциональщина.
Это не от языка зависит. Тебе уже ответили, что в .net это есть.
1. Таск != тред
2. Нет никакой гарантии, что таск будет запущен в другом потоке, повлиять можно только через TaskCreationOptions.LongRunning и создать таску через фабрику
3. Можно указать тип таски и запустить ее асинхронно
Я изучаю, осматриваю с#, и вот такой вопрос возник у меня: можно ли сделать десктопное приложение с кастомным интерфейсом, как, например, у spotify? Если да, то подскажите какой тулзой
Чем хочешь. Дизайн к туллингу не привязан. Или для тебя небывалые открытия, что например кнопка - это набор картинок? Анимация - быстрая смена картинок.
Я немного посмотрел WinForms, вижу, например, можно сделать кнопку, но скруглить края, например, нельзя.
Кастомный интерфейс для меня, это интерфейс, где ты можешь сотворить хоть круглую кнопку, хоть квадратную, прихуячить анимации и т. д. и т. п. Типа возможности css, но только в десктопном приложении
Я мысли читать не умею.
Спасибо, анонче!
Сделай просто свой планировщик который будет твои таски запускать в отдельных тредах. Что, блядь, сложного-то?
Другое дело, что если тебе прям нужен отдельный тред, то нахуя тебе таски - я не понимаю. Просто делай себе отдельный тред, а асинхронность получай с помощью коллбеков.
Не еби себе мозг. Бери божественный протон и делай интерфейс на html+js.
Avalonia
Что обрывистые? Я создаю тред. Как мне в нем запустить таску? .Result сделает дедлок.
>await myTask;
Пчел, внутри делегата, который передается в Thread, так нельзя сделать.
>myTask.Start();
А результат я куда получу и когда?
>так нельзя сделать
Можно, я разрешаю.
>А результат я куда получу и когда?
Тебе уже предложили через колбек. Вариантов уйма.
Ну смысл задачи такой, чтобы отчёт о расчётах не в консоле писать, а чтобы было чуть больше возможностей для оформления текста. Нужно какое-то простое решение.
Потому что у тебя что не пост, так какая-то новая хуйня. Во-первых, прими таблетки. Во-вторых, падает у тебя проверка от рукожопа, написанная таким же рукожопом.
ret <= (ssize_t)len
На кой хуй нужна эта проверка и что за хуйню она проверяет? Откуда мне знать?
Ну, чисто концептуально - прикриплейд, если я тебя правильно понял.
Ну, т.е. тут я ручками сделал статичный ответ. Можешь делать так же, но генерировать на основе каких-то данных.
А это реально за полдня накостылять, или придётся книги/мануалы/docs.microsoft.com... по этой штуке пару недель читать?
Я всё что касается веба игнорировал всегда, не думал, что макакопомойка может и мне понадобится. А тут вот оно как повернулось...
>по этой штуке пару недель читать?
Как-то в шутку начали соревноваться в написании минимального кода для хелоу ворлда, что разработчики .net в следующей версии запилили апи для написания сайтов еще короче, чем на ноде и оф коз у того анона выше на скрине. Для этого надо было немного изменить лямбды. Начиная с .net 6, запилить сайт это три строчки кода. ASP.NET и раньше был консольным приложением.
А я не шарю. Мы в Microsoft AX пишем. Я лично с этой системой не знаком (лол она ж в visual studio уже) а "мэтры-наставники" чет найти не могут таких утилит, вот мне и сказали писать ее. Хотя я в шарпе чуть лучше чем профан. Могу гит скинуть, поржешь с моего кода
Ну вообще эта херня вполне может быть непонятной для новичка. Сначала запилили нуллы, а потом дали костыль, чтобы выпиливать наллы.
Аксапта. Погугли. Хуйня на которой ERP-системы делают, на ЯП X++. Раньше была как отдельное приложение, щас как аддон к VS
Зацените мой гит, если хотите. Я не сильно шарю в кодинге конечно, но попытался сделать покрасивее. Прошу не слишком сильно меня херачить
- проекты принято делить не таким образом, можешь у джавистов посмотреть как желательно
- как открывать твой проект, если он состоит из двух файлов? Вьюхи и беханда для вьюхи? Даже csproj нема
- код написан курицой-лапой, банально форматировать весь файл через иде не можешь
- напрочь отсутствует архитектура, все насрано в одном файле
- в репозитории ключи не хранят
- скомпиленный проект тоже не хранят, для этого есть релизы на гитхабе и гит игнор
- код не поддается для расширений, все прибито гвоздями
- много аллокаций памяти бездумно
- не последний C#
- Newtonsoft.Json вместо System.Text.Json
- назвать переменную как l - это худшее, что могло прийти в голову
- результат http запроса необходимо проверять на возвращаемый статус код через метод EnsureSuccessStatusCode
- UI смешал с двумя языками
- такую обработку ошибок можно запихнуть в глобальный обработчик ошибок, а не дублировать одно и тоже через метод
- мусорные комментарии
Я бы тебя и на позицию трейни не взял.
Лол ну я ж просил...
Ну в принципе в чем ты не прав но все равно обидно, я старался, недели на это гробил.
> попытался сделать покрасивее
А получилась полная хуйня. Открыл, а там сразу пиздец. Во-первых, викинь нахуй Builded, для этого есть страница с релизами. Во-вторых, что за херня в исходниках? Зачем ты такую еблю придумал, почему весь проект не выложил?
>Создайте WPF-приложение с названием "Label Translator", в настройках целевой платформы выставите ".NET 5.0";
>Скачайте файлы из директории "For Dev" и замените ими соответствующие файлы в решении;
Ну это же пиздец. У тебя в локальном репозитории тоже половины кода нет, зато огромные блобы трекаются? Пусть тебе Yoskutik расскажет что такое гит и гитхаб. Код даже открывать страшно.
>блобы?
>Binary Large Object — двоичный большой объект
гит он в основном для текстовых исходников, а ты туда экзешники и либы воткнул.
Так я же в ридми вписал цель своих действий
У меня вообще была следующая логика:
Я работал с теми файлами которые загрузил в папку For Dev а собранное решение в билдед
Если программисту впадлу самому работать то он скачивает папку билдед
Если программист хочет как то допилить мою прогу, то он делает шаги как я написал и уже работает над функциями для себя
В теории круто (как по мне), на практике вы меня разъебали (ну или ты один) и вроде бы за дело, но меня это задело так сказать
Обычно готовые билды заливаются куда-то в отдельное хранилище на которое потом ссылаешься в зависимости от версии/платформы/компилятра/проц.архитектуры.
У меня этого хранилища нет, решил сюда загружать поэтому (чтобы все в одном месте было). Думал круто будет...
Хорошо что меня на РАБоте еще пока не ебут за мой говнокод. Работает прога и норм
Ну да один и работаю. Очевидно что к большому проекту меня не допускают. Так, пилю мелкие утилиты для упрощения работы сеньорам.
про фубары не знал и не знаю, поэтому делал как умел.
Я вот в душе не ебу, как работают треды на линуксе и каким образом thread scheduler в мультиплатформенных приложениях устроен...
Все по делу, тимлид - обезьяна.
Как в примере отсюда https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.taskfactory.continuewhenall?view=net-5.0#System_Threading_Tasks_TaskFactory_ContinueWhenAll_System_Threading_Tasks_Task___System_Action_System_Threading_Tasks_Task____
> var finalTask = Task.Factory.ContinueWhenAll(tasks.ToArray(), wordCountTasks =>
Вот это wordCountTask получает значение, я знаю, что это что-то очевидное, но уже не могу сообразить как, может кто помочь?
Ну там особо и оценивать нечего. По 1 файлу к просмотру в репе.
Ну старешься - молодец.
Но правда, начинать вкат с декстопа да и еще какой-то ЕРП - ну такое себе.
Что там блядь поддерживать?
Давай, примеры.
А с System.Text.Json вот тебе пример: там нихуя не реализовано изкаробки, на каждые пол шага врпаво-влево (да и даже для банальностей, типа как с нулами) - пиши свое расширение нахуй. И вот где "это дерьмо сложно поддерживать"
Даю пример:
>там нихуя не реализовано изкаробки, на каждые пол шага врпаво-влево
+ проблемы с биндингами
+ хуевый перформанс
+ нет поддержки сорс генератора
+ иди нахуй
>пиши свое расширение нахуй
Говнокодер, кек.
>Вот это wordCountTask получает значение
Это лямбда, входной параметр которой - первый аргумент ContinueWhenAll.
Спасибо, Анон.
Проблемы у тебя с башкой.
Сорс генратор? Так это к пункту о перфомансе. Тоесть аргвмент один: перфоманс. И то тут спорно, если реализовать все фичи нютонсофта, то и перфоманс просядет.
В общем, с тобой все ясно- хуесос, прочитавший рекламный буклет мафкрософта.
С текст.жсоном- надеюсь взлетит. Но пока спорно.
>Сорс генратор? Так это к пункту о перфомансе. Тоесть аргвмент один: перфоманс.
Шесть аргументов превратил в один. Слился.
К примеру, в том же РНР нет ни какой магии. Всё файлы равнозначны и лишь программист с помощью кода определяет что и как будет исполняться.
Кроме того изучать ASP.NET очень долго. До окончания обучения невозможно написать даже простой сайт, потому что просто не понимаешь как этот монстр работает.
Что ты блядь несешь? Из альтернатив - та же ненси плюс куча других уровнем пониже.
Хочешь все сам делать - бери HTTPListener и делай, буквально будет как PHP. В HTTPListener'е тоже много магии? Бери сокеты и делай. Может быть в сокетах тебе магии много? Бери и хуячь драйвер и прямо из сетевухи перехватывай трафик, собирай из него tcp-фреймы, шли в ответ ACK и потом передавай уже приложению собранный пакет.
Там есть особые файлы, которые считаются основными шаблонами, а есть контейнерами. И разница между ними в тонкости написания имени файла. Я так до конца и не понял, потому что в книге про это мало написано. И вообще, я не чувствую творчества, меня просто тыкают носом и говорят делай так-то, без альтернатив. И в чём тогда тут программирование? Они тогда бы уж и писали полноценную CMS вроде WordPress, а "программист" бы просто оформлением занимался.
>Почему для веба есть только ASP.NET и ни каких альтернатив?
Из современного, есть три вида ASP: веб апи, мвс, разор. Из альтернатив есть например gRPC, но ты вебмакак не заставишь его использовать, им только GraphQL подавай с REST.
>К примеру, в том же РНР нет ни какой магии.
Ошибки на иврите и разнообразные странности как возможность найти длину числа пи.
https://phil.tech/2013/wtf-is-t-paamayim-nekudotayim/
>Кроме того изучать ASP.NET очень долго.
Пару раз нажал кнопку "далее" - сайт готов.
>До окончания обучения невозможно написать даже простой сайт, потому что просто не понимаешь как этот монстр работает.
Что ты такое изучаешь в асп, что до создания простого сайта уходит много времени?
>писали полноценную CMS вроде WordPress
Есть цмски на шарпе. Сайты-визитки можешь клепать на джумлах с вордпрессами.
>я не чувствую творчества
Ну так возьми сокеты и делай как тебе хочется. В чем проблема-то? Либа для вебсервера в духе go делается за 4 часа.
Я хотел начать с того, с чего начинал в своё время на РНР, а именно написать сайт-визитку с авторизацией, гостевой и динамическими темами.
Творчество в чем ебать?
В создании шаблонных контролеров и в прописывании ручками "что-куда" есть творчество?
Творчество должно быть в реализации ТВОЕЙ бизнесс логики, а не изобретении Н-го способа создать екшн.
Тут скорее интересно наоборот изучать как они это сделали, как там всякие нейминг конвеншены работают и т.д. Для интереса их можно даже самому переопределить, но такой код - сразу на помойку.
В общем, сиди, учи, и пока не перди тут.
Ну, допустим лично мне было в свое время свою библиотечку для работы с сетью писать, со всеми этими контекстами, диспечерезацией сообщений и проч-проч. Да и сейчас - посмотрел на гошечку и хочется чего-то в таком стиле но на шарпе сделать, типа чтобы:
http.Use(auth);
http.Bind(route, action);
хотя похожее уже в шестом дотнете сделали.
Тм ничего не полочится?
Потому что юнити делает конверт C# в C++ и на юнити C# другой. WPF изначально был для винды, его и не планировали пилить на кор.
>http.Use(auth);
https://docs.microsoft.com/ru-ru/aspnet/core/security/authentication/identity?view=aspnetcore-5.0&tabs=visual-studio#configure-identity-services
>http.Bind(route, action);
https://docs.microsoft.com/ru-ru/aspnet/core/mvc/controllers/routing?view=aspnetcore-5.0
перед тем как высиратсья и размышлять о творчестве, хотябы метаинт пройди, заебал
Чел, блядь, ты тупой или где? Я тебе, сука ты тупая, прямо сказал чего я хотел бы намутить в свободное, блядь, дебила кусок, время(net/http из го, потому что он красивый и удобный для наколеночных решений, и даже minimal api это не то). Ты серьезно думаешь, что я работая 5+ лет не знаю про то что уже есть во фреймворке? Серьезно, блядь? Корона не жмет? Все ж вокруг дегенераты, которые нихуя без тебя нагуглить не могут и только и делают, что массивы перебирают, да в жопе ковыряются.
Охуеть, блядь. Пиздец. Хтьфу в ебало. Хптьфу.
Хуя бомбаж.
Ну по твоим размышлениям о "вордпрессах", ПХП и "творчестве" было очень похоже на вкатуна, который метаинт не осилил и орет о "сложна дайте как в ПХП(((". Да и посмотри тред, тут каждый второй вопрос гуглится в минуту.
Прастити, извинити, что обидел почетного деда.
Анонимная борда, няша. Не я жаловался на то что ASP - сложный. Я просто сказал что весело в свободное от работы время что-то самому пилить.
Стоит ли для опыта поработать WPF разрабом или продолжать искать бэкендерские вакансии?
И зачем тогда они городили эти огороды с виртуальными машинами, если по факту ни какой кроссплатформенности нет? Я вот хотел писать десктопные приложения, чтобы они работали на всех ОС.
Твои десктопные приложения никому не уперлись. Ха-ха.
>с виртуальными машинами, если по факту ни какой кроссплатформенности нет?
Как будто виртуальные машины только для кроссплатформенности делают.
>по факту ни какой кроссплатформенности нет?
Её не было в фреймворке, в коре она по факту есть. Почему не делали сразу - вопрос к майкам. Если ты начнешь дергать винапи в своей программе кроссплатформенность изчезнет вне зависимости от используемого стека.
>десктопные приложения, чтобы они работали на всех ОС.
Ну так и пиши Xamarian.Forms/MAUI, Uno, Avalonia плюс в предыдущик тредах еще какие-то откапывали, пошукай если интересно.
Который камень
>Когда там выходит новая студия?
В ноябре.
>Нужно ли переходить с 2019 на 2022
Писать на последнем шарпе с последним кором можно уже сейчас, если не вс. В вс2019 есть некоторые фишки вс2022.
Страдать будут только те, кто не может себе позволить установить на системный диск несколько инстансов вс и еще сверху всякого говна.
Если раньше все программы были едины в своей концепции исполнения, то теперь есть разделение на консольные, декстопные и веб приложения. Если я создал консольное, то лишаюсь возможности графики и веба. Если графическое - то должен вывернуть логику программы наизнанку, подстроив под событийный механизм. Извините, а если мне нужно вычислять непрерывный процесс и параллельно визуализировать его результаты, то получается я не могу этого сделать? Ведь мне надо постоянно возвращать управление. Если идёшь в веб, то там вообще не понятно как это всё выполнять вне IDE и где дают полноценный хостинг под такого монстра.
у меня проблема подключить к этому сигналР, насколько я понимаю они все так же коммуницируются через сигнал р как и обычний блазор, только вот он у меня не работает с коробки, я понял как с вебасембли отправить сигнал на сервер но мне нужно еще с сервера тригернуть вебасембли, кто работал с такой архитектурой, можете подсказать куда рыть?
А вот и шизик в треде объявился!
>с документацией на тысячи страниц
Это не ты недавно заявился с книгой программиста-анальника, который описывал несколько классов из коробки парой абзацев?
1. Разработка не делится на консоль, декстоп и веб.
2. Консоль позволяет работать с графикой и вебом.
>можете подсказать куда рыть?
Почитать про сокеты, так как у тебя нулевое понимание о них. Если ты получил соединение с клиентом, то у тебя как минимум есть ссылка на это соединение. Так сложно у класса вызвать метод SendAsync?
Смотря какую бд используешь и какой уровень изоляции. Попробуй постгрес.
Ты долбоеб?
Пацаны насколько так норм писать я про возвращаемое значение и сахар? логика если что вынесена вся
Ты пустой ок возвращаешь.
В данном методе ты не должен 404 возвращать. Возвращаей пустой массив c 200-той. Ну или 204 на крайняк, если хочешь.
Роут не долже н быть "олл", просто ГЕТ юзерс/
это я исправил Ok(listCustomers);
спасибо
в своих проектах в возвращаемом типе в контроллерах вместо Task<ActionResult<T>> я указываю IActionResult. Это норм?
так дядя, Task<ActionResult<T>> это для асинхронности что бы сделать запрос асинхронные и отдать какой то статус код обратно, а у тебя IActionResult просто void без получения со статусом кодом
> МВЦ и РазорПагес разные вещи
Это одно и то же, чувак. И построены они по модели MVC. И всё, что тебе надо, чтобы они заработали - прописать одну команду в startup.cs.
IActionResult может отдавать статус код через return Ok(), Unathorized() и тд
Это копия, сохраненная 22 апреля 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.