Существует множество различных платформ и языков программирования, однако среди них нет более элитного, чем C#. Это поистине язык богов, сочетающий в себе простоту использования с поистине неограниченными возможностями. Знание C# — прекрасный детектор современного, умного и успешного человека. Изучение платформы .NET безошибочно указывает на успешного в будущем человека. ITT элита продолжает обсуждает будущее этого прекрасного и современного продукта компании Microsoft. Только в этом треде элитные разработчики ответят на самые острые вопросы индустрии.
3. WinForms или WPF? Зависит от задачи. Для небольших проектов, скорее всего, будет достаточно винформочек. В случае, если разрабатываемое приложение достаточно серьёзное, то возможно его стоит писать с использованием WPF. WPF очень хорошо работает с паттерном MVVM ( https://ru.wikipedia.org/wiki/Model-View-ViewModel ), и позволяет пилить очень кастомизированные интерфейсы с помощью XAML, что в случае WinForms, делать намного сложнее.
4. Мне тут знакомый_нейм сказал, что C# умирает, это правда? Может не стоит его учить? Неправда. C# довольно активно развивается, недавно вышла третья версия .NET Core фреймворка и восьмая версия языка. Весь дотнет понемногу становится опенсорсным, а ASP.NET становится независимым от платформы. В некотором смысле понемногу вымирают десктопные приложения с развитием веб-технологий, но в том же энтерпрайзе он еще очень даже востребован.
5. Какую ИДЕ выбрать? Для Windows самым очевидным вариантом будет Visual Studio (https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx). Студия распространяется в двух редакциях: бесплатная коммьюнити-версия и платный энтерпрейс эдишн. В большинстве случае будет достаточно Community-версии: она поддерживает и C#, C++, VB.NET и F#, а так же имеет возможность установки дополнений Для мака и никсов самый юзабельный вариант - MonoDevelop ( http://www.monodevelop.com/download/ ). Для vim можно использовать OmniSharp ( https://github.com/OmniSharp/omnisharp-vim ). Кросплатформенный полуредактор/полуIDE VS Code ( https://www.visualstudio.com/en-us/products/code-vs.aspx ) Также существуют плагины для Atom'а и Sublime Text, но функциональность там достаточно сильно урезана. Кроме того, в данный момент JetBrains активно пилит свою IDE для шарпа (Project Rider), вероятно в ближайшее время станут доступны первые EAP. IDE заявлена как кросплатформенная, со всем решарпер-функционалом, поддержкой отладки, моно и .net core. SharpDevelop - еще одна IDE для C#, отличается малым размером (около 20мб) и опциональной портабельностью, при этом имея дизайнер WinForms и WPF, а также интеграцию с FxCop, StyleCop и прочими ништяками. Если хочется что-то по быстрому набросать, а выкачивать гигабйты нет желания, то возможно SharpDevelop будет лучшим вариантом.
7. Дополнительные инструменты для разработки на C# LINQPad - сорт оф REPL, с возможностью быстрого подключения к БД и удобной визуализацией данных dnSpy - декомпилятор, малоизвестный форк ILSpy, где реализована возможность модификации IL-кода прямо в EXE и DLL файлах, отладка IL-кода и много других фич для reverse engineering'а. Плюс няшные темы как в студии dotPeek - бесплатный декомпилятор от JetBrains scriptcs - для запуска C# кода как скриптов, возможность использовать как REPL
8. Расширения для студии ReSharper - одно из известнейших. Рефакторинги, умный автокомплит, настраиваемый стиль кода. Платный, но можно стянуть с торрентов Supercharger - показывает "карту" с классами, методами и всем остальным сбоку от кода с возможностью прыгать по ним Indent Guides - показывает вертикальные линии на каждом уровне отступов. Format document on Save - форматирует код каждый раз при сохранении документа Code alignment - Выравнивает код по указанным символам. Удобно, например, при инициализации словарей или в перечислениях
9. Что почитать? - The C# Player's Guide, второе издание (RB Whitaker) - отличная книга для ньюфагов в шарпе, все расписывается довольно подробно, очень много примеров кода. - C# 7.0 in a Nutshell (Joseph Albahari и Ben Albahari) - огромнейший справочник, over 1000 страниц, покрывает почти все области, начиная с синтаксиса и базовых типов и заканчивая интеропом и рослином. Уже появилось издание для 8.0, однако в интернетах пока его нет. - C# 7.0 Pocket Reference (Joseph Albahari и Ben Albahari) - просто выжимка из справочника, можно всегда держать рукой - Pro C# 7: With .NET and .NET Core (Andrew Troelsen) - 1600-страничный учебник по шарпу, покрывает BCL, WPF и ASP.NET, небо и даже аллаха. - C# 6.0 Cookbook (Jay Hilyard и Stephen Teilhet) - книга в формате "проблема-решение", можно пройтись по оглавлению, найти интересные проблемы и попыпаться самому решить, а уже потом посмотреть представленное решение. Книга скорее не для ньюфагов, а для тех, кто уже знаком с шарпом.
10. Более хардкорный материал - 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 структрура", кастинг, боксинг, перфоманс регулярок, коллекций, исключений. Короче все что нужно, чтобы вам перезвонили.
11. Хочу еще хардкорней - C# Deconstructed (Mohammad Rahman) - введение в CLR, модели памяти и выполнения в CLR, байтоебство, JIT. Книга достаточно коротенькая, менее 200 страниц, можно осилить за пару дней. Желателен опыт работы WinDbg и понимание устройства PE-формата. - Expert C# 5.0 with .NET 4.5 Framework - еще одна книга этого автора, в этот раз намного длиннее. Очень много IL, анализа и разбора стандартной либы (те же коллекции), разбор ивентов, дегегатов, асинхронности etc. на уровне байткода. - .NET IL Assembler (Serge Lidin) - ILёбство, во многих местах повторяет документацию MSDN, но при этом имеет много интересных дополнений и заметок. Кроме того все неплохо структуировано и разложено по красивым табличкам
12. Литература по WPF Из более-менее актуального можно выделить пару книг: - Pro WPF 4.5 in C# (Matthew MacDonald) - Windows Presentation Foundation 4.5 Cookbook (Pavel Yosifovich)
13. Литература по ASP.NET - Professional ASP.NET MVC 5 (Jon Galloway, Brad Wilson, K. Scott Allen, David Matson) - Pro ASP.NET MVC 5 Platform (Adam Freeman) - Beginning ASP.NET for Visual Studio 2015 (William Penberthy)
14. Литература по асинхронности, параллелизму и всему такому - Concurrency in C# Cookbook (Stephen Cleary) - книга, написанная в формате "проблема - решение". Кроме базовых вещей, вроде асинков и параллелизма рассматриваются TPL Dataflows, Rx (реактивные расширения), тестирование всего этого асинхронного добра, ну и работа этого всего на более низких уровнях абстракции - Multithreading in C# 5.0 Cookbook - в основном ничего интересного, но есть довольна неплохая глава про синхронизацию, пусть и не слишком детальная - Pro Asynchronous Programming with .NET (Richard Blewett, Andrew Clymer) - опять же, интересного немного, но неплохие главы про асинхронность + UI и анализ дампов памяти в windbg
15. Литература не по шарпу, но так или иначе связанная с языком C# Game Programming Cookbook for Unity 3D (Jeff W. Murray) - разработка на шарпе под Unity Introduction to Neural Networks with C# (Jeff Heaton) - изучение нейронных сетей с примерами кода на шарпе. Под конец пишем программу для распознавания символов и нейроботов. Machine Learning Using C# Succinctly (James D. McCaffrey) - довольная коротенькая книга на тему машинного обучения с примерами кода на C#. Ничего особого: k-средние, классификация, наивный байес, но с кодом, который всегда можно поразбирать, если что неясно.
16. Но я не знаю английский, как я буду это все читать? На некоторые из перечисленных книг есть переводы, которые можно найти на том же рутрекере, однако, зачастую эти переводы неактальны, содержат неточности, и не самые понятные варианты перевода. Кроме того, переводы обычно пилятся только для нескольких самых популярных книг, более-менее серьёзный материал не переводят. Всегда можно сесть со словарем и понемногу читать, переводя непонятные фрагменты. Это очень полезно, так как в любом случае в разработке без знания ангельского делать нечего. Если очень хочется, то гуглить по запросам: "C# 5.0, Справочник. Полное описание языка", "C# для профессионалов. Тонкости программирования", "Программирование на платформе Microsoft .NET Framework 4.5 на языке C#"
17. Что еще нужно знать, чтобы взяли работать за еду? - SQL - подойдет люая книг по MSSQL/MySQL, базовые запросы, SELECT, INSERT, DELETE, UPDATE. Джойны, индексы, нормализация. В контексте шарпа еще ORM: Entity Framework, Dapper - Системы контроля версий - обычно гита достаточно: add/commit/push, merge, rebase, checkout, remote's, разрешение конфликтов, трехпанельные дифф-менеджеры, cherry-pick - Гитхабы-гитхабчики - issues, организация пулл-реквестов, интеграция с appveyor, теги, релизы, маркдаун - Алгоритмы - сложность алгоритмов, сортировки (пузырек, быстрая, вставками), поиск, рекурсия, алгоритмы на строках - Структуры данных - связанные списки, деревья (бинарные, красно-черные, b-деревья), хеш-таблицы, графы - Если идти в веб - HTML, CSS, JavaScript, веб-сокеты, REST - Паттерны проектирования, стиль кода, внедрение зависимостей, MVVM (если хочется в WPF), SOLID
>>1796560 → >var x = new Main(); >x.GetInformation(): The type or namespace name Main could not be found (are you missing a using directive or an assemble reference?) >Ты, кстати, хули с маленькой буквы названия метода написал? Main у меня главный метод, а остальные просто методы.
>>1796765 → >Добавь модификатор static методу GetInformation Появилась изначальная ошибка An object reference is required for the nonstatic field, method, or property
using System; namespace testProject { class Program { static void Main(string[] args) { Console.WriteLine("hello"); var fin = @"C:\text.txt"; Title title = Title.Load(fin); // var x = new Main(); // x.getInformation(title); getInformation(title); } private static void getInformation(obj title) { var titles = thuExtr.Finder(title); // ошибка на thuExtr: An object reference is required for the non-static... } private TFinder thuExtr; } }
>>1797110 Я и на шарпе и на жопаскрипте пишу. Проблема твоих галерщиков теперь в том, что обратно на дотнет они не пересядут, чего не скажешь о тех кто пишет на шарпе.
В общем, хочу сделать платформер простой по типу марио. Подключил SFML. В общем, как реализовать теперь логику-то платформера? Ну, т.е. врагов, камеру, это вот все. Чет не совсем понимаю как оно должно выглядеть. Вот ссылка на балавство с самим SFLM, чтобы увидеть экран с квадратиком после того как откроется окошко - enter. Управление квадратиком - wasd.
>>1797703 > Что такое SFML? https://www.sfml-dev.org/ > Нафиг зип качать, вдруг там вирусяка Качать необязательно, на дропбоксе есть возможность посмотреть содержимое, а исходники будут с подсветкой синтаксиса.
>>1798026 Нуууу, я как-то писал как раз подобное, но в треде все закидали тапками и сказали чтобы не выебывался .net для веба и вообще если кому приспичет он сам на сокетах напишет. Могу только это посоветовать, https://github.com/chronoxor/NetCoreServer, там чутка напильником допилить. Можно еще https://github.com/jchristn/WatsonTcp посмотреть, но мне он не подошел.
>>1797999 Если все правильно понял, я бы по такой задаче колотил gRPC. Там и описание транзакций легко сделать, и пользоваться клиентом удобно, и шифрования всякие хорошо поддерживает.
>>1798096 Это все хорошо, когда ты делаешь поверх Http, блин, я не знаю что у чела за задача, но вот мне нужно было так же реализовывать сервер для работы с устройствами, которые по проприетарному протоколу обмениваются информацией, и знаешь что, на джаве для этого есть нормальные готовые решения, а вот на офигенном шарпе - нет. пришлось свой велосипед городить. А я - тот еще архитектор, кек.
>>1798110 >а вот на офигенном шарпе - нет. пришлось свой велосипед городить значит никому не нужно было вот тебе нужно ты сделал выкладывай в общий доступ
Вечер, котаны. По работе пришлось столкнуться с .NET веб проектом на C#. Помоги разобраться что это, чем его адекватно открыть и как редактировать? Отдельно интересуют .dll библиотеки, как их править? Структура проекта на пике.
>>1799109 > Помоги разобраться что это, чем его адекватно открыть и как редактировать? Кликни на файлик, откроется окно редактора, еще можешь на треугольничие рядом с файликом кликнуть и увидишь там .cs файлы, в которых шарповский код. Судя по структуре, в данном проекте основные файлы лежат в корне, остальное эт ресурсы и какие-то переиспользуемые штуки. Да, раз это новый проект, советовал бы поставить хреновину для рисования диаграммы классов и посмотреть какие классы от каких зависят, какие там методы и если что непонятно - посмотреть код. > Отдельно интересуют .dll библиотеки, как их править? Взять код этой библиотеки и править его, потом собрать и подсунуть сюда новую dll, ну или лезь в il и там правь, кек.
>>1799121 >можешь на треугольничие рядом с файликом кликнуть и увидишь там .cs файлы Беда в том что при "открытии папки" в VisualStudio никаких треугольников нет. Впрочем, как и .cs файлов в каталогах проекта. >основные файлы лежат в корне, остальное эт ресурсы и какие-то переиспользуемые штуки Похоже что на каждую страничку ресурса есть свой .ascx файл, которые лежат в QA. >Взять код этой библиотеки и править его, потом собрать и подсунуть сюда новую dll Декомпилировать, поправить, заново собрать и подсунуть? Оно всегда так работает, или есть какой-то "правильный" путь редактирования dll-лок? ) >ну или лезь в il и там правь Что такое il?
В интернетах искал разные варианты создания .NET проектов, веб сайт/веб приложение / итд, и ни один из вариантов не похож на то что есть у меня.
>>1799249 >но чтобы БД была postgresql? А какая разница? как бы задача всяких там ентитифреймворков и состоит в том, чтобы абстрагироваться от реальной бд.
>>1799249 Двачую анона выше, что именно ты хочешь? Степ бай степ пока от монитора не ослеп – так смысл, если еф инкапсулирует от тебя внутренности базы. Конечно, не идеально, и с постгре я имею ебанутые имена для сущностей не уверен, что причина в постгре, так как с ним я использую скаффолд, а с mssql code first, но все же Просто подними базу, запили коннекшн стринг и дальше работаешь как гречневый программист
Не могу вкатиться уже месяца 2 где то, прошел 4 собеса, два из которых вроде как успешно, но работать так и не начал, т.к. те компании ответили, что пока что нету денег и времени на вкатышей на проекте, но обязательно напишут, когда появятся. На последнем тех собеседовании охуел от сложности вопросов, позиция была трейни, но вопросы совсем охуевшие, зп предлагали тоже нищенскую. Платформа и язык нравятся, милы глазу и приятно работать, уходить в другое более популярное не хочу, но шит, что бы найти хоть какую то работу походу надо будет пробовать что то другое, кто то может помочь каким то лайфхаком по поводу поиска работы?
>>1799638 по SOLID и других подходах кучу вопросов было практических, т.е. таких, на которые без опыта коммерческой разработки не ответишь толком. Подкапотные детали мультитрединга и linq спрашивали, и по разных парадигмах программирования вопросы были, но более общие. Была практическая часть, надо было алгоритм сортировки сначала написать оптимальный а потом еще и актуализировать под требование определенное. Ну на все остальные вопросы которые задавали я вроде норм отвечал, но на конкретно те, которые тут перечислил, в лучшем случаем 2/3 ответил + практическое почти что скипнул, просто в конце теоретически свой подход и идею объяснил. И это на трейни позицию, которая, как оказалось, с шарпом почти не связана, на проекте занимаются какими то приставками под смарт тв, язык там похож на питон, и вообще предлагали чето около 350 в месяц. Впечатления не очень
>>1799208 Не прошу. Достаточно было бы либо коротко объяснить, либо дать ссылки где есть примеры с подобием архитектуры, потому что все что я находил это либо прямо в мейне херачат, либо это видео где чел просто набирает текст ускоренно, а потом говорит что получилось, даже не поясняя зачем он что-то делал.
>>1799611 Единственный вариант - закидывать своё резюме везде куда можно. Сотню в месяц. Только резюме надо вылизать. Не более двух страниц и без вырвиглазного форматирования и всё главное должно быть в самом начале. Причём кидать и в другие города на удалёнку. Попутно решать задачки на leetcode и проходить туториалы от майкрософта.
>>1799650 За 350 в месяц это даже мало спрашивали. >по SOLID и других подходах кучу вопросов было практических, т.е. таких, на которые без опыта коммерческой разработки не ответишь толком.
Вполне ответишь, главное придумать подходящий пет-проект и начать его реализацию с применением этих принципов и паттернов проектирования. Я сначала книгу по паттернам прочитал, потом начал делать такой проект. Вообще это намного сложнее чем выучить базовые конструкции и внутреннее устройство языка, над продумыванием архитектуры я сидел несколько недель, написав за это время пару десятков строк кода, а таких строк нужно было несколько тысяч. В итоге я почему-то нарушил самое главное правило - head first. Начал реализацию с конкретизированных классов, а не общих, но когда дошел до общих, то понял насколько было бы легко если бы я с них начал. Сейчас понимаю, что для полного понимания нужно как минимум 2-3 таких проекта.
>>1799894 >За 350 в месяц это даже мало спрашивали. мде. а еще говорят айтишники хорошо живут. много лет назад на рубиста брали за 800 джуна от которого даже не требовалось знать руби ибо сами обучали и зарплата росла. а тут 350
Берёшь dll, прогоняешь через тулзяку и получаешь проект с C# файлами. Системные дизассемблировать не надо. Судя по скрину тебе нужны только ChartCreator, DatabaseMgr, Navigator, Utility. Потом надо будет все эти проекты собрать в один Solution.
У тебя там даже .pdb файлы есть. Можно дебажить и декомпилировать те функции на ходу.
>>1799995 Red Gate платный. Два выше - бесплатные. И лазить в IL вообще не нужно. Декомпилятор может целый проект за тебя воссоздать (код может быть УГ, но читаем).
>>1799909 Время идет. Число желающих растет с неизмеримой скоростью (конечно же благодаря курсам по программированию и байками, что вкатиться очень легко).
А это нихера не легко. Начинаешь читать требования к позиции джуна (вакансии по треййни очень редки). Так что бы во всем этом разобраться, уходит как минимум год.
Господа, вкатываюсь в неткор, и возник такой вопрос: как мне лучше организовать шаред код в солюшене, в котором есть проекты как на неткоре, так и на винформс? Если я сделаю простой Shared Project, будет ли будет ли код из него работать со всеми проектами?
>>1800224 Шарп самый универсальный в плане легкости и качества. Да, ты можешь на плюсах писать под любую платформу, но это сложно. Да, ты можешь на жопаскрипте писать под любую платформу, но это не качественно.
>>1800515 >это не значит, что XAML хуевый О чем ты вообще товарищ? Я говорю что это РАЗНЫЙ xaml при этом xamarin xaml говно по сравнению с UWF и тем более WPF xaml
и для "будет 1 хамл для всех" выбран самый уебищный из них
>>1800523 Что за бред ты несёшь? Какой смысл делать РАЗНЫЙ xaml если есть уже наработки из wpf, понятно, что есть отличия, но называть это совершенно разными xaml'aми слишком громко. Любой кто писал на WPF, сможет с легкостью писать на xamarin.
>>1800584 >Какой смысл делать РАЗНЫЙ xaml это вопрос к мелкософту
>понятно, что есть отличия, но называть это совершенно разными xaml'aми слишком громко.Любой кто писал на WPF, сможет с легкостью писать на xamarin. вот тебе вопрос на засыпку "А портировать WPF на мауи так же с легкостью сможет? "
зы: А сейчас нет никакого мауи (и долго не будет) и если желание на линукс запустить то где кушать эту универсальность? авалония? опять же попробуйте портировать ))
>>1800473 Вот мне уже тоже интересно, а то мне тут в треде доказывают что на позицию трейни в SOLID надо ахуенно разбираться, и в concurrency и вообще уже быть готовым опытным специалистом.
Посоветуйте, пожалуйста, какого-нибудь видео контента по языку, чтобы было чем занять себя в перерывах между чтением. На ютубе вроде бы много всякого разного, но чет ниче не понравилось
>>1800224 Ну, это. Были плюсы и си в вузе, я паралельно пробовал джаву, а на втором курсе препод показал Шарп и я просто пиздец влюбился. Настолько охуенная стандартная библиотек, тут тебе и с сетью удобно работать, и асинхронность, и многопоточность удобные, и можно писать было графические приложения как человек, а не всеми этими вызовами винапи, в общем, у меня шишка встала, я охуел как это классно. И сахарок, куча хуйни можно сделать очень коротко и лаконично. А потом я еще начал познавать ООП, сначала плевался, но потом, пиздец охуел как оно удобно, если научиться готовить. Сейчас переодически приходится писать еще на плюсах, и я каждый раз ловлю себя на мысли, что да, я и на нем мог бы, но на шарпе я сделаю это быстрее, красивее и еще мне не нужно искать какую-то приблуду, все почти есть из коробки, а то чего нет - давно стандарт индустриальный и ты это быстро найдешь. В противовес фронтенд, там тоже типа писать можно сейчас наплохо, но там каждый нагородил своих велосипедов, которые ты костылями между собой объединяешь и получается кряхтящий-пердящий франкинштейн. Выбрали бы что-то одно и использовали, например решили, все у нас будет Ангулар для интерпрайза и ECMA какая-нибудь одна + jquery для мелких проектов. Нет, блядь, у нас будет 100500 фреймворков, которые делают одно и то же, у нас будет 100500 стандартво, зависящих от хуй пойми чего, а сверху ебанае бабелем, чтобы хуй кто въехал, в то что мы там понаписали. Короче, как по мне - эта анархия нахуй не нужна. Когда стандартизуют нормально, тогда можно будет думать о фронтенде, но сейчас, это какой-то цирк с конями, а судя по коду фронтендеров, даже люди с опытом, там просто копипастят код со стэковерфлоу, потому что блядь, вот ушел на карантин фронтендер из комманды, где я тусую, ну, подумал, доделаю его таски, все равно делать нехуй, открываю, сначала нихуя не понимаю, потом чуть разобрался, гуглю и вижу что его же код это первая строчку в гугле. Блядь, решил пробежаться, а там на 90% код состоит из ответов со стэковерфлоу, пиздец же. И это человек с 8 летнем стажем работы. Просто ctrl+c ctrl+v. И я даже не в упрек ему, типа вот настолько охуенно программировать фронтенд, когда человек который этим почти 10 лет занимается большую часть кода просто копипастит, меняя переменные.
Помогите код написать, только вкатываюсь в C#, Составьте программу – временной интервал. Заданы моменты начала и конца некоторого промежутка времени в часах и минутах (в пределах одних суток). Найти продолжительность этого промежутка в тех же единицах измерения.
>>1800331 Берешь и прописываешь в файлике солюшна все версии фреймворка, какие нужно поддерживать и пишешь с использованием директив препроцессора в местах где код отличаться должен будет. Все. Что сложного-то?
>>1800331 Есть вариант написать библиотеку таргетируя .net standart - по идее должен работать с проектом и на фреймворке, и на коре. Таблица совместимости тут: https://docs.microsoft.com/en-us/dotnet/standard/net-standard Но лучшим решением было бы перенести формы на кор или .net 5, если это возможно.
>>1801087 Блин, хотел выпендрется, но подумал, лучше нормально сделаю. В общем, вот. Статический метод GetInterval вернет тебе как раз разницу, а у нее уже можно хоть часы, хоть минуты смотреть.
>>1801115 Да хосподи, что мешает вам делать вот так вот? 99.9% кода, если это действительно какой-то общий код, будет совместимо, тем более если не выеживаться и не использовать повсеместно сахарок. В 2,5 местах на весь проект пропишет проверку на версию фреймворка и пойдет дальше.
>>1800345 а хули ты хотел? Галера на тебе деньгу должна зарабатывать, а ты батрачить должен, как раб. Тебе задачки-задрочки, а барину мертвый американский президент. Все по чесноку. >>1799650 >чето около 350 в месяц в шепутиарий. Тупо с подачки РАБотать. Порадовал перед сном >>1801075 >джунам щас не платят нихуя смотря о каком языке речь. Даже ссаный пыхер джун в фул стэке 800 минимум зарабатывает
Заметил одну особенность, на /g/ форчана, если спросить какой нибудь вопрос по программированию, тебя просто покроют хуями и назовут ретардом. Тут, тебя покроют хуями, назовут ретардом, но помогут.
Должен ли джуниор уметь решить эту проблему? https://github.com/jellyfin/jellyfin/issues/2959 Недавно начал учить гитхаб, на этот issue стоит good first issue, но чет совсем не понимаю что конкретно делать. >Remove the logic to auto-launch the web browser from the server (StartupWizard.cs BrowserLauncher.cs, etc) Посмотрел на код там, непонятно где логика чтобы браузер запускался именно с сервера, или они хотят чтобы вообще нахуй удалили это? Думаю, я еще далеко не джуниор, может быть даже не trainee.
>>1801330 > пыхер так и застрянет на 1-2к >а шарпист может Маня, проснись, ты дрыщешь. Никому нахуй сейчас этот шарп не нужен. Исключение - мамонты, которые случайно вступили в это чудо. >>1801343 хммм, выбор между 3 либами, которые дрочат сотни тысяч людей и высер мелкософтов с аудиторией 10 аутистов-разработчиков... Что же выбрать...
>>1801336 Быстрый поиск по репо выдал вот это внутри jellyfin/Emby.Server.Implementations/EntryPoints/StartupWizard.cs
Там ещё много чего, что они просят. Один из пунктов обновить вот этот файл (возможно там ещё такие файлы есть), чтобы при запуске дебага браузер авто открывался - jellyfin/Jellyfin.Server/Properties/launchSettings.json
>>1802062 Next желательно чтобы был read-only. CancellationToken надо в следующий вызов передавать.
А в остальном - обычный LinkedList. Код как код, лишь бы с гайдлайнами по стилям внутри компании совпадал и не делал чего-то неествественного в существующей архитектуре приложения.
Если это библиотека, то надо к асихнронному вызову в конце добавить ConfigureAwait(false), потому что библиотека откуда угодно вызываться может.
>>1802073 Ну, про CanellationToken я просто тупанул. Да, понимаю что надо передавать дальше. А если я это делаю чтобы разгрузить класс который разросся? Просто неудобно стало в файле на ориентироваться, приходилось по полминуты скроллить чтобы до нужного куска добраться, либо поиском пользоваться, ну я и думал о двух стульях - сделать partial или вот так вот. И теперь вот думаю, а не зря ли сделал так. Хрен знает короче.
>>1802173 Ну и как тогда? Мне нужно сконфигурировать большую задачу, внутри нее подзадачи, которые как раз конфигурируются и в этих подзадачах могут быть await'ы, порядок их выполнения не важен, эти подзадачи не связанны друг с другом, так же после того как задача сконфигурирована, я должен дождаться ее выполнения внутри какого-то метода, потом, если нужно - извлечь нужную мне информацию, которая была получена в ходе выполнения. Задачи могут меняться от настроек сверху, но не во время выполнения задачи, какие-то могут быть отключены, какие-то новые - добавлены пользователем. Вот и как это сделать правильно?
>>1802226 Не слушай этого проигравшего, который в линкдлисте какой-то лукап углядел. Тут всё зависит от задачи и конкретной архитектуры системы. Где-то это вполне нормальный подход, а где-то у виска пальцем покрутят. Если рассматривать только код с твоего пика, то там ничего вырвиглазного нет.
>>1802226 И зачем тогда тебе ждать выполнения задачи перед запуском другой? Сделай статичный контейнер для задач, при вызове экзекутАсунк задачи запускаются и добавляются в контейнер, при добавлении последней задачи пишешь await Task.WhenAll(taskContainer);
Просмотрел джуниоровские вакансии на hh.ru. Там, где есть веб, больше чем в половине требуется ASP.NET, и в остальных ASP.NET Core. Поясните, мне их что, обе учить? А то выучу я более современную, а меня ведь как джуниора поставят на какое-то легаси, а там всё на asp.net.
>>1802818 Очевидно, что нужно учить более новое, так как если тебя посадят на новый проект, то сроки будут гореть и времени переучиваться с старого на новое у тебя не будет, а если тебя посадят на легаси парашу, то у тебя будет уйма времени и простор для эксперементов, потому что единственный плюс легаси говна это то что оно есть и работает. Внёс нужное изменение, а потом вникаешь в старое легаси и рефакторишь потихоньку.
>>1802849 Если писал на плюсах профессионально, то прочитай про то как сборка мусора работает, как работают таски с асинк-эвейтами, ну и наверное чутка про события будет полезно, хотя их сейчас стараются не использовать, ну и про те моменты что отличаются, типа как наследование тут работает, что ссылки, что значение это вот. А, ну и про LINQ, оно довольно просто, опять же если на плюсах что-то серьезное писал, то разберешься быстро, но помогает сильно упростить жизнь. Да, последнее, про кодстайл не забуть. За кодстайл на самом деле больше всего вломить могут.
Сап. Хз где спрашивать, спрошу у вас, вы к винде тут ближе всех. Есть задача - программно прочитать файл из директории, которая синхронизирована с дропбоксом. Файл локально на устройстве есть, виндой открывается без проблема. Но когда пытаюсь что-либо с ним сделать - сосу бибу, файла словно не существует. Даже copy в консоли выдаёт ошибку. Че делать? Хули оно выёбывается? Если тредом ошибся, пните в нужную сторону.
Хочу к НГ вкатиться на галеру с околонулевым опытом, пока есть финподушка - согласен работать за еду. В 2016-2017 в рамках стажировки чё-то да учил, прочитал "C# для школьников" да "Библию C#" (до "С# Программирование на языке высокого уровня" Павловской так и не дошёл, написал пару простейших приложений, но на тот момент склонялся к вебу и вёрстке больше - сейчас с ужасом понимаю свою ошибку.
Какой мой план действий? Перечитываю вышеперечисленное, а так же в оп-посте, заполняю гитхаб старыми и новыми проектами, курю алгоритмы?
>>1803246 Советую тебе осознать, что не существует работы за еду в бэке, да и во фронте она редко случается. Никто не будет нанимать человека который будет отнимать время у опытных сотрудников, приносить 0 пользы и при этом еще денег на еду просить. В остальном всё от тебя зависит, читай книги, осваивай алгоритмы, озеленяй гитхаб и может удастся втиснуться на вакансию джуна.
>>1803171 дропбокс, onedrive, и прочие обычно делают вид что есть файл, когда его щёлкаешь дважды, он скачивается в бэкграунде и юзеру кажется что файл реально существует локально. Читай доку к дропбоксу.
>>1803283 Я теперь все больше ощущаю, что проебал полимеры Давали шанс тогда выучить, ещё и МРОТ получил бы Пока что я могу и и бесплатно постажироваться
>>1803638 >Пример? Любой проект который написан с использованием требуемого от кандидата стека. Главное чтобы это было что-то отличное от туду листа и не копипаст чужого кода. На предложение решить тестовое пишешь: "У меня есть проект написанный с использованием необходимого стека технологий, прощу зачесть его в качестве выполнения тестового, либо оплатить выполнение тестового." Так ты сразу даешь понять, что достаточно квалифицирован для того чтобы просить деньги за тестовое + экономишь время не тратя его на решение тестового.
>>1803600 Копипастят код со стэковерфлоу, потом оборачивают это в паттерны и типа вот охуенно все сделал. Сейчас у шарпа оч разросся стек, зависит сильно от того куда пойдешь. Скорее всего будешь делать микросервисы, либо поддерживать легаси.
Никак понять не могу. Вот мы переопределяем метод Equals() следующим образом: public override bool Equals(object obj) => obj?.ToString() == ToString(). А в каком случае тут может быть полезен этот знак вопроса? Зачем его тут писать?
>>1804310 > .ToString() - метод тогда вернет false просто.
ToString возвращает string или null, а не bool. А Equals возвращает в данном случае результат сравнения двух вызовов ToString т. е. будет сравнение между null и тем что вернёт this.ToString(). К примеру, можно перезаписать this.ToString() таким образом чтобы он null возвращал, тогда при Equals(null) мы получим true, а по твоим словам ""метод вернёт false просто"
Нахуя нужны другие языки и технологии, если .NET 5 позволяет писать кросс-платформенные консольные, веб-приложения, (бэкенд и фронтенд), игры (Unity), мобильные приложения (Android и iOS), причём с прекрасным высокоуровневым синтаксисом и великолепным перфомансом (не С/C++/Rust, конечно, но лучше всего остального)?
>>1804927 Шарп уже занял свою нишу в бюджетных организациях и энтерпрайзах с виндовыми серверами (коих полторы штуки). В остальном тобой перечисленном есть варианты куда лучше и современнее - дарт, реакт нейтив, котлин, го.
>>1797054 (OP) Можно ли сделать как-то так, чтобы на вход одного метода подавался либо FileStream, либо MemoryStream, и возвращался соответственно либо FS, либо MS? Или надо обязательно два метода запиливать?
>>1805060 >дарт смотри "реакт нейтив" >реакт нейтив Как там дела с потоками обстоят? С нормальной то есть. А ну да. Для приложений формочек оно же не нужно. >котлин неплоха неплоха. Но, как обычно, в бочке меда захерачили пару половников говна в виде синтаксиса и мозголомательных вещей. Чет не видно чтобы все жависты ломанулись в котлин >го. распиареное говно. годится для разной мелочи только
В итоге получаем кучу языков, где все не слава богу. Из которых только котлин куда ни шло, но займет место жавы(не жс) в гуишных приложухах, то есть "андроид онли"
>>1805380 У меня особо нет времени чтобы пощупать и то и другое, да и любовь к языку весьма расплывчатое понятие и приходит где то спустя пол года владения оным. Если сравнивать по скорости входа что будет попроще дотнет или джанго? А если в плане качества и вариативности проектов?
>>1805142 А можно ли сделать как-то так, чтобы вообще нихуя не надо было запиливать, и чтобы оно всё уже было запилено, и допиливалось по мере появленадобности, своевременно, высококачественно, безошибочно, актуально, и ещё и быстро, и ещё и с трепетом?
>>1805411 Я те чё, бля, печатный станок? Его, этот станок, самозапиливать надо автоматизированно, тогда и бабло будет с него высераться, бесплатно и без смс.
Ребятки, можете привести реальный пример использования yield return? Ну, т.е. я прочитал про него, вроде как понял что эта фигня нужна чтобы вернуть IEnumerable<T> лениво. Вроде прикольно. А вот как это использовать-то в чем-то реальном не понял. Просто вот я придумал такую вот фигню, допустим я делаю запрос, в ответе мне приходит длинный json, я его десерелизую там как раз IEnumerable<IResponse>, я хочу теперь по всем респонсам пройтись и что-то в зависимости от респонса сделать, но не могу понять могу ли я использовать yield, а если могу, то как и когда? Для примера, вот код, с абстрактным апи, которое возвращает абстрактные фотки https://ideone.com/q5abi5 . Где где тут можно использовать этот yield и как?
var response = ExecuteRequestAsync(request).First(resp=>resp != null);
В итоге ты получишь либо ответ на запрос от одного из провайдеров, либо пустой ответ, который будет означать, что ни один из провайдеров не смог выполнить запрос.
>>1804927 Именно, тем же вопросом уже пару лет задаюсь.
Когда работаешь с жабой, то складывается впечатление, что это продукт для студентов. Обеднён синтаксисом, инструментарием, какие-то выдуманные школьником наименования. Под каждую платформу надо плясать с бубном по два дня. И потом оно всё равно падает, и сеньоры/архитекторы объясняют, что ты забыл прочитать какой-то доп документ на 1000 страниц или потому что ты забыл поставить какой-то магический флаг о котором знают 2,5 анона или надо версию очередного супер JVM форка установить.
Котлин появился, потому что разработчиков страшно стошнило от работы с жабой. Стал жив благодаря Гуглу с его Андроидом. Теперь его пытаются натянуть куда только можно.
Го/Скала - прикольно, если уж пришлось завязаться на JVM, то можно и окунуться.
React и прочие смузи поделия - это вообще клоунада. Калькулятор, крестики-нолики и сайты визитки вполне пойдёт клепать. Эти программизды считают что выполнение простых миллисекундах операций за 1-10 сек - это норма.
С/C++/Rust - своя ниша, они будут ещё долго нужны.
>>1805142 А можно сделать что-то вроде public static void Method(var param1), где param1 - (string)"путь к файлу" для создания FileStream из него, или же byte[] для создания MemoryStream, а var - это нечто вроде - похуй на тип param1, это может быть как string, так и byte[]? Как выразить это не знаю, но сдаётся мне, что надо букву T куда-то приписать, и вот этот от where, ещё, в довесок.
>>1805678 Хз, я как-то уже будучи сеньором переключился на жава проекты на пару лет внутри большой корпорации. Там было достаточно архитекторов и жава сеньоров, у которых можно было спрашивать как делать правильно. Мой код всегда проходил через их код ревью без проблем. Но я продолжал материться на протяжении всех двух лет. В итоге не выдержал и вернулся назад в дотнет.
>>1805700 Ну, например возможности нормально пометить что может бросить метод. В шарпе ты либо будешь пилить атрибуты свои, либо в коментах писать, а коменты многие не пишут, либо забывают в них написать что метод может кинуть исключение. Возможность в одном блоке несколько типов исключений ловить. Свич в последних версиях удобный, хотя в шарпе тоже стал получше. Перечисления который без всяких методов расширения позволяет дополнительные штуки из себя получать. В шарпе вот енамы по дефолту - чисто для хранения констант, а иногда нужно все равно логику какую-то от этих констант иметь, допустим у тебя в перечислении цвета. enum Color{ RED, GREEN, BLUE, PRIMARY, SECONDARY }
И вот ты передаешь это по коду, и хотелось бы код цвета получить из этого перечисления. Ну вот так вот, хочется и все тут. В шарпе ты будешь вынужден прибегать к расширениям, а т.к. люди не совсем привыкли к тому что у енамов есть какие-то методы, они не сразу будут въезжать в код. В Джаве же никаких проблем с этим нет, у тебя Enum может и данные хранить и вообще, по сути, каждое значение перечисления это инстанс неизменяемый. Это смешной, наверное пример, но на самом деле бывает часто полезно иметь эту возможность. Опять же, в шарпе достигнуть этого можно, но оно там не на своем месте смотрится, потому что, по сути, enum в шарпе - эо набор именованных констант
Это первое что вспомнилось, и чего мне таки не хватает в шарпе немного.
>>1805732 >возможности нормально пометить что может бросить метод >Возможность в одном блоке несколько типов исключений ловить. Меня это в жаве сильно бесило. Код надо стараться писать так, чтобы исключения в принципе не бросались. Всех возможных исключений (особенно когда с чем-то внешним работаешь) невозможно перечислить. В шарпе очень нравится when для фильтра исключений (пик рилэйтед).
switch with pattern matching = awesome! (пик рилэйтед)
>Перечисления который без всяких методов расширения позволяет дополнительные штуки из себя получать. >Using enums for control flow or more robust abstractions can be a code smell. This type of usage leads to fragile code with many control flow statements checking values of the enum.
SOLID все дела. Не стремитесь создавать швейцарский нож из всего подряд! Single Responsibility - делай одну вещь и делай её хорошо. Enum позволяет - упростить читаемость кода; - повысить производительность; - помогает избегать всяких магических значений по всей системе; - предоставляет контракт для взаимодействия между разными частями системы.
>без всяких методов расширения >логику какую-то Open–Closed principle - вместо добавления кучи магии для весьма сомнительных бенефитов делай расширения, если нужно добавить особую логику. Шарп всё правильно делает. Для твоего примера с кодом цвета добавь какой-нибудь HashMap (Dictionary<Color, ColorCode>). У тебя будет разделение логики по смыслу и не надо будет тащить одного монстра везде подряд, даже если он там нафиг не сдался. Особенно (!) если ты enum для поля в БД используешь.
>>1805847 Только запутыванием логики, т.е ты пишешь программу которая будет переписывать твою программу так чтобы ахуели все, даже ты в конечном итоге. Обфускация как вариант, но так себе работает если ты не сам ее писал. Еще есть варианты писать критичный код на С или С++ и через pinvoke вызывать. Ну или обрабатывать критичные вещи на своем сервере отдавай только ответ.
Тупой вопрос. Читаю сейчас про EF Core и там в дб контексте постоянно для конфигурации дб используются выражения вроде: >modelBuilder.Entity<User>().HasOne(p => p.Company).WithMany(t => t.Users).HasForeignKey(p => p.CompanyInfoKey); И собственно вопрос в том, что правильно же я понимаю, что строчки в методе OnModelCreating будут выполнятся только один раз, а потом их из кода можно удалить, потому что они уже привели базу данных к нужному мне виду?
>>1805888 Все языки которые не компилируются в нативный код такие. Но что ты такое хочешь спрятать если боишься что у тебя сопрут? Просто по факту если захотят спереть и нативный код сопрут, так что защита чего угодно сейчас на компе дело условное.
>>1805896 говнокод мой увидят)) ты пишешь десктоп приложение, защищаешь его крутым мега-протектором за 300$, а любой школоло качает de4dot, и декомпилит за 2 сек. твою прогу, меняет авторство на свое, и вуаля - клон твоей программы бродит по сети, со смешным ценником в 100 руб.)
>>1805921 И зачем ты говоришь о том чего не знаешь, долбоебина? Бесплатный обфускатор + аутентификация по сети и твоё приложение в безопасности. У моего знакомого коммерческий проект, он в нём использует такую схему, единственный раз когда его программу перепродавали был в тот момент когда кто-то купил лицензию, установил её на виртуалку а потом образ этой виртуалки перепродавал. Но он это быстро вычислил и аннулировал лицензию, в следующий раз они уже такое проворачивать не стали.
>>1805961 >аутентификация по сети и твоё приложение в безопасности аутентификация по сети вообще ни на что не влияет. А обфускация повышает "да чет лень ковырять ломать"
компиляция в натив которую обещают еще больше повысит этот порог
>>1805994 >аутентификация по сети вообще ни на что не влияет. Обновления сам делать будешь? При её помощи можно добавлять дополнительные слои вида: При закрытии программы можно шифровать ключевые файлы, а ключ к их расшифровке хранить на сервере и получать его при следующем запуске программы. В общем, очевидно, что ты один из тех кукаретиков, которые не разбираются в вопросе, а говорят так как чувствуют.
>>1806008 >Обновления сам делать будешь? хрякер перепродает текующую версию. он влзломал продал и забыл. зачем ему возня с обновами. Если нужны будут обновы то ему снова бабла занесут и все.
>При закрытии программы можно шифровать ключевые файлы и чо. я сниму дамп с открытой проги. делов то. Конечно разные там SecureString, но если я работаю не только с памятью, а могу (а я же могу да) править бинарники, то это уже не защита от получения твоих криптоданных
зы: вот если бы ты сказал что буду получать по сети сам исполняемый байткод, впрочем даже это не защита
>>1806020 >я всё взламать магу!!! >RDR2 до сих пор не взломан
>ему снова бабла занесут и все.
Конечно занесут, а потом еще, им ведь взломанная версия нужна не для того чтобы денег сэкономить, а просто чтобы великого хакира кормить. Всё так, сычуш, всё так.
>>1806027 >им ведь взломанная версия нужна не для того чтобы денег сэкономить, ну то есть все упирается в "неуловимый джо" и "стоит ли ломать или да ну нах" ну это как и везде. Но в случае байткода ломать намного легче и сетевая аутентификация не сильно усложняет задачу
>>RDR2 до сих пор не взломан он скомпилирован в байткод? или все же в натив? зачем ты это сюда принес
>>1805726 В моем окружении все новое пишется на нет кор (и всем очень нравиться), старое тоже все пытаются перевести, если не слишком много трудозатрат.
>>1806027 >им ведь взломанная версия нужна не для того чтобы денег сэкономить, тут вопрос кому им
я покупаю софт который привязан к моей машине (учетке) и отвязываю его. Далее продаю его куда дешевле, но многим и мои вложения окупаются а народ экономит
зызызы: и в тот же рдр2 можно "купить" за сколько там рублей было. 450 вроде. лень смотреть. Я бордерлендс3 "купил" за 100 руб, правда игра говно, но это уже другой разговор
>>1805872 Проверять я конечно не буду, но рискну предположить, что этот код может использоваться при миграциях и валидации соответствия мапинга базе данных. Но смысла удалять не вижу - вдруг захочется еще одну такую же БД сгенерировать для другой среды.
Здарова, котаны. Джун .нета в треде. Скажите, .net/asp.net сильно отличается от .net core/asp.net core? Писал учебный проект на коре, реальный предлагают на обычном. Много там переучиваться?
>>1806087 Отличия не принципиальны. Если проект уже существующий - почти не заметишь разницы поначалу, если новый - немного нужно почитать как намутить ASP.NET Core апликацию с ее IoC, стартапом и конфигурацией.
Когда я использую протокол UDP, то при большом размере файла (больше 64 кб) я не могу отправить его с помощью метода serverSocket.SendTo(file, clientEndPoint); Как я понял, дело в ограничении размера транспортного сегмента/датаграма, он не может быть больше 64 кб (а часто даже не больше 1 кб). Но почему тогда при использовании протокола TCP и метода clientSocket.Send(file); такого ограничения нет и мне позволяют хоть 20 мб переслать за раз?
Требуется помощь! У меня есть веб приложение на асп.нет с айдентити. Я хочу добавить в это приложение веб сервис, который будет возвращать какие-то значения, которые привязаны к пользователю. Не могу понять, как это вместе связать. Апи-контроллер и Авторизацию. Подскажите, плес, господа программисты!
>>1806131 блядь, ничего я не собрался шифровать, мне похую. чтобы самому не писать авторизацию, я использовал то, че уже есть. че ты доебался-то до меня, пидрила обоссаный?
>>1806107 Когда ты авторизируешься, тебе дают токен, который прикладывается к каждому запросу. В этом токене хранятся данные о текущем пользователе. В коре я это делал так - return User.FindFirstValue(ClaimTypes.NameIdentifier); Если ты в обычном .NET то хз, ищи что-то подобное.
>>1806008 >при закрытии программы можно шифровать ключевые файлы, а ключ к их расшифровке хранить на сервере и получать его при следующем запуске программы.
>В общем, очевидно, что ты один из тех кукаретиков, которые не разбираются в вопросе, а говорят так как чувствуют.
Товарищи погроммисты, помогите разобраться с вакансией. Наша компания выставила вот такую вакансию https://kazan.hh.ru/vacancy/38910125 Почему нет откликов? Зарплата не устраивает? У нас в требованиях нет ничего сверхсложного или отталкивающего. Что не так?
>>1806159 >Что ты тут своей аутентификацией сделаешь долбоебушка? ну вообще то он предлагал присылать ключ для расшифровки зашифрованных рабочих файлов на время работы, что не дает взломать без подписки.
Этим можно усложнить хак, но без инета работать не будет. И этот ключ можно выцарапать, что довольно муторно если нет доступа к софту, но коли он есть то просто на уровне байткода прописывается доставание ключа
Конечно можно проверять бинарник на модификацию, запрещать отладчик и так далее. но это уже не "простая обфускация"
>>1806163 1 8??? часовой график работы с 9 до 20 это как? выбирай 8 часов из этого промежутка? 2 Непонятно про рост зарплаты. Вроде бы хотя фуллстек, но 100к это так и останется? 3 я как дотнетчик терпеть не могу фронт. Впрочем я и не зову себя фулл стек.
>>1806249 Человек видит цифру 100к и сразу считает, что это и есть цена, которую вы готовы платить. Поставьте потолок тоже, те же 250к. Хот лучше две вакансии в таком случае сделать: миддл и сеньвор, с двумя вилками.
>>1806107 Создай блин проект с авторизацией и посмотри, кек. Посмтри какая структура у идентити и как он привязывает что-то к себе. Если коротко, то добавляешь пару табличек в БД, у которых внешним ключом будет id пользователя из identity, потом в контроллере достаешь этого пользователя, соответственно и его id, и возвращаешь какие-то данные которые с этим id связаны. Все. Не понимаю что сложного
>>1806163 1. Название поменяйте на .Net разработчик, либо .Net developer, программист ассоциируется с бюджетным дерьмом и нормальный разраб даже дальше читать не будет. 2. Требований слишком много, тут тебе и крипта, тут тебе и бэк с ОРМ, тут тебе и JS с TS, Ангуляром и даже CSS препроцессорами, тут тебе и оптимизация SQL запросов и работа с базами данных. И за всё это 100к. Зачем вы нужны, если джун-фронтендер со знаниями того же React/Angular/CSS с препроцессорами, зарабатывает всего на 30к меньше? А бэкендер может и столько же зарабатывать, а если в ДС/ДС-2 то больше. 3. У вас там в требованиях мидл/сеньор. На них всегда дефицит, и они не пойдут к вам с такими требованиями и такой зарплатой. За такое минимум 150к нужно предлагать, да и то вряд ли вы найдёте человека который удовлетворит ваши запросы, так как уж слишком большой охват технологий, такое просто физически помнить невозможно.
>>1806426 >какой же ты тупой, я хуею. Там только возврат от твоего сервера фиксится, и возвращается нужное значение
Хуею с дегенерата. У меня при шифровке генерируется массив байт, этот массив байт отправляется серверу для получения ключа расшифровки. Как думаешь, сколько времени у тебя уйдет на расшифровку алгоритма шифрования?
>>1806447 сложно имея одну лицензию - получить твой ключ и вписать статично в возвращаемое значение? Хотя так никто не делает, ведь ты ключ заанишь. Делают по другому - где ты расшифровываешь все - подставляется нужное значение, и комментится твое шифрование.
Абсолютно все защиты сходятся на паре маленьких if, твое шифрование, авторизация по сети, ключи все это ломается на изи если защиту делали не сотня людей которые наклепали тысячи таких if в различных местах от разных параметров и в ключевых местах работы программы. Так игры и защищают в основном, тупо потому что затем взломщику надо найти эти тысячи if и исправить их, а это ой как не просто может быть, особенно когда такой триггер срабатывает на редких событиях. И опять же это защита через логику работы когда ты делаешь взлом крайне и крайне дорогим и трудоемким. В идеале ключ используется каким-то образом в работе программы и без правильного ключа она тупо работает не правильно, но это надо на этапе архитектуры закладывать и крайне тяжело поддерживать.
>>1806479 троль поверил, что его защита с бесплатным обфускатором, и его ключем, который приходит с сервера - не ломаемая)) Одно дело - когда продал 20 копий, и твоя прога нах никому не нужна, другое - если счет идет на тысячи.
Да-да, вот только программа довольно популярна, приносит хороший доход и уже пережила несколько попыток взлома. Я понимаю, что школьникам, которые качают игры с торрентов, хочется мнить себя охуительными хакерами и фантазировать о том как они взламывают мир за секунду, но это никак на реальность не влияет, над этим можно только смеяться.
Анон не знает о сайте https://forum.tuts4you.com/, где даже vmprot вскрывают на изи, а он собрался защищать прогу на уровне исходных кодов, че с него взять :)
>>1806527 >>1806519 >>1806541 Хуею с припизднутого зумерка, который насмотрелся сериала Я робот, зашел на форум по реверс инженеригу и возомнил себя хакером. Ты долго еще в тред срать будешь, пытаясь защитить свой влажный манямирок?
>>1806517 Я вот разработчик одного бота для ММО который тоже приносит доход и единственная эффективная защита это вычисление логики на сервере, т.е я передаю сырые данные на сервер, там произвожу вычисления и результат даю пользователю, естественно у меня там авторизация, конфузер и прочее дерьмо типа partial классов чтобы при декомпиляции был 1 файл на 100500 строк, но и это не особо помогает, есть те кто его крякает и дописывают логику. Поэтому я каждые полгода что-то серьезно меняю и логику защиты в том числе и им приходится снова искать способы взлома т.е мы играем в кошки мышки где я чутка впереди так как минимум неделя у них на взлом уходит. Но мне это не особо вредит так как люди сами хотят платить.
Нужно написать инспектор объектов, а точнее свойств. Я это уже сделал, но оно крайне плохо работает на больших объектах потому что рефлексия медленная штука и я знаю что можно сделать ее быстрее если перевести на делегаты, но вот проблема я не совсем понимаю как мне сделать делегат из объекта тип которого только в рантайме узнаю, т.е на вход к инспектору идет object, может кто подскажет что делать в этом случае, как сделать делегат если узнаешь тип только в рантайме через gettype
>>1806565 Не выйдет я его через приват форума продаю где только проверенные, суть в том что на ботов идёт охота и это своего рода защита от бана пользователей
получаешь на вход объект, узнаешь его тип и далее рефлексей достаешь что тебе там надо если нужно читать значения и рефлексия не устраивает, то генеришь всякие propertyReader на каком этапе то затык?
>>1806627 Getvalue работает в 10-20 раз медленнее чем вызов того же метода через делегат. https://mattwarren.org/2016/12/14/Why-is-Reflection-slow/ Вот хочу получать get свойства через делегат, но при этом никакого хард кода Типа(type) потому что на входе может быть один объект из которого я затем делать дерево буду. Но как делать такое без хардкода хз.
>>1806652 >Но как делать такое без хардкода хз. еще менее понятно стало
есть обьект, есть свойства. генеришь геттеры читалки для них либо сам через экспрешены/ilгенерацию, либо берешь одну из множества либ на эту тему, что за тебя сгенерят. Хранишь эти ридеры в словаре <имя свойства, ридер>и используешь для получения значений.
Есть форма, которая создается и показывается сторонним пакетом. Вопрос: как можно наиболее эффективно ее закрыть, или не дать ей появиться? Пока просто в цикле проверяю Application.OpenForms[Application.OpenForms.Count - 1] и закрываю. Но может есть более рациональное решение?
>>1806981 Ну если это твой пет-проект, то конечно не нужны, но реальность такова, что большая часть кода это код под .Net 4.5 без поддержки новых фитчей языка.
>>1807010 Да ладно? Никогда бы не подумал, что если какая-то фича не доступна, то придётся пользоваться тем, что есть. Я спрашиваю, у слайса есть какое-то своё применение, или range operator его полностью заменяет? И нужен ли вообще тип Span в таком случае? Просто в том примере применения типа Span, что я видел, приводится как раз слайс массива на несколько частей, чтобы не выделять память на новые массивы, в которые бы пришлось копировать элементы старого.
>>1807037 >Span Служит для оптимизации работы с памятью, а не для того чтобы заменить цикл for var i = 2; i < 10; i ++ А ренж оператор это обычный сахарок, который сделан по типу петухоновского.
Аноны, имеется приложуха на asp.net core. Там имеется partial view, где происходит аплоад файла. Так вот, эта partial view работает на всех вьюхах, кроме одной единственной, там она даже кнопка "browse" выглядит без стилей и загрузка нифига не работает. Отчего так бывает?
Обновили вакансии. Названия поправим, чтобы было единообразие, старую вакансию удалим и скорее всего поставим зарплатные вилки, а не "от...". Резюме потекли.
>>1806886 >>1806881 Ух ты, анончик, спасибо большое! Нашел нужный кусок, затер, все превосходно работает. Но почему это достигается исключительно через правку байткода? Компилировать даже никак не измененный кусок не хочет - тонны ошибок.
>>1807472 если ты про "дотпик экспортит в проект, а оно не собирается", то это потому что у тебя нет оригинального проекта *.csproj с как оно там собирается Ну и баги декомпиляции, когда оно декомпилится в лабуду
Такой вот тупейший вопрос. Как сделать так чтобы окно консольки всегда было поверх других окон, пока не закроешь его? Я гуглил и все что нашел это страшные штуки с kernel32, маршалингом и передачей IntPtr. А я в шапр-то убежал из-за того что как увидел это в с++ подумал - ну его нахуй. В общем, неужели нет более удобных способов заставить окошко консольной программы быть всегда сверху других окон? Зачем надо? Я сделал простенький таймер рабочего времени в виде консольного приложения, ну чтобы не забывать выйти покурить, если зарабатываюсь, ну и именно такой простенький таймерок в консольке мне норм, но хочется чтобы он всегда висел сверху, чтоб не забывать про него.
>>1807640 У меня на работе линукс просто и я слышал что там вроде были формы, но вроде их только под винду же завезли. >>1807642 Ну блин, проблема на самом деле не в кернеле, а в том что на деле я на линухах сижу и думал что может быть с переходом на core MS завезли какой-то общий апи для работы с консолькой, чтобы такие вот штуки можно было просто делать. Грустненько.
>>1807914 нет. У меня есть украденные китайцами исходники юнити - там С++ код, над которым уже сделана шарп оболочка для скриптинга То что выкладывается на шарпе - это не исходники юнити, это исходники оболочки надстроенной поверх ядра юнити.
Но речь не об юнити, а о том как сделать у себя скриптинг С#. Как например сделано в годоте, bsf и т.д.
>>1807917 >над которым уже сделана шарп оболочка для скриптинга а шарп в чем выполняется? ему нужен рантайм. и этот рантайм есть юнити.
но вообще в теории я бы 1 притащил бы рантайм и юзал бы этот рантайм для ваших шарп скриптов 2 редоставил либу на дотнет, чтобы ее можно было вызвать из шарпа и она прокладка для доступа к моему софту ну или заранее подгрузил ее в исполнение, чтобы о ней даже не думали
>>1807917 то есть ты как рантайм можешь взять что угодно для тебя без разницы. разница будет для скриптующего если он захочет либу какую то подключить, а ее нет под выбранный рантайм. но уже почти дотнет5 так что все уже есть
Начал проходить курс от skillbox по разработке игр на Unity. Ну и сначала ж там идёт C#. Дошло дело до массивов и домашнее задание состояло в том, что бы нарисовать в консоли треугольник паскаля. Ну я закономерно сфейлился. Только по туториалу на ютубе понял суть, это норма?
>>1807950 проблема таких "задач" в том что они на дрочку математики, а не программирования.
Я эту задачу тоже не решу, потому что не ебу как там считается этот треугольник Паскаля на бумажке. На гугление я потрачу 10-20 минут На попытку вникнуть в формулы - 20-30 минут На программирование - 1-2 минуты.
И это реально разочаровывает в таких задачах (и сайтах-задачниках - расстраиваюсь, когда захожу на кодевар, чтобы порешать задачу по программированию, а вместо этого надо решать математическую задачу). Ведь программирование давно уже не про математику - я например на своей работе работаю над серьезным и дорогим софтом . Вообще нихуя математического нет. Все нужные формулы бухгалтерии описаны в тз и постановлениях.
В программировании нужно математическое мышление, а не задрачивание мат формул построения треугольника Паскаля.
Меня вон даже числа Фибоначи бесят - нахуя рекурсию на них показывают? Есть более простые способы показать рекурсию. Я вообще программирование начал изучать в 10 лет - какой блядь Фибоначи, какой матан? Спокойно на нормальных примерах разобрался и с рекурсией и со многим другим.
>>1807964 Так в том то и дело, что суть треугольника и откуда берутся цифры эти я понял за пол минуты, а вот запрограммировать не смог. Т.е. опыта жонглировать данными в массивах еще нет, а они такое задают....
Там по сути то берутся 2 вышестоящих числа, складываются и получается нижнее под ними. И если человеку это легко объяснить, то машине капец тяжело, т.к. для неё понятий "ну там возьми 2 числа сверх" она не знает что такое сверху, сбоку и т.д... нужно думать в цифрах индексов массивов...
>>1807850 Фриланса на .Net тоже нет, исключением будет только если у тебя уже есть как минимум 2 года коммерческой разработки, но это тогда не фриланс уже будет, а обычная удаленная работа. Если тебе фриланс нужен, то учи PHP.
>>1807950 Конечно норма, потому что все эти курсы дерьмо, всю информацию ты сам будешь гуглить и учить, а твои преподы/менторы просто запустят твой говнокод, скажут "ну да, это треугольник" и пойдут дальше. В общем, можно тебя поздравить с проебанными деньгами.
>>1807996 >Конечно норма Фух, я уже испугался что я бездарное существо и в программировании карьеры мне не светит. Дальше задания идут всякие манипуляции с матрицами, не знаю еще как там справлюсь или нет.. >В общем, можно тебя поздравить с проебанными деньгами. Ты думаешь я реально записался к ним на курс? они же просят 4 258 рублей в месяц и дают еще кредит на 36 месяцев. Т.е. их курс по Unity стоит 153к рублей. Я что больной столько платить? Просто скачал на торренте курс.
>>1808007 Ну тогда ничего необычного нет. Очевидно, что по началу тебе придётся гуглить и искать ответ, у тебя ведь нет практического опыта. Тупость определяется со временем, путём возвращения к задачам которые ты уже решал, либо к похожим на те которые ты уже решал. Вот если в таком случае у тебя сложность возникает, значит ты тупой и программирование это не твоё.
>>1808010 >Ну тогда ничего необычного нет. Очевидно, что по началу тебе придётся гуглить и искать ответ, у тебя ведь нет практического опыта. Понял, значит пока не опускаю руки и долблю дальше. А то этот треугольник сильно меня задизморалил. >Тупость определяется со временем, путём возвращения к задачам которые ты уже решал, либо к похожим на те которые ты уже решал. Вот если в таком случае у тебя сложность возникает, значит ты тупой и программирование это не твоё. В жизни еще не слышал такого точной формулировки как определить тупость. Теперь в реал-тайме смогу оценивать тупой или нет. Уже было что возвращался к старым задачам и без проблем их снова решал. А когда было ДЗ - написать игру в числа с любым кол-вом участников так я вообще недовольный своим кодом стёр его и написал заново красиво и лаконично.
>>1808007 >Фух, я уже испугался что я бездарное существо и в программировании карьеры мне не светит Знаешь, я скажу так - многие программисты не столкнутся с реально сложными задачами.
По сути большинство современных программистов, они как... эникейщики. Эникейщик знает как из всего готового собрать нужный функционал. Ему не нужно вникать в детали, он может не уметь пользоваться этим функционалом. Он может не знать всю работу какого-нибудь бухгалтера, но спокойно может собрать ему рабочий компьютер, полностью решающий все задачи бухгалтера. Он просто знает где что взять и как это объединить.
Также и современное программирование - сейчас большинство решений есть в готовом виде, все алгоритмы давно уже написаны, все компоненты давно созданы, все статьи написаны. Если ты не Дональд Кнут, то вряд ли ты что-то новое придумаешь. Да и если придумаешь - не факт что оно кому-то нужно. Вон boost из мира с++ - там сидят крутые боги программирования - а много кому их решения нужны? На шарпе, жабе, расте, и т.д. даже близко ничего такого нет - но это никак не мешает
Задача большинства программистов сводится к простому - взять готовое, и собрать из этого нужное.
Но и как с эникейщиком - чем больше он вникает в работу бухгалтера, тем лучше он может настроить ему рабочее место. Также и с программистом - чем лучше ты понимаешь работу готовых решений, тем лучше ты ими можешь воспользоваться - поэтому всеже разбираться в этом стоит. Но если что-то не получается, это не не поставит крест на твоей карьере - так или иначе задачу ты решишь
Геймдев наиболее близок к этому (именно поэтому в нем самый низкий уровень программирования). Также как и веб. В продакшене в большинстве случаев тоже. Поэтому больше всего побеждают индусы и китайцы - которым насрать на философию, культуру и науку программирования, они просто решают поставленную задачу путем наименьшего сопротивления.
Другое дело что все что я описал - это всеже вредный совет, если долго придерживаться этой философии - ты так и останешься низкоклалифицированным говнокодером. Но на старте это хороший совет - не стоит тонуть в деталях, они сложны и могут тебя утопить.
Так к чему же я это написал? А к тому что сейчас не забивай себе голову - просто пиши код как можешь. Понимание, опыт, навыки - они постепенно придут сами.
Способ стать хорошим программистом всего один - писать код и только писать код. Ну и размышлять и анализировать написанный код - где можно лучше, где получилось криво. Конечно же еще читать умные книжки, смотреть чужой код. Никакие говнокурсы не сделают из тебя сеньора.
Парни с рідої України. Немного скушновано вечерами, кто-то че-то посоветует по фрилансу? Стоит ли вкативается помимо основной работки по ASP.NET, тоетсь по бекенду в подработки?
Привет, посоны. Есть те, кто вначале вкатывался на Java, а потом ему тошно от от этого ЯП стало и перешел на C#? Почему конкретно вы выбрали C# вместо Java?
Суп шарпач. Посоветуйте, как можно сделать заполнение вёрдовских документов на основе шаблонов из этих же вёрдовских документов? Interope требует наличия на клиентской машине офиса, например. Вручную искать нужные теги в xml плохой вариант, так как при верстке шаблона заглушки могут и пополам перебиться
>>1808139 >Знаешь, я скажу так - многие программисты не столкнутся с реально сложными задачами. По сути большинство современных программистов, они как... эникейщики.
Знаешь, я скажу даже больше - это вообще в любой професси. Даже у учёных и докторов (но у них хотя бы порог вхождения выше). Есть реальные специалисты, на которых потом все равняются и цитируют. Их мало. Остальные туда влезли потому что "родители заставили, от армии сбежал, да хз". Зато потом все жалуются на тупизм докторов, на внезапно сломанные устройства, и вообще на криворукость всего и вся. В каждой профессии занимаются "копи-пастой".
Мир заселён тупыми и ленивыми людьми чуть более чем на половину. И вместо того чтобы повышать общий интеллект всей цивилизации мы просто пытаемся выдать всем по рабочему месту (для галочки в администрации, чтобы потом красивые отчёты показывать).
>>1808285 Если можешь работать с новыми версиями (docx), то можно посмотреть в сторону OpenOffice/LibreOffice. Берёшь их либу, клепаешь док и этот док потом в вёрде запросто откроется. Есть как официальные либы под дотнет, так и куча сторонних - https://github.com/oldrev/maltreport
Парни, имеет ли смысл создавать свойство, установить которое можно с проверкой на исключение, а потом использовать его в конструкторе класса? Вот, например, есть у меня свойство Name, я описываю, например, то, как его можно сетнуть и внутри сеттера выбрасываю исключение, если имя задается как-то неправильно. Так вот, при создании экземпляра класса я передаю в конструктор имя, и, если оно было передано неправильно, у меня срабатывает исключение, которое поймать можно, но сам экземпляр созданный уже не будет в области видимости вызывающего кода. Надеюсь, вы поняли, че за ебанину я тут написал. Сам вопрос в том, стоит ли вообще так делать?
>>1808803 Ты когда нибудь видел ситуацию в которой ты ввел имя русскими буквами, вместо английских и у тебя крашился браузер? Вот ты предлагаешь делать такое же поведенин. Очевидно, что лучше либо предупреждать о неправильном вводе, либо не продолжать выполнение программы и ждать правильного ввода.
>>1808803 Судя по твоему описанию у тебя не дойдет до передачи в конструктор, так как ты не смог сформировать свойство которое передаешь оно же выбросило исключение. Так делать можно, но исключения из любой дырки это плохо, выброс исключения дорогая операция и не всегда имеет смысл быть. Поэтому для обхода исключения выдумывают всякие штуки из функциональных языков типа Option, OperationResult, Either и еще куча различных мини типов которые хранят как ошибку, так и положительный результат. Если ты делаешь либу то пользоваться надо исключениями так как их все ожидают, а если для себя можешь попробовать иную концепцию.
Посоны, что за пакет в нугете Microsoft.jQuery.Unobtrusive.Validation? Как им пользоваться? Я думал что он мне автоматом в проект закинет либы для клиент-сайд валидации. Но что-то после установки ничего не поменялось.
>>1797054 (OP) Вопрос по Visual Studio. Я во многие папки (неймспейсы) кидаю docx файл с рабочей документацией. VS мне этот файл автоматически добавляет в проект, чем замусоривает рабочую область. Как указать, чтобы файлы с такими то расширениями не добавлялись?
>>1809075 По поводу формата и места хранения доков. У меня пет-проект для основной работы. Доки - в основном это всякие формулы и их вывод, т.к. в коде потом хуй поймёшь, откуда это взято, скрины из учебников, графики и т.п. Удобней ворда для этого нет. Хранить в отдельной папке доков пробовал, но не канает, т.к. теряется, надежней в папке рядом с исходным кодом.
>>1797054 (OP) Почему нет обобщённого интерфейса ICloneable<T>? Есть только ICloneable, который возвращает object. Если мне нужно производительное клонирование, стоит ли самому определить интерфейс ICloneable<T> и использовать его?
>>1809209 он проблемный. Если он наследник ICloneable - плохо, а если не наследник тоже плохо Нельзя повесить ограничение на T (этим страдает и ICloneable) и проблемы с наследованием в итоге забросили как есть
>стоит ли самому определить интерфейс ICloneable<T> и использовать его? если он нужен то конечно.
>>1797054 (OP) В LINQ есть .LastOrDefault, я думал он начинает проход с конца коллекции, а он просто переназначает переменную result, нахуй такой оверхед нужен? Может быть есть другой LINQ метод который начинает обход с конца коллекции?
>>1809261 Хмм, что-то не очень понятно. Может есть пример какой? Обобщённый интерфейс же в любом случае реализуется программистом, т.е. в любом случае будет возвращать инстанс типа T, каким бы T ни был, даже если при этом будет ковариантность, всё равно всё будет работать. Если он не реализован нормально, то код просто не скомпилируется. А если реализован, то программист знает, что делает.
>>1809298 Вероятно, в этом случае нужен интерфейс IIndexable, который будет иметь Lenght() и this[int i] для тех коллекций, которые это допускают. Коллекции, которые так не могут, или могут, но плохо (связные списки, например), не будут его реализовывать.
Коллекция из 10 элементов, если последний удовлетворяет условию, то LINQ пробежит всю коллекцию, потому что начинает пробег с начала коллекции. Но если начинать с конца, то можно сразу получить результат, т. е. это -9 операций. Просто как раз возникла ситуации в которой нужный элемент будет ближе к концу коллекции, а в большинстве случаев именно последним, сначала написал с линковским .Last, но потом решил заглянуть в сорсы этого .Last и увидел, что лучше написать обычный цикл for var i = arr.Length - 1 ... Я то думал, что в LINQ такое учитывается, а теперь придётся каждый раз сорсы смотреть...
>>1809312 в LINQ есть оптимизации на тему "если это коллекция то неча по ней бегать а возьмем Count" но в корне лежит именно IEnumerable как что-то по чему можно пробежать. и есть велосипеды которые делают как раз то что ты хочешь, то есть при их наличии и правильно подключенном неймспейсе будет подставлен более оптимальный вариант но лучше другие имена давать таким методам
тут нет идеального решения. слишком общая абстракция.
>>1797054 (OP) Я новичок в шарпе, и у меня вопрос: зачем вообще нужны свойства? Чем function(object.Property) object.Property = value лучше, чем function(object.Property()) и object.setProperty(value)? Это при том, что недостатки очевидны: теперь безобидно выглядящий код может делать любую херню и работать сколь угодно долго.
>>1809291 ну вот навскидку у нас есть класс Foo : ICloneable<Foo> и вот мы делаем наследника Bar : Foo
и тут если мы захотим клонировать только Bar то нам придется так public new Bar Clone() => new Bar(); и мы сможем использовать Clone везде где у нас Bar (пофиг нам на клонируемость Foo допустим она нам не нужна)
но если вдруг стала нужна и где то принимают Foo и делают его клон, то получают в результате не Bar и значит у нас только один вариант в Bar
Foo ICloneable<Foo>.Clone() => new Foo(); Bar ICloneable<Bar>.Clone() => new Bar();
разом ломается использование Clone без каста к интерфейсу.
то есть у ICloneable<T> есть побочные эффекты, которые не способствуют его введения в общую библиотеку
>>1809345 Возможность не писать гет/сет руками появилась намного позже самих свойств. И с учетом expression-bodied statements это всего две лишних строчки на свойство, стоит ли игра свеч? Поля нельзя юзать в рефлексии?
>>1809329 Потому что некоторые данные класса нужно не только получать, но и устанавливать. Установка (изменение) некоторых данных класса иногда требует проведения проверки или вызова события, например, на отрисовку нового значения в форме. Это можно легко решить написанием двух методов типа Get_some_value() и Set_some_value(). Но это выглядит уродливо, и глазу приятнее просто написать Point.X = 100500, чем Point.Set_X(100500). В обоих случаях при выходе Point за пределы рабочей области, например, предусмотрена дополнительная логика.
>>1809347 >не писать гет/сет руками появилась намного позже самих свойс я про гетпроперти() сетпроперти() МЕТОДЫ как они в жаве где это тупо методы по конвенции и появилось же. то есть очевидно же что свойство тупо удобнее методов в своем определении конечно в шарпе это вылилось в необходимость все таки писать {get;set;} чтобы отличалось от поля, но шарп когда появился котлину было проще оглядываться (и даже при этом они нах*ртили там с конструкторами и теми же полями)
>>1809347 >Поля нельзя юзать в рефлексии? Понял, это тупой вопрос. Но всё равно, можно было сделать свойства как самостоятельные объекты и при этом оставить синтаксис методов, которыми они фактически и являются, а не полей.
>>1809349 "Приятно глазу" - это вкусовщина, мне приятнее вариант с методом, потому что присваивания переменной - это операция занимающая всегда плюс-минус одно и то же время и вообще, самая простая и привычная программисту операция. А установка свойства может делать любую херню. Слово get в названии геттера использовать необязательно, так что фактически имеем разницу между obj.Prop() и obj.Prop.
>1809351 >Поля нельзя юзать в рефлексии? ты можешь найти свойство по тому что оно свойство. и взять у него гет сет метод. ты можешь передать PropertyInfo куда то
в жаве ты будешь искать методы по конвенции (и не дай бог обфускатор какой по ним прошелся) и поскольку это просто методы то не факт что эти методы есть нужные тебе свойства нужно навешивать аннотации чтобы не ошибаться и тому подобный огород
> как самостоятельные объекты и при этом оставить синтаксис методов а кому нужен этот синтаксис методов. свойства не запрещают тебя писать в старом стиле. но чет никто не хочет загромождать методами при наличии свойств. сахар он вкусный
>>1809350 Я имел в виду, что когда Хейлсберг придумывал (заимствовал?) свойства, возможности не писать геттер и сеттер руками еще не было, значит он руководствовался чем-то другим, когда их вводил в язык.
>>1809354 >сахар он вкусный Ты просто говоришь так, как будто синтаксис полей очевидно лучше синтаксиса методов, хотя количество символов, например, практически одинаковое.
>>1809353 Нет причин, требующих использовать свойства. Делай как нравится. В C++ времён моего универа, вроде бы свойств и не было, и все так и делали, писали геттеры и сеттеры.
>>1809359 >Я имел в виду, что можно было оставить преимущество для рефлексии ты щас про какой язык то говоришь. в шарпе поля и свойства синтаксически равны только для клиента - так клиенту и не нужно знать к чему он обращается. Аж никогда. это классу нужно свойство чтобы можно было влепить туда сеттер и геттер который что то делает
тут вопрос "а зачем нужны поля, ну оставили бы одни свойства" - ну поля это все таки поля. к ним вызов другой, а не как к методам со всеми вытекающими
Часто используются для сериализации всяких JSON строк. Забабахал дефлотный { get; set; } и забудь про этот DTO объект.
Ещё очень удобно использовать для read-only данных. Через функцию можно напихать любого кода, который может переписать значение переменной. Но если у тебя у свойства только { get; } то записать тебе туда после инициализации класса ничего не получится.
И есть еще всякие { get; private set; } В общем удобно. Тошнило от написания такого же функционала в Жаве.
>>1809356 в WPF есть биндинги на свойства. Например тут мы биндимся на свойство и привязка работает в обе стороны
...Text={Binding PropertyName, Mode=TwoWay}
А в случае методов что?
...Text={Binding getPropertyName, Mode=TwoWay}
стоп стоп. какой гет. это двухсторонняя связь. семантика в жопе Завяжемся на имя бэкендфилд? так оно приватное и его вообще может не быть. ну ладно пусть будет конвенция типа PropertyName это значит искать 2 метода компилятору гетPropertyName и сетPropertyName компилятор же можно научить? можно. А если захотим методы вида сетPropertyName но с перегрузками, это ж методы почему бы не иметь такую необходимость - а вот нечего хотеть ишь ты хотят они
далее есть Fody который в свойства вписывает вызов INotifyPropertyChanged ну чтобы ручками не писать. Он то знает где свойства чтобы в них вписывать а с методами он должен угадывать что метод вида сетФу(бла, бар) это именно сеттер, а не просто метод в который лезть нельзя
ну можно аннотацию добавить да
А можно просто использовать настоящее свойство, как точка где собрано в куче имя и геттер и сеттер и сущность свойство для рефлексии, чтобы не гадать, ну и писать коротко, когда сеттеры и геттеры еще не нужны
Пацаны, как себя вести по мужицки с временем? Все перевел на DateTimeOffset
Что делать с таймзонами оффсетами в следующих случаях?:
1. Приходат дейттам с оффсетом/таймзоной - все гуд, сохраняем как есть. 2. Приходит дейттайм БЕЗ оффсета/зоны - шо робить? По умолчанию сериализатор ставит оффсет рантайма. Это норм? Можно ли настроить, чтоб ставил конкретную зону в разных случаях,
>>1810644 >Это норм? Зависит от приложения. >Можно ли настроить, чтоб ставил конкретную зону в разных случаях, Можно. Указав в настройках десериализации, либо написав свой конвертер для свойства с временем.
Как правильно в разоре сделать отображение картинки, только в том случае, если она есть на сервере? Сделал так, но выглядит как говно @if (File.Exists(System.IO.Path.Combine(env.WebRootPath, "images", Model.ImageName))) { <img src="/images/@Model.ImageName" /> }
>>1810657 >Можно. Указав в настройках десериализации Как? Не нашел такого кейса. Такое ощущение, что никто вообще не парится о дейтаймах без тамзоны и всегда ожидают с...
>>1809329 Потому что есть кодстайл, по которому у тебя в принципе не должно быть полей торчащих наружу, и ты вызывая Point.X=abcd понимаешь что вызываешь метод Point.Set_X(abcd). Зачем оно нужно, затем чтобы не заставлять программистов кучу копипастного кода писать, т.к. в 95% случаев у тебя свойство будет prop{get;set;} и миллион строчек с Get/Set_Prop просто забивают кодовую базу. Посмотри проект на джаве какой-нибудь, для сравнения, очень весело продираться через 500 строчек геттеров-сеттеров, к логике особенно если долбоеб их никак не группировал, а херачил как попало по мере необходимости.
Ну и да, тебя почему-то не удивляет то что в C++ у тебя оператор битового сдвига используется для манипуляции с потоками, как-то живут и ничего. Иди в С++ тред поплачь о том, что ты вот ожидаешь что будет битовый сдвиг, а там пидоры писавшие стандартную библиотеку переопределили его и теперь ты вот не можешь хелловорлд написать.
В общем, тупой вопрос. Смотрите, я делаю консольное приложение. Хочу чтобы там можно было использовать комбинации клавишь, типа Shist+Ctrl+C - скопировать строчку целиком в позиции курсора, alt+стрелочка - передвинуть строчку в направлении стрелочки ну и т.д. Так вот, я чет не понимаю, есть ли способ это реализовать стандартными средствами работы с консолью в .net или таки придется пилить свою абстрактную клавиатуру и в ней реализовывать все это? Не очень сложно, но просто я опасаюсь что оно будет конфликтовать с тем что в стандартной либе есть. Может быть проще в данном случае отказаться от шарпа и херачить на чем-то другом, например плюсах?
>>1810738 Ты совсем тупенький? Как по твоему программа должна узнавать какой часовой пояс тебе нужен, если в JSON строке он не указан? Если тебе нужен всегда один offset то ты либо можешь написать свой конвертер для данного свойства, парся строку с использованием конструкции вида: DateTimeOffset.Parse(reader).ToOffset(TimeSpan.FromHours(нужное тебе смещение)); Либо использовать перечисление DateParseHandling.None и парсить дату из строки уже после десериализации. Можно отдельное свойство сделать которое будет возвращать тебе DateTimeOffset дату из строки-свойства.
>>1810762 Ты посоветовал сеттинги и конвертер. Сеттинги я и сам дрочил до этого - ничего не получилось. Я и уточнил. А конвертер да, не хотелось так заморачиваться. Ок, пасиба в общем.
В принципе, я могу просто надеяться на рантайм, что он в ЮТС будет и все будет чикипуки...
>>1797054 (OP) Есть где-то ".cs"-файл, который позволяет шифровать-дешифровать данные, а также подписывать - эти данные (а не только их хэш), и данные произвольной длины, при помощи RSA-ключей (одного ключа - приватного, а другого ключа - публичного)?
Мимо глянувший на описания дефолтных методов работы с RSA, и безуспешно пытавшийся что-то с этим сделать.
Есть шанс сейчас полностью выбрать один из двух стеков java (+kotlin) или C# (.Net Core) Я совершенно не ньюфаня, просто предоставляется возможность полностью погрузиться в одну из платформ, но внятной и глубокой информации по этому выбору нет (везде что-то поверхностное). Есть у кого интересные мысли по поводу той или иной технологии, любое мнение будет полезно.
Если это мобилки, то я бы все равно выбрал Java+kotlin, потому что при всех историях о том что net.core+Xamarin пригоден для реальной разработки, оно не совсем так, потому что комьюнити для мобилки на .net милипиздрическое -> ответов на тупые вопросы и нормальной поддержки от тех кто сторонние библиотеки пилит - хуй няйдешь. Банально, я 2 года назад вынужден был на xamarin.forms пилить приложение, так вот, заказчик хотел treeView, и этой простой хуйни нет из коробки, чтобы запилить ее так чтобы она и на андроидах и на ios выглядело нормально, потребовалось в разы больше усилий, чем если бы просто 2 проекта паралельных делалось, просто потому что хуй найдешь готовые решения(тогда даже ебучий синкфьюжн не сделал еще этого). Вооооот. И там такой хуйни навалом было. Еще и баги самого Xamarin, о, а как заставить это одинаково на андроиде и IOS выглядеть - да хуй знает, будет смотреться как говно инородное. А если не формы, то это фактически не особо отличалось бы от нативной разработки, только работало бы все хуже и единственный плюс это язык. В общем, для мобилок - 2 года назад Xamarin был хуетой, ХЗ как сейчас, с того времени не работал с ним. А вот с Java на мобилках покодил и блядь, ну серьезно, я чувствую себя ебанатом из-за того что изначально согласился на Xamarin, надо было продавливать нативную разработку, но это была первая работа и я не знал что можно так.
Веб - тут примерно одинаково. Выбирай по принципу что больше нравится. Как по мне для веба asp.net (core) охуенная хуйня. Все есть из коробки, то чего нет ставится парой нугетов, на любой вопрос ответ за 2 секунду гуглится, кестрел охуенен, ненси тоже, примеров - жопой ешь, майки еще и за эти годы исправились и теперь у них более-менее нормальная документация и примеры, а не как раньше: Console.WriteLine - печатает строку в консоль.
Декстоп. Если онли винда, то .net(core) будет получше(все есть, xaml - охуенно, все новые фишечки тебе завозят, короче ляпота). Если предполагается что гуй будет еще и на линуксах-хуинуксах, то тут как с замарином, оно вроде как есть, а по факту хуйня и больше боли вызывает и, наверное, Java окажется опять лучше, хотя я кроссплатформу на Java на писал, потому хуй знает, может быть и у джавы там не все так хорошо.
Если какие-то служебные утилиты, типа сервисов и консольных штук, то тут как с вебом, и там и тут все есть. Тут выбирай сердцем, кек.
Что еще может такой нуб как я сказать-то? А хуй знает. Юнити я в расчет не взял, юнити позволяет решать проблемы что есть у замарина, но это оверкилл по мнению многих, однако, как по мне, это единственный нормальный способ без лишних телодвижений заставить приложение выглядеть более-менее одинаково на всех платформах, не тратя кучу времени.
Воооот. Но я нуб, который всего 3 года опыта работы имеет, можно не брать мое мнение в расчет.
>>1811343 интересно как ты с жавакотлином собрался под иос кодить ) А про "выглядеть одинаково" тем более. Одинаково выглядят только вебприложухи. А хамарин он же нативные контролы под капотом юзает.
>>1811330 В плане удобства хамл на голову выше стоит того пиздеца что городишь в андроид (а то и на 3 головы). но хамарин сыроват. там еще много багов которые нужно править. В андроид только с их aac (архитетуре компонентс которые) и котлином стало удобоваримо. Товарища выше от жавы почему то не тошнит, стойкий товарищ )
для веба асп.нет (коре) имхо удобнее ну а для десктопа - божественный хамл но да. с линуксом только авалония, а оно не родное.
лично я под андроид предпочитаю котлин, в остальном шарп
>>1811330 Если хочешь мобилки или энтерпрайз, то джава. В последнем можешь встретиться с жутким легаси и анальными ограничениями на работах. Если банк, то могут попросить пройти полиграф, будут строго следить за тем, что ты делаешь, могут ограничивать интернеты и не давать самому ставить нужный софт. Слышал, что где-то даже заставляли сотрудников соблюдать дресс-код. Но платят неплохо.
Но это не так важно. Если хочешь вкатиться на работу, то смотри, что популярнее в твоем городе. Там, где я сейчас живу, вакансий джавы в 1.5-2 раза больше шарпа. А в родном мухосранске наоборот, примерно 1-2 на джаве и 10-15 на шарпе.
Приветствую олдов. Наметил тут себе план чтения на ближайший год. Дайте ревью какое-то. Все ли в том порядке расставлено? Что еще посоветуете в дополнение к этому? 1. Эндрю Троелсен, Филипп Джепикс - Язык программирования C# 7 и платформы .NET и .NET Core. 2. Джозеф Албахари - C# 7.0. Справочник. Полное описание языка. 3. Роберт Мартин - Принципы, паттерны и методики гибкой разработки на языке C#. 4. C# 8.0 and .NET Core 3.0 – Modern Cross-Platform Development Fourth Edition. 5. Бен Уотсон - Высокопроизводительный код на платформе .NET. 6. Роберт Мартин - Чистый код. 7. Что-то по работе с базами данных. 8. Что-то по алгоритмам и структурам данных. 9. Что-то по работе с git. 10. Стив Макконнелл - Совершенный код. 11. Роберт Мартин – Идеальный программист.
>>1811495 Советую почитать какой-нибудь максимально короткий гайд по языку, за пару вечеров, типа метанита. А дальше ставить себе задачи и решать их, изучая по ходу официальную документацию, стековерфлоу и т.п. Практика - 80%, теория - 20%.
>>1811726 >чистый код, что-то по базам данных, алгоритмам, git >6+ язык Вытекаешь. Никто и не говорит что для 6 языка нужно заново изучать информатику. Видно же что он только вкатывается.
>>1811884 NET 5 - новая версия кора, из Framework туда особо ничего нового не переносили напрямую. Все дальнейшие усилия по разработке будут направлены на NET 5. Назвали его так - чтоб оказать, что он уже может примерно все, что мог Framework, чтоб избежать путаницы с .NET Core 4 vs .NET Framework 4, чтоб избавится от дополнительного слова в названии (Core), поскольку это единственный актуальный фрейморк.
Поясните мне в чем суть рекордов и зачем я их должен использовать? Ну, т.е. я типа понимаю, что это, но какой юзкейс? Скажем, вот я работаю с EF, правильно ли я понимаю, что если я объявлю модель рекордом, то ничего там менять не смогу и чтобы внутри контекста было изменение я должен буду явно вызвать апдейт в который передам новое значение? Просто если так, то там же куча всего должно поломаться, т.к. на текущий момент будет кинуто исключение что объект с этим ID захвачен контестом и ссылки не совпадают.
Ладно, не для EF, наверное для каких-то общих ДТОшек получается, типа запрос регистрации с данными для регистрации? Я правильно понял? Но ведь опять же, а в чем смысл? Ну да, я не изменю свойств пришедшего объекта, но если у меня регистрация это сервис, который просто принимает данные для регистрации в виде простых типов и отдает результатом составной объект с данными для клиента, то я все равно могу, в теории попортить то что пришло, просто достав строку из рекорда и что-то с ней нехорошее сделав, а переписывать сервисы на рекорды ну, тоже зачем, эти сервисы кочуют их проекта в проект и логика там не меняется кучу лет уже как.
В общем, я не против этой фишки, но не совсем понимаю область ее применения, может быть кто-то объяснит тупому, зачем оно надо вообще?
>>1811876 Сравнивал, тесты по производительности делал, в проде в огромных приложениях использовал. Заявляю: "Лучше пока не придумали" - это вкусовщина.
>>1811936 Селфконтейнер сборка - хуйня. В некоторых случаях она все ломает нахуй. Например, если тебе нужно запилить демона, который на винде будет как виндовый сервис работать. Винда это время распаковки считает будто сервис не отвечает вовремя на запрос и вырубает к хуям. Такие вот дела.
Больше половины функционала не поддерживается и предлагаются использовать костыли, а для чего-то даже костылей нет.
Newtonsoft самая популярная библиотека, использовать что-то другое будет человек, который хочет показать всем "смотрите, я не самое популярное решение использую, я не такой как все!".
Только копаю в сторону шарпа и еще не совсем понимаю asp.net. В общем, достижимо ли создать на шарпе встроенный веб сервер (portable)?
Сам сервер нужен для скачивание статических файлов по http, с какими-то предварительными настройками (запустил файл, дал ссылку человеку, потом закрыл). Можно ли с какой-нибудь сборкой kestrel или другим сервером сделать подобное, с "--self-contained"?
>>1811959 Популярное не всегда значит "самое лучшее". То что там в списке помечено как "не поддерживается" или "имеется свой вариант" либо очень редко используется, либо в дефолтной библиотеке просто используется по другому.
Aspnetcore и куча библиотек к нему по умолчанию System.Text.Json используют, и чтобы подключить Newtonsoft иногда приходится кучу телодвижений сделать. Но по большей части это дело вкуса. У нас в команде много кто новой библиотеки вообще ещё не видел и тащат Newtonsoft просто потому, что не вкурсе альтернатив.
Newtonsoft проигрывает в производительности, особенно на больших объектах и на хайлоаде.
>>1811680 Двачую, практика — лучший учитель. А маняпаттерны всякие, это знание из разряда изобразить 10 типов сортировок, которые нужны в основном чтобы проходить собеседования.
>>1812159 >либо очень редко используется, либо в дефолтной библиотеке просто используется по другому.
Вот тебе два примера:
>Newtonsoft.Json can serialize or deserialize numbers represented by JSON strings (surrounded by quotes).
В Text.Json тебе к каждому такому свойству нужно будет прикручивать отдельный конвертер и указывать его в атрибутах.
>Newtonsoft.Json accepts non-string values, such as a number or the literals true and false, for deserialization to properties of type string.
Тоже самое - отдельный конвертер. Хотя довольно часто встречаются ситуации когда тебе вместо строки приходит false или свойство может быть либо числом, либо строкой.
>Newtonsoft проигрывает в производительности, особенно на больших объектах и на хайлоаде.
Нет ни одного нормального бенчмарк. Все они используют самый примитивный функционал, даже не удосужившись прочитать вот этот раздел: https://www.newtonsoft.com/json/help/html/Performance.htm + Text.Json не поддерживает поля, т. е. даже для простейшего DTO тебе нужно будет создавать объект с свойствами, что скажется на дальнейшем его использовании так как вместо быстрого считывания поля ты получишь вызов метода. В итоге и здесь стандартное решение сосёт, а всего лишь нужно прочитать документацию и оптимизировать самые нагруженные участки кода.
>>1812205 >Нет ни одного нормального бенчмарк. Все они используют самый примитивный функционал вернее базовый. И ньютонсофт ясен пень хуже в скорости работы и в аллокациях, но лучше по фичам. Кому что важно, тот нужное и выбирает. System.Text.Json тоже не самый шустрый. Он просто искаропки и там есть документ модел System.Text.Json создавался как "меньше фич, зато быстрее + блазор". Потому там даже аттрибуты свои
>DTO тебе нужно будет создавать объект с свойствами, что скажется на дальнейшем его использовании ну это уже экономия на спичках серьезно. В dto то экономить ))) это нихера не hot path
>>1812205 > вместо быстрого считывания поля ты получишь вызов метода. > В итоге и здесь стандартное решение сосёт Плюсую. У меня на работе есть один евангелист Text.Json, который чмырит Newtonsoft и старается отовсюду его убрать доубирался настолько что поломал код, потому что в некоторых классах были поля, а не свойства. Хорошо, что проект был нерабочий, и мы его только пилим перед запуском. Пообещал выкинуть отсюда, если он додумается сделать тоже самое на другом проекте, который отвечает за огромнейшие деньги
>>1812233 В этом то и суть. Первый язык программирования практически ни на что не влияет в среднесрочной перспективе. В качестве первого языка программирования можно учить все что угодно, как угодно.
В том и дело, что не хуже, если писать столько же кода, сколько ты пишешь в Text.Json, просто в случае с ньютоном это будет код для оптимальной работы, а в случае с Text.Json это будут конвертеры и другие воркэраунды для функционала который в нём отсутствует.
>ну это уже экономия на спичках серьезно
Также можно и назвать твой базовый функционал и использование Text.Json, да и вообще любую оптимизацию.
>>1812303 >Тебе же уже сказали - нисколько. это фантазеры сказали. Реальность говорит иное
>Достаточно выполнять рекомендации стандартной документации: Ну вообще то там написано очевидное (про раздел "разбирайте руками" я вообще промолчу) и с этими рекомендациями либа грузит GC больше чем аналоги (а почему бы не грузить если эти рекомендации вообще GC не касаются, а рекомендация "не грузите жсон строку в память" вообще не считается за мусор который делает либа)
А вообще что говорить. Берем первый попавшийся бенч и сравниваем ньютон и мою любимую в плане скорости SpanJson (System.Text.Json похуже будет, а SpanJson побогаче по фичам и быстрее всех)
первый прогон Newtonsoft: скорость 1 аллоцировано 34.16 MB спанжсон: скорость 0,24 аллоцировано 5.46 MB
разницу в памяти и скорости видишь?
читаем те рекомендации. ручной разбор, не хранить жсон в стринге, конвертеры это не к нам. но вот контрактрезолверы да у нас var serialized = JsonConvert.SerializeObject(element); что непорядок судя по советам делаю в тесте контракт резолвер (прямо из советов) и пропихиваю его
var serialized = JsonConvert.SerializeObject(element, _jsonSerializerSettings);
и запускаю. я тут ожидал что будет лучше но стало хуже
Newtonsoft: скорость 1 аллоцировано 49,72 MB спанжсон: скорость 0,20 аллоцировано 5.46 MB
>>1812152 Ты можешь использовать HttpListener если совсем по-простому. Можешь сделать и на Nancy или Asp.Net - гугли self-hosted Nancy/ self-hosted Asp.Net. Первая и использует HttpListener под капотом, на счет второго - не знаю. Я с упаковкой дела не имел, но оно наверняка должно работать и упаковано.
>>1812334 Так ты бы сразу и сказал, что речь о бенчмарках, а не о рабочем коде. Потом такие клоуны пишут продакшн код, пилят костыли к своим "в бенчмарках результат лудше!!" и на выходе получают результат в разы хуже, как по читаемости кода так и по его производительности.
>>1811950 Пиздабол. Только недавно делал сервис под винду на основе worker. Добавляешь nuget пакет, windows service или как-то так, и все работает Но я сам могу спиздеть, так как запускал на той тачке, где уже стоял рантайм. А так – служба была сингл-файлом из-за чего пришлось подпердолить конфигурацию, так как appsettings.json я хотел иметь в корне с программой, а не в недрах temp, куда по-настоящему распаковывается этот сингл-файл. Служба устанавливается командой в консоли, потом все работает в штатном режиме
>>1812397 >Так ты бы сразу и сказал, что речь о бенчмарках, а не о рабочем коде ааа ясно. ЭТА ДРУГОЕ (С)
заменить свойства на поля - оптимизация. А заменить либу жсон которая при большой нагрузке СИЛЬНО ЗАМЕТНО экономит память и GC меньше дергается - да какая то это оптиизация )))
>>1812152 кестрел это просто либа, а именно простенький сервер. как и хттплистенер, только более оптимизирован ты можешь просто их запустить без обвязки асп.нет а асп.нет даст тебе роутинг, чтобы ты сам не разбирал урлы, биндинг чтобы ты не парсил тело запроса и так далее
то есть ты можешь использовать хоть хттплистенер но получишь ты просто обьект реквест и дальше сам разбирай что тебе с ним делать. хочешь удобно чтобы метод написал, аттрибут навесил сверху и оно зароутит и забиндит - бери либо асп.нет либо любые другие велосипеды
я вот как то тупанул глядя на то что асп.нет такой тяжелый в оперативе, подкинул туда хттплистенер и ничего и тогда написал полноценный роутинг для хттплистенер по типу асп.нет коре
но тебе рекомендую взять асп.нет коре и хостить как локальный сервер и не парить мозг
Прошу людей, которые уже довольно долго варятся в шарпе, ответить на такой вопрос. Если бы вы сейчас изучали этот язык, то какую бы область применения выбрали? Веб?
>>1812477 Ну дык я так же делал и как раз на основе воркера. Нужно было маленький Http-сервер в виде виндового сервиса замутить. Так вот, самому хотелось в виде одного файлика, потому что ну красивше же, чем эти миллиард dll, а вот хуй, одним файликом сервис в винде не отзывался на запрос и постоянно стопался типа сервис не ответил, я даже лайвтайм и прочее сделал чтобы оно максимально на классическую службу было похоже. Почти два дня бился, а потом забил и оставил с кучей dll'ок и работало нормально. Я ХЗ что я упустить мог, но просто обидно, потому что сам хотел чтобы сервис был одним экзеншником + настройки.
>>1812535 >СИЛЬНО ЗАМЕТНО экономит память и GC меньше дергается
Так ты показывай проект с newtonsoft и этот же проект с аналогом, а потом сравнение работы с JSON'ом, а не твои тесты высосанные из пальца.
>заменить свойства на поля - оптимизация.
Это обычный пример того, что не всё так очевидно как тебе кажется. Функционала у newtonsoft больше, очевидно что если использовать все настройки по умолчанию, то и работать он будет не так быстро как аналоги с необходимостью пилить свои велосипеды. При этом в данном случае этот функционал даже велосипедами не добавляется, т. е. вызов метода вместо считывания поля у тебя будет в любом случае, хочешь ты того или нет, вот и спрашивай себя потом, сколько раз ты наступишь на подобные грабли прежде чем поймешь, что лучше бы ты проверенное временем решение использовал, а не вёлся на бенчмарки для даунов.
>>1812547 >>1812392 Мне бы, конечно, лучше asp.net, не больше роутинг, как шаблоинизатор нужен. Просто файл буду на разных компах размещать. Я понял asp.net сделать embedded не получиться?
>>1812756 >Так ты показывай проект с newtonsoft и этот же проект с аналогом. идиотская просьба. где я тебе в опенсорсе найду один и тот же проект под 2 разные либы такие проекте в опенсорсе называются разве что бенчмарк а приватные я тебе показывать не буду, а на слово ты мне и не поверишь. тебе и бенчи не доказательство. Ты уперся "у меня все хватает". так блин сделай нагрузку побольше чтобы уперлось в GC и тогда уже можешь толкать тезисы, или они будут о том что "насяльника давай памяти добавим, да и вообще проц мощнее нужен"
>Функционала у newtonsoft больше я выше четко писал что кому то фишки, другим скорость. и лично мне никакие особые фишки не нужны. Я даже не в курсе че там может быть такого особенного, что очень нужно и нигде нету. У меня задача преобразоывать жсон в структуры и обратно. Я хз че как вы там изголяетесь еще.
>т. е. вызов метода вместо считывания поля у тебя будет в любом случае ты вообще о чем? ты все про свойство против поля в дто? спанжсон умеет в поля но я в очередной раз повторюсь что выгода от этого просто минимальна потому что дто которые приходят из жсон или уходят в жсон в 99.99999% случаев не учавствуют в hot path, где эта замена была заметна даже под электронным микроскопом.
>>1812758 смотря что ты понимаешь как ембедед. если у тебя десктоп прила и ты такой "хочу чтобы открыть порт и там вебсервис еще и вот можно ли асп.нет коре сделать чтобы он не был в центре всего приложения, а просто как сервис внутри моей прилы". то да можно
>>1812775 >где я тебе в опенсорсе найду один и тот же проект под 2 разные либы
Представь себе, люди переписывают код под другие либы с целью оптимизации. Почему ты не можешь найти примеров с ньютонсофт и аналогами? Правильно, потому что при правильном использовании ньютонсофт оказывается либо таким же, либо лучше по скорости чем аналоги.
>>1812780 >Представь себе, люди переписывают код под другие либы с целью оптимизации в опенсорсе? нахера им это. опенсорс это всего лишь код это просто код просто код. просто код который код.
никто и никогда в опенсорсе ничего подобного не перепишет ибо у авторов нет таких проблем которые есть у хайлоада. это пробелмы хайлоада и вот они и переписывают у себя.
разве пхп переписали под фейсбук и вк? или это фейсбук и вк переписали под себя пхп? Разве кто то переписывает гитлаб с руби на что то более шустрое?
Те, кого это коснулось, в нашем мире просто докупают железо. Ибо железо дешевле программистов. А те, у которых железо уже дороже чем "переписать" - вот те и переписывают.
ньютонсофт может быть "не оказывает весомую нагрузку чтобы оно стоило того чтобы тратить время деньги на его замену" но говорить что он быстрее....
>>1812792 >Такое достижимо с asp.net? да. его можно запустить как тот же хттплистенер и погасить без var host = new WebHostBuilder() который заблочит поток. Точно можно. Я даже видел как. Я даже сам запускал. Я даже записал. но блин найти не могу ааааааа
>>1812792 А в инете хрен найдешь. А так кто то из этих знатоков то ли toub то ли еще кто то вроде на гитхабе показал как я случайно нашел а щас не могу найти даже в инете
>>1812397 У нас есть тесты нагрузки, когда реальную систему бомбят 2-5к виртуальных юзеров (открывают браузеры на куче машин, щёлкают по кнопочкам, вводят текст в формочки). Перевели с Newtonsoft на System Json и нагрузка упала (не в разы, но заметно). Никакой старшной логики не было. Стандартные serialize/deserialize.
>>1813018 >Пeревели с Newtonsoft на System Json А дoстaточно было сделать сeриализацию/дeсeриализацию напрямую из потока + в самых нагруженных местах добавить ручную дeсeриализацию/сeриализацию. Вот я про это и говорю, мaкaки смотрят на говнобeнчмарки и бегут всё скорее переписывать, вместо того чтобы почитать документацию к инструменту который они уже используют.
>>1813075 >сeриализацию/дeсeриализацию напрямую из потока а если оно УЖЕ из потока в поток то куда поточить еще? Хватит держать всех вокруг за идиотов, особенно тех, у которых реальная нагрузка
>в самых нагруженных местах добавить ручную дeсeриализацию/сeриализацию то есть в итоге ВЕЗДЕ норм ага. нормальная такая оптимизация - парсить вручную ))))
>>1813126 >Нет, лучше переписать всё на новую либу, потратив в 10 раз больше времени))) Ну если у тебя безумные жсоны с которыми ты работаешь в полуручном режиме из-за их безумия то да
>>1813194 Ты наверняка какой-то старый хуй, который командует какой-то тимой в своей конторе, у которого все приложения висят по 1-10 сек на любой чих и считает что это норма.
>>1813332 Любой опытный программист сначала изучает уже используемый инструмент, ищет пути его оптимизации, оценивает трудозатраты на оптимизацию и на переход к использованию другого инструмента и только после этого делает выбор между оптимизацией текущего решения и новой библиотекой.
>>1813126 Переписка заняла буквально 4 часа одним девом. Переезд с фреймворка на кор тоже упрощается, если используется системная либа. Но опять же - дело вкуса. Кому что больше нравится или подходит под конкретную ситуацию.
>>1813339 Вот эти вот вскукареки вылазят из каких то мухосрансков периодически и глобально разом за всю планету делают такие заявления. MS, GM, Amazon, Fidelity, Stackoverflow - у этих дотнет в хайлоаде используется, никто не жалуется.
>>1813455 Сказал чувак не знавший ни ситуации, ни задачи, ни условий, в которых весь проект крутился. Но который незамедлительно принёс своих осуждений. Ещё и тонко так вставил что в конторе, где крутятся сотни приложений, обрабатывающих тыщи запросов в минуту, имеется огромный состав всяких видов архитекторов, нет опытных программистов. Человеку только дай волю, он всех вокруг заплюёт и засмеёт.
>>1813463 У него все норм или "ему все норм" и он думает, что у всех так и все идиоты, которые не умеют готовить ньютонсофт
Впрочем, он в итоге свел все к рекомендации "перепиши в ручной код". Более того, если уже споткнулся о камень хайлоада и начинаешь новый проект то по его мнению "нужно все равно брать ньютонсофт, ведь потом же можно будет переписать в ручной код" )
>>1813464 >свел все к рекомендации "перепиши в ручной код" Ты о чём?? Тут анонов 5-6 разных в дискуссии участвовало. Я не понял, на какой именно коммент ты ссылаешься.
>то по его мнению "нужно все равно брать ньютонсофт..." Я тот чувак, которые 2+2 написал и который в новом проекте как раз ньютонсофт не взял, а использовал системную либу, потому что телодвижений меньше и всё завелось с пары пинков и не доставляет никому головной боли (ручного ничего нет).
Ты наверное в комментах запутался и начал мимо отвечать.
Нубский вопрос: Написал метод для события одного из контролов. Тк метод единый, но его нужно использовать в разных формах - запихнул его отдельную библиотеку. Да, все ок работает, если вручную присваиваю(+=) свой метод к событию. Но можно как-то сделать так, чтобы мой метод из dll отображался и выбирался в конструкторе? Так было бы красиво и удобно(сразу и в одном месте видно как и какие события обрабатываются).
Вроде четвертый год работаю (ASP.NET) в конторе, у нас уже считаюсь более или менее опытным. Ни разу в жизни не использовал (даже не знаю, как использовать) делегаты, синхронизацию, сериализацию, рефлексию и прочую хрень, о которой только и пишут на форумах. Не написал ни одного интерфейса. Спасает знание некоторых базовых вещей и владение SQL. Понимаю, что если контора накроется, то сосну на рынке, но пока в зоне комфорта.
>>1814249 > делегаты Мне понадобились только в винформах, чтобы интерфейс дергать. Делегат использовал для события. Хотя есть EventHandler и EventArgs, но ими я не пользовался так что тоже каминаут сделал > синхронизацию Что имеешь ввиду? Многопоточку и асинхронность вообще? > сериализацию Ну данные же ты куда-то сохраняешь, с хмл поди да работал хоть на полфедора > рефлексия Тоже не понимал, зачем она нужна, пока не решил написать динамический фронтенд, который генерируется по ответу бекенда До этого момента думал, что это какая-то чёрная магия, которая нахуй не нужна
Зато потом в js, где нет рефлексии, долго плевался
>>1814269 Может, копнуть в сторону UWP Может, сделать свой собственный диалог. У тебя везде такие кнопки? Кажется, ты какой-то системный диалог вызываешь
>>1814249 Единственное что это значит, что тебе учиться не у кого. Также первые 5 лет работал. Баги были нормой, запросы к БД и файловой системе по несколько секунд тоже. Но потом попал в компанию, где были настоящий архитектор и сеньоры. И у них был местный хайлоад, куча проектов с миллионом строк кода, БД с миллиардами записей в таблицах. И оказалось что норма - это - писать код без багов по пол года а то и больше - полностью загружать и отрисовывать страницу с запросами ко всяким огромным БД и сторонним сервисам за <1сек - иметь полное покрытие системы юнит и интеграционными тестами, которые на лету создают нужные сервисы и БД в памяти или на специально выделенном сервере - выдавать несколько рабочих фич в прод за спринт - не возвращаться к закрытым таскам - автоматизировать the crap out of всего подряд, чтобы нажал кнопку и всё работало, а программист только тратил время на написание кода.
>>1814215 Ну был тут один плюсовик, так этот даун несколько часов только осваивал различия инициализации объектов в плюсах и шарпе. Поэтому вот этот анон >>1814218 конечно преувеличил, но примерно где-то так оно и будет.
>>1814215 Подруга фигачила с++ 8 лет, потом за неделю пересела на шарп. Правда она в МС работала. Вообще такие вопросы не имеют смысла. Можно 15 лет сиплюсплюсить и быть дегенератом, который не понимает ни как ЦПУ, ни как РАМ работают, иметь постоянные утечки и хвастаться криптокодом, который он сам через неделю перестаёт понимать. Такой и в шарп 10 лет запросто въезжать будет. Если у тебя есть хорошая база и понимание того, как компы в принципе работают, то за 2 месяца в любом языке станет комфортно.
>>1814234 Так с жаваскриптом было бы проще, современный язык, как и шарп. Это тебе не std::говно_говна<МоёГовно> простоЧтобыПамятьНеУтекла = std::make_говно<МоегоГовна>();
Анон вот что делать. Задача : получить данные из стороннего апи, привести их к виду который нужен нам и сохранить. Проблема - сторонне апи - говно которое кучу мусора отдает, и не имеет методов для получения небольшого куска информации, что нужен мне. Ну и выходит что я делаю запрос, половину БД со стороны в виде JSON'а получаю, потом делаю всю эту SQL-работу, джойню, фильтрую, селкучу, чтобы достать пару нужных мне значений и запихнуть их в нашу базу. В итоге просто с нихуя жрется куча памяти и работает медленно, потому что блядь для одного сука объекта, у которого мне нужно несколько блядских полей приходит JSON 100мб веса, блядь нахуй. Вот и как тут быть? Как с этим работать чтобы такая, казалось бы тривиальная задача не была такой тяжелой? Ей богу, дали бы эти пидоры возможность к своей БД подключиться, один маленький селект и все, но нет, хуй там, мы дали открытое апи - пользуйся.
Ну да, вопрос таки касается шарпа. Может быть есть какой-то способ как-то сделать это все дело так чтобы не выходила такого пиздеца, потому что на обработку одного такого объекта может до нескольких секунд уходить, ведь все равно в том что пришло нужно еще и искать всякое и потом приводить к нужному нам виду. В общем, я хз.
>>1814504 >что делать Донести до них, что они долбоебы Так им и передай, что даже мимокрок анон с двача так считает
а так локальная база кеш, которую время от времени пополнять и с нее делать запросы. но мне кажется что ты и так пополняешь свою базу новыми данными и со своей базой потом работаешь
а значит остается одно - донести до этих долбоебов что они долбоебы
>>1814504 У них в АПИ никаких фильтров вообще не предусмотрено? Для того чтобы сильно свою систему не грузить, можно свой JSON конвертер сделать, который вытащит только нужный блок из стрима. Ну и кэшить их ответы естественно.
>>1814635 Нынче всё скриптуют и кодогенерируют. Руками через drag-n-drop софт разве что для демонстрации или для пет проекта делают.
Ну и вообще десктоп приложение делать в 2020 странно. Для чего-то простого есть CLI приложухи. Смысл для десктопа только если у тебя игры, работа со звуком/графикой, всякие IDE, пет проекты или древняя версия ОС.
Тем более что веб приложения сейчас двойным щелчком по исполняемому файлу могут запускаться и даже выглядеть как десктоп. Но зато сразу из коробки куча вшитого функционала и безопасность.
>>1814655 >Руками через drag-n-drop софт разве что для демонстрации или для пет проекта делают. >Смысл для десктопа только если у тебя игры, работа со звуком/графикой, всякие IDE, пет проекты или древняя версия >пет проект Ну так как я пишу первый серьезный проект для себя - значит я все таки все правильно делаю?
>>1814714 Для себя можно хоть на чём учиться. Лишь бы учился. Но конкретно по твоему вопросу ничего сказать не могу, т.к. свойства объектов через UI в студии уже больше 10 лет не трогал.
>>1814793 Хамл шикарен только среди остальных инструментов для десктопного гуи, потому что из конкурентов у него только винформс, qtForms, gtk++ и прости господи чистый WinAPI. есть еще электрон вроде, но он тоже на js)))) Как человек, пиливший ГУЙ на всем вышеперечисленном и на вебовских технологоиях, ящитаю, что впизду и нахуй делать UI на десктопе, просто боже упаси. Веб в разы удобнее и профессиональных живых инструментов с активным коммьюнити гораздо больше.
>>1814323 К нам в проект пришел опытный прогер и переписал запросы к БД, работающие секунд 15-20 так, что они стали работать за 4-5 секунд и это считалось невероятным успехом.
Почему кнопки и все остальные элементы управления в Winforms нативные, точно такие же как и во всех системных окошках, а в WPF какие-то свои? Можно ли как-то сделать чтобы WPF рендерила такие же нативные элементы?
>>1815274 ты просто не вник основательно в хамл. а в веб вник, вот потому так и говоришь
открою тебе тайну - хамл это хмл и хтмл это хмл так в чем разница в читабельности
Разница лишь в том, что они описывают. хтмл только элементы, а хамл это выражение кода в хмл
И все что не выражено в хмл выражается в коде на языке программирования. И лучше когда все находится в одном месте (хамл с нулевым code-behind) чем хтмл+лютый code-behind
EF это полноценный орм, который абстрагирует от конкретной бд и дает разные плюшки, но взамен получаешь оверхед и необходимость понимать "как бл.. выразить запрос в этом орм"
dapper же просто маппер который позволяет смапить результат SQL запроса на обьекты и потому очень быстр, но уже sql юзаешь - для тех кому не влом писать больше кода, но полный контроль над происходящим
актив рекордс в дотнете не прижился
Ну и что то среднее это Linq2Db c его linq вместо sql, ну и куча разных либ которые каждая по своему видят как должно быть.
>>1815315 Другой ответ хороший, но я пьян и хочу дополнить джуновьей мудростью. EF нормальная штука, если ты сам хозяин базы данных - ты ее формируешь под свои требования, потому запросы у тебя почти всегда будут тривиальны. Но если база данных уже существует, и тебе под нее подстраиваться нужно, высока вероятность что ты каждый раз будешь проверять, какие запросы генерирует EF. В половине случаев ужасаться. А иногда просто не сможешь запрос нужный написать используя linq. В случае таких БД лучше сразу выбирать dapper.
и нужно. вообще правильно вбивать такое в каждый проект <LangVersion>8.0</LangVersion> <Nullable>enable</Nullable> <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
>>1815349 Про nullable типы уже сказали (Type? это под капотом Nullable<Type>), а как операторы:
Ternary (conditional) operator: var result = condition ? result1 : result2; Если condition == true, то result = result1. Иначе result = result2.
Null-coalescing operator: var result = result1 ?? result2; Если result1 != null, то result = result1. Иначе result = result2.
var result ??= result1; Если result == null, то присваивает ему result1. Иначе ничего не делает.
Null-conditional operator: var result = thing?.member; Если thing != null, то result = thing.member. Иначе result = null (и не возникает исключения, как если бы ты пытался обратиться к thing.member при том что thing == null).
Хочу сделать сорт оф настолку в вебе, все что мне нужно из функционала это: лобби игры для нескольких игроков, передвигающиеся .пнг пикчи фишек разных по нажатиям кнопок, ну и там логика всяких счетчиков/значений и т.д., было бы плюсом завезти какие-то анимации для этих же передвигающихся пикч. У меня вопрос - какой стек мне нужен для этого, а точнее хватит ли мне asp.net или для этого придется дрочить еще всякие js'ы. Сам легко могу такое сделать на wpf'e/winforms, а в вебе не разбираюсь. Вот хороший пример приблизительно того что я хочу https://monopoly-one.com/ , только там игровое поле на html коде, а мне достаточно/нужно .пнг фон.
>>1815542 ну любой сайт это серверная сторона что выполняется на сервере и то что выполняется в браузере и вот что в браузере это жс ну или блазор если смелый
>>1815310 Вот сейчас я ради интереса ковыряю wpf и пытаюсь сделать кнопку из квадрата. Я уже полчаса гуглю, как это дерьмо заставить менять цвет в ответ на событие фокуса Каждый ебаный элемент имеет в себе сотню ебаных свойств, а иде бесполезна более чем полностью. При том, что я в бленде сижу, специализированное по для интерфейсов, блядь. Хочешь поменять стиль – вот тебе 400 строк стилей всего элемента, ебись, блядь, ковыряй триггеры, дрочи этот котях
В рот ебал этот хамл. Десктоп загнулся и поделом ему с такими инструментами. Но майки тащат это сучье дерьмо в maui. Да, там будет флюент синтаксис, но наверняка найдется какой-нибудь дед-пердед, которому и хамл вкусный, и ебись потом с его контролами. Впрочем, не уверен, что майки в этот раз смогут сделать что-то популярное для мобилок
>>1815623 >Я уже полчаса гуглю, как это дерьмо заставить менять цвет в ответ на событие фокуса то есть это значит что ты вообще не освоил основ и уже "говно говно говно" про триггеры знаешь, а цвет на фокус поменять не можешь. Вот как так?
причем тут вообще флюент синтаксис до хамла. хамл силен не этим. хамл силен тем что декларативно описывает то, что иначе пришлось бы кодом набирать что как раз и есть лютый пиии.
А десктоп загнулся потому что макаки не умеют в нативную разработку и им похер "лагает, тормозит, половина одного потока", зато крос
>>1815699 десктоп загнулся, потому что он нахуй никому не нужен, когда есть универсальный веб интерфейс, доступный с любой ОС с любого устройства, лишь бы был браузер, да еще и с мгновенным обновлением версий
>>1815705 А я разве не так сказал? Я это и сказал что притащили вебинтерфейс в десктоп и похуй на то что оно тормознутое говно и жрет безмерно памяти и не выглядит нихуя нативно. Просто макакам писать легче.
>>1815709 это и писать удобно и использовать удобно, причём тут макакство. интерфейс хуйня, ведь вся магия происходит в десктопе, а жрёт ли приложуха 2мб на чистом винапи или 400мб вкладка в моём браузере - меня не ебёт, когда у меня 24гб DDR4. Зато мои гугл доки доступны мне с любого устройства из любой точки мира, мне не нужно покупать специальное ПО. мне не нужно после переустановки винды ставить себе кучу приложений, потому что я использую веб сервисы. нахуя вот ты скажи мне нужны не-ОС десктопные приложения, кроме игор, браузеров и инструментов разработки?
>>1815699 Есть rectangle, который должен менять цвет по наведению. До кучи – по нажатию на него должна вызываться команда
1) в темплейт кнопки засунул прямоугольник. На событие фокуса он не реагирует 2) просто ректангл с триггером, не реагирует аналогично
А я всего лишь хотел сделать кастомный топ-бар. Вот как с этим работать? Не осилил, да. Ну да, я не осилил. Рассчитываешь, что декстоп должно быть удобнее писать, а тебе как будто специально палки в колеса вставляют
>>1815720 я размышляю с точки зрения человека, для которого разработка и использование ПО - это не спортивные дисциплины, а методы и средства решения задач. если мне захочется побайтоёбить - то я буду делать там, где без этого не обойтись, а не потому что нуу гыгы тупые макакеры на своём говнякте тащат 200мб а я вон пишу 100 строк на винапи на обработку нажатия кнопки через WM_ коды потому что я нимакакер гыгык))0 void* bThread = CreateThread() я многотопочный)00
>>1815721 >цвет по наведению по наведению чего? мыши что ли? так пролет мыли это не получение фокуса. Ховер эффект это триггер на IsMouseOver Онклик для элементов что не имеют его делается через InputBindings
>>1815724 Ну да ну да. Макакам норм, а пользователям страдать. Но кого волнует мнение пользователей да - ведь всегда можно купить более новое железо. А в итоге и выбрать то не говномакаческие поделки уже не выйдет.
>>1815748 >Но кого волнует мнение пользователей я тебе как пользователь заявляю, что в рот ебал десктопную хуйню, дайте мне веб сервисы. в наши дни пользовательское железо для них нихуя не стоит >А потом имеем тот пиздец что на пике ну и причём тут ведроид с его дебильной джабой как основным ЯП разработки?
>>1815753 >ну и причём тут ведроид с его дебильной джабой как основным ЯП разработки? на смартах та же макаковая хуета "не хотим учить натив, дайте нам браузер и мы все в нем. тормозит? жрет память? это проблема юзера -пусть покупает новый смарт"
на десктопах проблема меньше выражена ибо устройство мощнее, но по факту есть ноуты и они не такие мощные и на них это говно ЗАМЕТНО лагает. но макак это не ебет. Софт есть - есть и макаке насрать на то как его говно работает у пользователя
>>1815753 >я тебе как пользователь заявляю, что в рот ебал десктопную хуйню, дайте мне веб сервисы так бери вебсервисы, кто тебе запрещает. Никто на твои сервисы не покушается. Сиди в вебверсии телеграма вместо десктопной - твое право.
Но когда переделывают норм софт на жс версию это пиздец. Даже на моей машине (i9 7900x 64gb 3200 и сплошные ssd - да да уже старье) начинает лагать это уже ни в какие ворота.
К примеру, у меня стоит софтина Xmind 7 и летает. А вот ее новая версия переделана под электрон или что то такое и тормозит просто адски. Я не знаю какой там квантовый комп нужен для нее. Туда же. но выражено меньше - personal brain про скайп и так все знают - ну он у меня не тормозит (я его и не запускаю так то) так что ладно логитеч вебкам панелька, кракен панельнка - все это переделали и заметна неотзывчивость.
комп мощнее чем мой древний 2 поколения назад феном х4 925, а по ощущениям все работает с той же скоростью. Потому что процветает макачество. Тенденция такая.
Я тут немного не по теме, но все же буду благодарен если поможете: как откатить пуш и удалить некоторые коммиты в локальном репозитории? Я сейчас случайно залил хуйню которую не стоило заливать.
>>1815810 >ак бери вебсервисы, кто тебе запрещает никто мне не запрещает, но ты выше писал >Макакам норм, а пользователям страдать. Но кого волнует мнение пользователей ну вот я и говорю, что я страдаю от привязки к ОС, конкретному устройству, установке ПО и прочему, а не от того, что приложуха жрет 200 мб в вкладке браузера вместо 2мб сразу в оперативке. >К примеру, у меня стоит софтина Xmind 7 и летает. А вот ее новая версия переделана под электрон или что то такое и тормозит просто адски. Я не знаю какой там квантовый комп нужен для нее. братишка проста тупа садись на условно бесплатный https://miro.com/app/dashboard/ для всего сейчас есть веб сервисы, нахуй тебе это десктопное говно? >Потому что процветает макачество. Тенденция такая. ну так а конкретно js и веб приложения vs десктопные приложения тут причём? из того, что ты говоришь андроид говно, электрон говно следует вывод, что тебе не нравятся говнокодеры, а не жс.
>>1815847 >для всего сейчас есть веб сервисы, нахуй тебе это десктопное говно? 1 не работают без инета. 2 имеют жалкий аналог функционала, что мне нужен 3 требуют закачивания или размещения моих рабочих файлов где то еще 4 оно тормоз. 5 оно неудобно. просто неудобно. абсолютно неудобно. может у вас простые требования, но мне для работы НЕУДОБНО шопездец
пункты 1,2,3 решают что оно мне не подходит. и не нужно кормить меня "ты просто не понимаешь", если оно не делает то, что мне нужно так как нужно.
то есть >для всего сейчас есть веб сервисы только твое мнение. Для тебя есть набор сервисов который удовлетворяет набор твоих требований и твои нужды
>ну так а конкретно js и веб приложения vs десктопные приложения тут причём? Ну дошло до того, что откровенно десктопный софт переделывают или делают сразу на говноэлектронах и это не "просто дубль веб версии" типа как вацап сделал.
>андроид говно, электрон говно про андроид я ничего не говорил. я говорил про смарты, на которых не стоят квантовые процы и сто гигов оперативы. и я не обязан постоянно менять свой смарт чтобы поспевать за жрущим ГОВНОМ типа электрона ( а вот его я как раз считаю лютым говнищем) тем более что смарты не на что менять. Вот я хочу не лопату с норм железом, акб и так далее и за адекватную цену. принесешь? а нету нихуя
Являются ли дженерики реализацией полиморфизма или только интерфейсы? Какого хуя, везде написано, что реализация инкапсуляции в шарпе это гет сет, а чо, блядь, обычная функция это не инкапсуляция разве, блядь?
>>1815892 >get;set; преобразуется в обычные функции Да не, вот просто, сама по себе любая функция разве по сути не является инкапсуляцией? public hui Pizda(double height) {}
>>1815895 функция является - ведь она может делать внутри себя что-то и потом незаметно ее внутренняя логика может стать другой, а снаружи этого не видно. точно также и внутренняя логика свойства может стать другой и снаружи этого не заметят это и есть инкапсуляция.
>>1815765 >>1815748 Спасибо, анон, но я уже удалил проект. Может, вернусь Все же впф позволяет сделать красиво, но уж очень замудрено. Веб сам собой осваивается, а как понять хамл – хз
>>1815699 > хамл силен тем что декларативно описывает то, что иначе пришлось бы кодом набирать что как раз и есть лютый пиии. Бля, там кодом обычно проще было бы набрать и разбираться проще, чем пялить в эти бесконечные <hui dlina = 5> <v pizde> glubina = 25, shirina =5 </ v pizde> </hui> Почему, блядь, где то свойства описываются в <> где то между <> </>, плюс, все это такие сопли порождает, что я ебал, как посмотришь на этот хамл, так голова сразу болеть начинает
Вопрошаю уже который раз и ирл и в интернетах. Нихуя никто ответить толком не может, только ко-ко-ко одно. Может тут пояснит кто. Нахуя нужны команды в WPF, чо они дают вообще, по сравнению с формами? На формах как было, блядь, есть кнопка, при нажатии вызывается метод. В wpf при нажатии срабатывает команда, которая дергает привязанный к ней метод, и чо? Нахуя эта прослойка в виде команды вообще нужна тогда, блядь? В чем профит?
>>1815979 Майкрософт собирает джуну ЯП в энтерпрайз: — Вот, положила тебе в C# async-await, EF и дженерики с полиморфизмом. — Мам, нафига?? — Ну как же, берешь запрос к БД через репозиторий на EF, запускаешь Async метод и await'ишь. — А дженерики с полиморфизмом? — Так вот же они!
>>1815987 сразу из головы чё помню. команды можно биндить, что удобно при использовании юзерконтролов, что в лишний раз энфорсит каноничный MVVM на самом деле ивенты тоже можно, но там такая хуйня костыльная маму ебал
>>1815890 >Являются ли дженерики реализацией полиморфизма или только интерфейсы? >реализация инкапсуляции в шарпе это гет сет
Твоя проблема в том, что ты такие абстрактные понятия как "полиморфизм" и "инкапсуляция" пытаешься вложить в что-то одно. Это не так работает. Эти понятия слишком общие для того чтобы вкладывать их либо в только интерфейсы, либо только в геттеры и сеттеры. Их так и нужно воспринимать как что-то общее, полиморфизм когда ты что-то одно применяешь ко многим, инкапсуляция когда ты что то используешь в общедоступном и скрываешь главную его реализацию от пользователя.
>>1815987 Для того чтобы у тебя в коде было всё структурированно, что в свою очередь облегчает поддержку и расширение этого кода. Это как сказать "зачем нужно по папкам всё раскладывать, если можно всё в одну скидывать и функционал не изменится? желательно чтобы этой одной папкой был рабочий стол!" У команды общий интерфейс, у каждой команды есть общая логика, твой же метод в винформс может принимать любую форму, ограничившись лишь больной фантазией того кто его реализует. Команда может принимать аргументы, которые ты прописываешь прям в XAML коде, т. е. ты смотришь на XAML и уже примерно можешь представить что эта команда делает, тоже самое в winforms достигается только непосредственным просмотром кода метода в котором еще нужно будет попотеть чтобы понять откуда какие данные берутся.
>>1816008 >Команда может принимать аргументы, которые ты прописываешь прям в XAML коде, т. е. ты смотришь на XAML и уже примерно можешь представить что эта команда делает Вот щас бы сидеть смотреть откуда на хуй аргументы взялись в этом xml, ага? Я уж лучше открою и гляну нормальный код, а не это html спагетти
>>1816032 Ты совсем тупенький? Реализация твоего метода в формах это черный ящик, в случае с командой мы как минимум знаем что у неё есть методы CanExecute и Execute, а также ивент CanExecuteChanged >>1816033 Смотреть и гадать не надо, потому что есть общая структура. Ты просто пытаешься судить о том, чем не пользовался, непонятно зачем. Чтобы лишний раз подкрепить своё "это не я ленивый и не хочу учить новое, это технология хуевая"? Так это можно и без постов делать.
>>1815971 >Бля, там кодом обычно проще было бы набрать и разбираться проще кому как. у меня вот проект на кутях где описывается кодом и это пиии. ведь нужно в голове выполнять этот код чтобы понять, а еще код длиннее и может собираться из многих методов и вообще адище
>где то свойства описываются в <> где то между <> </> хмл есть хмл. Простой тип - строки числа енумы можешь задать как аттрибут, ну и то что обвешано всякими {Binding, Static ...и так далее, которые могут превратить заданную им строку в нужный обьект). А сложный тип нужно описывать как самостоятельный хмл узел, который в аттрибут не всунешь.
>>1815987 >Нахуя нужны команды в WPF, чо они дают вообще, по сравнению с формами? Биндинг биндинг. чтобы ты в MVVM не писал горы хендлеров событий в code-behind (который в идеале пустой) ибо декларативщина
>>1816033 >Вот щас бы сидеть смотреть откуда на хуй аргументы взялись в этом xml, как раз это и понятно ибо декларативное описание супротив императивного кода. хтмл точно такое же декларативное описание. когда там пишешь аттрибут data-хх ты ж не жалуешься.
>>1815987 А ну да. Это ж еще команда, которая имеет CanExecute. Не нужно бегать по форме и дисаблить всех нуждающихся. Не нужно также заводить отдельный флаг "эту операцию можно выполнить" потому что команда содержит в себе еще и эту инфу и вид про это знает
>>1816026 Суть в том, чтобы свести весь UI и всё поведение пользовательского интерфейса к XAML, MVVM и биндингу, чтобы не определять события в коде. Алсо событие - не dependency property, так просто ты его не забиндишь. Ты можешь указать какое то конкретное событие твоего юзер-контрола, но оно будет вне контекста основной view-model'и контейнера/приложения, и следовательно ничего у тебя там не будет
>>1816049 >в случае с командой мы как минимум знаем что у неё есть методы CanExecute и Execute, а также ивент CanExecuteChanged Ебать, очень нужно, ага. Прям вот каждый раз, как надо к кнопке метод приколотить я использую всю эту хуйню, ага? >Чтобы лишний раз подкрепить своё "это не я ленивый и не хочу учить новое, это технология хуевая"? Почему не хочу? Я хочу. Только вот это все нахуй не надо, а только порождает код ради кода очередной
>>1816096 >тысячи опытных программистов использовали винформс и используя наработки, которые они до этого пилили при помощи костылей, создали продолжение винформс - впф >неосилятор с двача: НИНУЖНО ЯСКОЗАЛ ЛИШНИ КОД КАК ВСИГДА ЛИШЬ БЫ МНЕ СЛОЖНЕЕ ПОНЯТЬ БЫЛА РЯЯ!!
Ты хоть сам понимаешь насколько жалко твои претензии выглядят со стороны? Умножение тоже нахуй не нужно, ведь не нужно никакие таблицы учить, просто складываешь всё последовательно и получаешь тот же самый результат!
>>1816050 >чтобы ты в MVVM не писал горы хендлеров событий в code-behind (который в идеале пустой) И чо, я без команды не могу приколотить к событию метод, который во вьюмодел лежит? Рили? МС дала им код бихайнд, который ко вьюхе приколочен в качестве вьюмодели по сути. Нет, не хочу его юзать, хочу отдельный файл вьюмодел создать. Почему? Нахуя? Так нада! В итоге, блядь Window1.xaml Window1.cs - пустой Window1ViewModel.cs - с кодом
>>1816058 >Не нужно бегать по форме и дисаблить всех нуждающихся. Нужно бегать и дисаблить с помощью canexecute команду, те же яйца, только в профиль, блядь
>>1816101 не. хотя... погоди (чешет яйца) не. все же не.
вот у тебя есть класс и ты с ним работаешь. а потом появляется наследник этого класса который переопределяет часть текущего. и твой код продолжая работать с текущим классом автоматом начинает работать с наследником. это полиморфизм
а дженерики просто шаблон чтобы за тебя сгенерили типизированные классы/методы, чтобы ты не был goшником
>>1816061 >дженерики это просто шаблон чтобы за тебя создали конкретный тип. Пихаю туда разные типы данных, получаю одинаковое их поведение >это не полиморфизм. ясн
>>1816064 >чтобы не определять события в коде. Какие, блядь, события в коде ты определяешь? Нахуярил OnButtonClick = ButtonClick и забыл, блядь, то же самое, что и биндингом твоим
>>1816112 ну вот у тебя допустим вьюмодель на формсах и ты хочешь сделать чтобы на онклик дергался метод во вьюмодели тебе нужно 1 прописать хендлер онклик в коде бехайнд где достать дернуть метод вьюмодели 2 навесить на вьюмодель событие что "теперь эту кнопку можно кликать" чтобы в том же коде-бехайнд прописывать "на изменения вот этого можно сделать енаблед вот эти контролы" умножаешь это на 20-30 контролов на форме и смотришь на количество кода что ты РУКАМИ захерачил в кодебехайнд
в случае WPF такого кода у тебя будет написано НОЛЬ
>>1816122 >Нахуярил OnButtonClick = ButtonClick где этот ButtonClick? во вьюмодели? так не пойдет. вьюмодель НИХЕРА НЕ ЗНАЕТ про вид. в этом ее суть
>>1816109 >просто складываешь всё последовательно и получаешь тот же самый результат! Я тебя удивлю, но кудахтер только складывать и умеет. >Ты хоть сам понимаешь насколько жалко твои претензии выглядят со стороны? Где жалко то? Я, блядь, чего не открою поглядеть, везде, нахуй, контрол - бинд - команда - метод. Нигде команды, нахуй по другому не используются
>>1816116 Это всё часть одного и того же, как я уже писал выше, частой ошибкой является желание натянуть абстрактные понятие типа полиморфизма на что-то одно. Оно на то и абстрактное для того чтобы воплощаться в разных формах. Обощенные классы в данном случае облегчают применение полиморфизма и являются его частью.
>>1816124 >где этот ButtonClick? во вьюмодели? так не пойдет. вьюмодель НИХЕРА НЕ ЗНАЕТ про вид. в этом ее суть Который? ButtonClick()? Вот этот? Во вьюмодели конечно. Нахуя вьюмодели про вьюху знать для этого?
>>1816137 еще раз вот у тебя кнопка. у нее есть событие онклик у тебя есть вьюмодель как свяжешь онклик с вызовом метода вьюмодели БЕЗ НАПИСАНИЯ хендлера в котором ты вызываешь метод вьюмодели?
>>1816141 Да, в первом у тебя одна операция, во втором 5. Первый у тебя займет 3 символа, второй 9. Первый читается быстрее. Ой, да это прям как впф против винформс!
>>1816137 >Нахуя вьюмодели про вьюху знать для этого? ага. то есть вьюмодель должна теперь в сигнатуру свою добавить sender и eventargs, хотя для вьюмодели это просто метод без параметров
>>1816154 >все то весь мир не считает это полимфоризмом >весь мир
Это ты так свой манямирок называешь? Хуею с клоунов, которые базовых определений не знают, но с видом знатока натягивают свою умственную отсталость на весь мир.
>>1816168 При том, что твой винформ слишком монструозный и не структурированный. Тебе это уже несколько раз повторили, даже привели простую аналогию. Но ты всё равно продолжаешь кричать "Я ИСПОЛЬЗУЮ ЗНАЧИТ НОРМАЛЬНО!! А ТО ЧТО ВЫ ГОВОРИТЕ МНЕ НЕ НУЖНО!!!", продолжая закрывать глаза на отсутствие адекватной и удобной структуры у винформс приложений.
>>1816187 ок ок. ты смотрел с колокольни "все виды полимфоризма" я же рассматривал только ad-hoc (собственно о нем я и писал) каждый думал о своем. Я это признал. что еще?
>>1816171 Ебаный рот этого казино, блядь. Я все понял, походу мы все тут не поняли друг друга. Я спрашивал чисто за команды. В целом, мне лезть на винформ нахуй не надо. Я и на впф покодю >напомню первоначальный вопрос "Нахуя нужны команды в WPF,"
вот затем и нужны чтобы отвязаться от событий заменив их на определение команды и возможность на нее биндится. >>1816166 Вот так, например. Событие? Событие, все ок. Нахуй тут команда нужна?
>>1816190 я же выше писал пример когда у тебя события и хендлеры в кодебехайнд и сравнение с впф
ты предложил делать не хендлеры а сразу хендлером пусть будет метод вьюмодели но тут есть несколько но 1. это добавит в сигнатуру сендер и аргс которые логически во вьюмодели нахер не нужны. Для нее это просто метод 2 проблему флага "можно кликать" это не решает. ты все равно вынужден писать ручной механизм переключение статуса enabled для контролов в зависимости от состояния вьюмодели 3 биндинг может быть на команду которая находится хуй знает где в иерархии, до которой банально не добраться без ручной реализации хендлера где тебя ждет путешествие вверх по деревью контролов ( у вьюмодели спрашивать бесполезно - она про родителей не знает)
в итоге нулевого кода не будет. А там где ты сокращаешь код - ты вносишь мусор во вьюмодель
>>1816190 Конечно ты можешь реализовать костыли и присобачить их к финформс чтобы убрать эти проблемы как можешь но это и будет ответом на твой вопрос "а в чем выгода"
>>1816190 А еще есть фокус, где можно ли работать с командой или нет зависит от фокуса. например кнопки на тулбаре в офисе меняют вклвыкл в зависимости куда фокус у тебя. И это все само работает, а не ты руками бегаешь прописываешь что должно быть активно или выключено в каждый текущий момент
>>1816166 Умник, блять, и чё тебе это даст, если ты пилишь не вермишель ебаную в MainWindow.xaml, а как белый человек раскидываешь компоненты по юзер-контроллам? Твой клик будет искаться в UserControl.cs, хуй ты оттуда достанешь по человечески главную вьюмодель
>>1816190 >Ебаный рот этого казино, блядь. Я все понял, походу мы все тут не поняли друг друга. Эна воно как. в общем так 1 команда это обьект который связывает в себе и хендлер и canexecute, что уже очень полезно ибо не размазывается 2 Команда у вьюмодели это свойство. со всеми вытекающими для биндинга. не забывай про OneWay 3 У команды ясный интерфейс ICommand, который не зависит че там в итоге будет вызвано и как. У метода же никакого такого интерфейса нет. Ну да ты можешь требовать сигнатуру вида Action/Action<T>, но это анальное ограничение и в случае интефейса ты можешь сделать свои реализации команд, а с методом нет 4 гладиолус
>>1816190 да одного того что хендлер и флаг связаны воедино хватает для того чтобы создать класс объединяющий их а наречь его команда. Только одной этой причины БОЛЕЕ ЧЕМ достаточно так то
Помогите пожалуйста. Знаю C# на уровне "писал ООП хуйню на вебформсах для местной конторы", т.е основные знания в с# и дотнете есть. Сейчас хочу вкатиться в ASP.Net Core, но в бэкенде вообще не шарю (тем не менее знания html/css/js и совсем немного php (не 7, т.е без ООП) есть). Когда захожу на какой-нибудь метанит и читаю статью как сделать систему авторизации на основе куки, то уже путаюсь что и как. С чего начать курить backend?
>>1816195 >А там где ты сокращаешь код - ты вносишь мусор во вьюмодель Как будешь оповещать вьюмодель о том, что в модели изменилось какое-нибудь свойство, которое ко вьюхе приколочено? Во вьюмодели, естественно чисто обертка.
>>1816252 >если ты пилишь не вермишель ебаную в MainWindow.xaml Какую вермишель? По каким юзер-контролам чо ты там раскидываешь, как белый человек? Ну ка поясняй, чо сказать хотел. >Твой клик будет искаться в UserControl.cs, хуй ты оттуда достанешь по человечески главную вьюмодель Нахуй мне ее доставать, поехавший? Мне похуй, где этот клик будет искаться, метод приколочен, он и сработает из вьюмодели при клике.
>>1816259 >да одного того что хендлер и флаг связаны воедино хватает для того чтобы создать класс объединяющий их а наречь его команда. Да вот хуй. Какие вы, блядь, хендлеры руками все время прописывать хотите? Все за вас уже сделано на хуй. Присобачил на событие в xaml свойствах контрола метод из vm и все работает, блядь, изкаробки. Какие, блядь, хендлеры, где вы эти делегаты руками пишите, блядь? Флаг, блядь, хуяг. Дался вам этот флаг? Ну заблочишь ты выполнение команды и чо? Кнопка то в окошке все равно нажиматься будет и юзер, будет сидеть и жать ее не понимая, хули нихуя не срабатывает, тогда как, если ее дисаблить, то он сразу увидит, что нажать ее нельзя и начнет думать, а почему
>>1816607 Реализовывать INotifyPropertyChandeg у каждой модели, еще и {get;set} уже не написать, а надо расписывать и дергать PropertyChanged. И это я еще выходит, по твоему мусор вношу, ага, блядь.
>>1816615 > Присобачил на событие в xaml свойствах контрола метод из vm и все работает, блядь, изкаробки 1 а ну покажи это. а мы посмотрим 2 флаг IsEnabled для кнопки к которой ты привязал как поддерживается? или кнопка всегда активна и похуй что кликать нельзя в данный момент?
>>1816627 Я не он если что Так зачем в каждой модели? Не в каждой модели, а только в тех моделях в которых которым нужно будет оповестить кого бы там нибыло об изменениях Большинство моделей просто проставляются со стороны вьюмоделей, а оповещать обратно им не к чему.
>>1816615 >Дался вам этот флаг? Ну заблочишь ты выполнение команды и чо? Кнопка то в окошке все равно нажиматься будет и юзер, будет сидеть и жать ее не понимая что за бред. кнопка переходит в состояние disabled когда команду юзать нельзя. Никогда таких кнопок не видел что ли?
>>1816643 >1 а ну покажи это. а мы посмотрим Ну на, смотри >>1816166 >флаг IsEnabled для кнопки к которой ты привязал как поддерживается? или кнопка всегда активна и похуй что кликать нельзя в данный момент? Элементарно. Создаешь свойство булево, биндишь на свойство IsEnabled в кнопке. Все. Понадобилось, сбросил его в вм, кнопка неактивна, пользователь это видит и как дурак жать и орать, что хули ничо не работает не будет. Нужна стала, взвел его и вот, пожалуйста, нажимай кнопку. Проблемс? >Fody поможет. Щас бы еще под каждый пук дополнительную либу прикреплять.
>>1816152 Не, лучше под каждый пук нахуярить команд, которые только и делают, что этот метод вызывают, ага? ButtonClick(object sender, RoutedEventArgs e) Или Command ButtonClickComand; ButtonClickComand = new Command(); ButtonClickComand += ButtonClick(); чтобы ButtonClick(); Охуеть, блядь.
>>1816751 >которые только и делают, что этот метод вызывают, ага? нет не только. я уже говорил и еще раз повторю. команда это хендлер с флагом "IsEnabled". И раз контролы умеют в эту сущность, то это более полезно, чем отдельно метод, отдельно флаг ну а что еще польза вот ниже читай
> Создаешь свойство булево, биндишь на свойство IsEnabled в кнопке 1 то есть все таки отдельное поле...с отдельным биндингом 2 я уже говорил что команда это свойство и как любое INPC свойство может быть перебиндено в рантайме. Метод на такое не способен 3 Фокус манаджмент в принципе работать не будет.
>под каждый пук дополнительную либу прикреплят не прикрепляй. нравится руками писать пиши. когда надоест подключишь либу которая будет писать за тебя. это кому что нравится
>>1816767 В какую одну, поехавший? В твоей кривой аналогии, ты блядь, под каждый файл отдельно папку хуяришь, которые так же в одной общей лежат. От так заебись, сразу лучше стало, ага?
>>1816758 >куда смотреть? Вот в этот пост, ты издеваешься?>>1816166 >1 то есть все таки отдельное поле...с отдельным биндингом И...чо? Лучше парочку полей под нужды, ну чет мне слабо верится, что у тебя программа постоянно хуярит кучу контролов то включая их, то выключая. А под несколько контролов не трудно поле создать. Список команд под все контролы нинужон. >я уже говорил что команда это свойство и как любое INPC свойство может быть перебиндено в рантайме. Пример приведи, когда это нужно. >Фокус манаджмент в принципе работать не будет. Что это и зачем нужно?
>>1816777 А с чего ты взял, что это тебе поможет структурировать там что-то? Тыскозал что ли? Еще раз, только внятно поясни, как лапша из четырех дополнительных строк в случаях команд поможет тебе структурировать проект?
>>1816594 >Какую вермишель? По каким юзер-контролам чо ты там раскидываешь, как белый человек? ???? Ты весь UI в MainWindow.xaml пишешь, или что? Кто тут поехавший то бялдь??? >Нахуй мне ее доставать, поехавший? Чтобы он сработал из вьюмодели фактически из DataContext содержащего кнопку контрола, нужно забиндить метод, а не просто указать имя. С указанием имени нихуя у тебя не сработает.
>>1816782 >Вот в этот пост, ты издеваешься? а где в этом посте связь события с методом вьюмодели? хендлер на скрине в code-behind и никакого отношения к вьюмоделям не имеет.
> Лучше парочку полей под нужды Это тебе лучше. Мне лучше когда сущность одна, и количество контролов значения не имеет. OneWay биндинг на команду имеет. Ну а работа с фокусом в принципе невозможна по твоей схеме
>Пример приведи, когда это нужно. когда нужно поменять целевую команду (читай хендлер на лету). но это тупой спор. потому что ты скажешь "не меняй целевой хендлер, а сделай один хендлер и в нем уже if и разбирайся" на что я скажу что это тупость делать аггрегирующий хендлер, а ты скажешь нет и в общем тупик
>Что это и зачем нужно? это привязка команды в зависимости от фокуса. Посмотри хотя бы на меню визуал студии и тулбары. Это подходящий пример. В зависимости от того где ты щас находишься пункты и кнопки либо активны либо нет. Городить руками весь этот огород..да ну нах
>>1816794 >Ты весь UI в MainWindow.xaml пишешь, или что? Еще раз, я не какой то неибаца wpf программист, поэтому и спрашиваю у вас, что и как. Я писал небольшие wpf приложения, да, весь UI у меня был в MainWindow.xaml. А как надо, можешь рассказать? Без троллинга. >>1816794 >нужно забиндить метод, а не просто указать имя. С указанием имени нихуя у тебя не сработает. Да? MainWindow1.xaml: <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <Button Click="Button_Click"/> </Grid> </Window>
MainWindow1.cs: namespace WpfApplication1 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); }
Берешь этот код и охуеваешь, что все работает без бинда, просто, с указанием имени. Если MainWindow1.cs тебя не устраивает, то можешь создать MainWindow1ViewModel.cs положить код туда, только в xaml DataContex не забудь прописать, работать будет аналогично
>>1816819 >что все работает без бинда, просто, с указанием имени. и не является MVVM аж нисколько, в общем винформс подход только не спрашивай зачем нужен MVVM ибо все с тобой будет ясно
>только в xaml DataContex не забудь прописать, работать будет аналогично ну я же просил показать пример связки события контрола и вьюмодели в хамле так покажи как это сделать не нужно показывать связь с code-behind
>>1816818 >хендлер на скрине в code-behind и никакого отношения к вьюмоделям не имеет. А что, вьмодель у нас это не просто отдельный cs файл на который мы перенаправляем DataContex? >это привязка команды в зависимости от фокуса Как это работает? Сменил я фокус и что? Как дальше это все командами подхватывается не городя руками?
>>1816823 >и не является MVVM аж нисколько Это схуяли, блядь? Model-View-ViewModel. Где там про bind? Это просто построение программы, что вся логика убирается в модель и связывается с вьюхой через вьюмодел, чтобы в любой момент можно было безболезненно выкинуть нахуй вьюху текущую и напялить другую
>>1816825 >вьмодель у нас это не просто отдельный cs вьюмодель это из MVVM. я не знаю куда ты там что перенаправляешь ибо событие можно захендлерить из хамла только на code-behind причем конкретного для юзер контрола или окна. Если у тебя несколько юзер контролов то все будет в разных местах
>Сменил я фокус и что? WPF знает про и ищет команды в текущем элементе (на котором фокус). И конечно результат выполнения команды будет разный в зависимости от фокуса.
>Model-View-ViewModel. Где там про bind? вообще то ICommand они КАК РАЗ ДЛЯ ПОДДЕРЖКИ БИНДА В MVVM и придуманы. Для не mvvm придуманы routedcommand
я приведу список что не так с методами и пойду
1 невозможно забиндить событие на метод вьюмодели без промежуточного хендлера в code-behind. Тот кто пишет что можно - фантазер. Конечно можно использовать кастомный биндинг но это уже не стандарт 2 Метод отдельно флаг отдельно - удобно только в простых решениях, когда команды не передаются куда то, не собираются в списки комманд (для рендеринга контекстного динамического меню например) и т.д. 3 метод не INPC. Его не сменить на лету. Притянутый за уши!!! пример - кнопка стартстоп, где триггерами целевая команда меняется в зависимости от чего то. Можно сказать что можно в методе решить что делать с помощью if, но это уже спорный момент и слишком примитивный пример 4 CommandTarget и работа с фокусом принципиально невозможны 5 невозможно забиндить хендлер на метод который находится уровнями выше (подобие Relative Source AncestorLevel). Впрочем это продолжение пункта 1 - все придется делать или через code-behind или ебашать RoutedCommand, что не MVVM
>>1816819 Ну а теперь ты разбиваешь свою дрисню на юзер контролы или их вообще пилит отдельный член команды и охуеваешь, что юзер контрол увидит твою хуйню только в своём юзер контроле, а все состояния, данные и прочая хуйня в совсем другом месте, стыдливо прикрываешь попу и перестаёшь тут нахуй бычить, если рассматриваешь всё это с точки зрения >ну гыгыг вот хеловорлд выводится в MainWindow.xaml чё тут еще надо)))0 тупые сук ахаха ))))
>>1816835 >вообще то ICommand они КАК РАЗ ДЛЯ ПОДДЕРЖКИ БИНДА В MVVM и придуманы Ну, очередные костыли накрутили и рады. Там, блядь, весь wpf костыль на костыле и костылем погоняет. Нахуй мс поддерживает эту парашу, которая даже на момент выхода была неудобным говном я хз.
>>1816843 >перестаёшь тут нахуй бычить А кто бычит вообще? Я как удав спокоен, это двачи, тут и на хуй могут послать, ты чего обидчивый такой? >юзер контрол увидит твою хуйню только в своём юзер контроле юзер контрол в юзер контроле? чо,блядь? Попроще можно? Юзер контрол это вообще что в данном случае? Если я кнопку и текстблок нахуярил вместе в проекте типа юзер контрол и затем вставил его на свое окно - ты это имеешь ввиду? Вот джва таких юзерконтрола, общаются они между собой через вьюмодель, верно? Чтобы все работало, нужны бинды, верно? я все правильно понял?
>>1816849 >Там, блядь, весь wpf костыль на костыле и костылем погоняет сказал тот, кто не понимает зачем нужно MVVM и что это такое когда созреешь до понимания что и зачем, вот тогда и приходи с вопросами. Впрочем ты не придешь тогда, ведь вопрос "нахера" у тебя не возникнет
А до этого хотя бы изучи RoutedCommand ну чтобы меньше говнокодить хоть немного
>>1816868 Мдель это именно модель. в ней не должно быть бизнес-логики. Даже дата-репозиторий, дёргающий данные, не является моделью. VM в WPF - прокси между данными (model) и вьюхой (view) >>1816867 >чо,блядь? Попроще можно? Боюсь проще некуда, если ты не понимаешь, зачем нужно разбиение вьюх как и всего прочего на отдельные компоненты, модули, контролы. Мне кажется, тебе просто не хватает опыта, чтобы это понять. Мы тут вдвоём втроём? пытались тебе объяснить с разных позиций, что наговнокодить можно и событиями, но по-человечячи если делать - биндинги - крута, но твоё невежество непробиваемо. Я тоже на самом деле когда только изучал WPF, думал ротебать этих биндингов и комманд особенно чё бля ёпту я щяс нахуй как привяжу события блять System.Interactivity блядь подключу блядь всё блядь будет нахуй. Но потом по мере работы всё больше и больше понимал, какая же это хуйня и как же элегантно выстраивается архитектура приложения на биндингах, вот так руки и выпрямились правда потом я понял, какое же десктоп ненужное говно, и в итоге хуй знает зачем просто овладел этим проклятым wpf ом и щас выше доказываю, какая же он ненужная хуйня
>>1816938 >Мдель это именно модель. в ней не должно быть бизнес-логики. Даже дата-репозиторий, дёргающий данные, не является моделью. VM в WPF - прокси между данными (model) и вьюхой (view) Да ты что, солнышко, блядь. Знаешь зачем эта вся хуйня сделана? Чтобы ты мог вырвать, нахуй свою вьюху для wpf и прилепить без проблем вьюху от asp.net mvc, просто выкинув нахуй в и вм и приляпав через контроллер вьюху asp.net mvc чилить сидеть дальше. Как ты это сделаешь, если у тебя в вм логика?
>>1816938 >Мдель это именно модель. в ней не должно быть бизнес-логики. >VM в WPF - прокси между данными (model) и вьюхой (view) Так, в модели логики не должно быть, вм это прокси между моделью и вьюхой...эммм, а где тогда бизнес логика должна быть?
>>1816944 пошли человека в хамарин где для одного слоая вьюмоделек разные виды под андроид и под айос а если он скажет "у нас wpf же хуле мне твой хамарин", то напомни ему про тесты ну а если тесты ему не нужны, то какой смысл дальше говорить
>>1816950 В хуервисы, где у тебя в аббревиатуре мввм буква "с" для сервисов твоих? Что, по сути, сервис твой? Service.cs в методах и функциях которого логика? И чем это отличается от ModelForLogic.cs в который я положу свои методы и функции для логики?
>>1816989 >где у тебя в аббревиатуре мввм буква "с" для сервисов твоих? вот же на - MVsVM >И чем это отличается от ModelForLogic.cs в который я положу свои методы и функции для логики? Ничем, клади
вот путь развития от макаки до белого человка Сказ в 3 частях. UI фреймворк не принципиален главное суть
1 сначала говнокодим как макаки, то есть по клику на кнопку делаем хендлер в классе формы где дергаем модель забираем данные, организуем их для визуальщины и отображаем вручную собирая вид Ну где позволяет используем тот убогий BindingSource
2 Потом растем, читаем книжки про SOLID и чистые архитектуры и понимаем, что у нас в форме перемешан код и взаимодействия с моделью и построения визуальных контролов. И для тестирования этого нужна специальная макака, которая будет тыкать на кнопки. Ну или использовать дикие тулзы которые кликнут на кнопку и потом че то там доставать из контролов чужого приложения, что сам по себе пиздец
Немного подумав о том, что можно сделать учитывая данный фреймворк, у нас рождается MVP, то есть модель-вид+презентер В презентер уезжает взаимодействие с моделью. То есть как теперь а) модель есть модель б) вид отправляет запросы в презентер и в виде остается только рисование (непосредственная работа с контролами) то есть (КАК РИСОВАТЬ) в) на презентер возлагается запросы к виду, ну какая там еще визуальная логика и дергание вида с просьбой отобразить данные презентер знает про вид через интерфейс. То есть презентер ничего не знает про контролы, а у него вид с интерфейсом "отобрази такое" (ЧТО РИСОВАТЬ) то есть: вид дергает по клику презентер - презентер достает юзера из базы - презентер вызывает меод вьюхи "покажи юзера" и дает ему юзера - вьюха рисует
Обязанности разделили. каждый занимается своим делом. Ущербная, но тестируемость, но ущебрная. Отличный подход для WinForms в силу его ущербности
3 тут вам достается фреймворк который умеет в биндинги. И так мы приходим к MVVM. Но зачем? почему не остаться в MVP? зачем менять P на VM? а вот: 1 презентер вынужден знать про вид, а значит вид должен дать ему контракт чтобы его презентер вызывал (который ничего не знает про контролы в общем то, а дает команды "изобрази это") биндинги же позволяют ничего не знать про вид, а следить. то есть вьюмодель вообще не знает про вид ничего. Она знает про саму себя, а вид(ы) сами следят за ней и рисуют себя 2 можно строить иерархии вм, биндинг все разрулит. 3 Раз нет прямой связи вид - вюмодель - вид, то можно строить независимые иерархии контролов вида и иерархии вм 4 за счет шаблонов и биндингов рисование гуи получается декларативным и обычно ни строчки кода в code-behind
Больше свободы, больше изолированность (кто про кого знает), большая декларативность, отличная тестируемость - дернул команду, смотри состояние вьюмодели, нет ограничений как в MVP
>>1816945 В либе, очевидно. MVVM - это паттерн о UI целиком и полностью. И логика в нем только для интерфейса, бизнес-логику ты пишешь отдельно. Вот например: Ты пишешь калькулятор на WPF, который может только в сложение двух чисел (специально очень простая задача, чтобы ты понял), a+b=c. У тебя вьюшка - это то, как программа выглядит, модель - твои данные, а вьюмодель связывает вьюшку и модель. Но модель никакого сложения не производит, у тебя сложение в отдельной либе. И когда тебе нужно получить c - ты делаешь следующее: c = MyLiba.Addition(a, b). Нахуя? Чтобы когда тебе внезапно понадобится сделать этот калькулятор в вебе или на андроиде (а в реальном мире это нихуя не внезапная потребность), ты не сидел и не дублировал логику из моделей WPF, а спокойно вызывал свою либу и радовался жизни. мимо
>>1817031 >У тебя вьюшка - это то, как программа выглядит, модель - твои данные Какие данные? Где в твоём примере данные? У тебя из вм дёргается либа. Где модель то? >этот калькулятор в вебе или на андроиде (а в реальном мире это нихуя не внезапная потребность), ты не сидел и не дублировал логику из моделей WPF, а спокойно вызывал свою либу и радовался жизни. Ну, вот твоя либа и есть модель по сути. Что ты её добавишь в проект, если переедешь на ведроид, что я в проект добавлю тупо свою модель и все работать будет искаробки, что у тебя, что у меня. Так почему ты так уверенно говоришь, что твоя либа это не модель нихуя?
>>1817096 >Так почему ты так уверенно говоришь, что твоя либа это не модель нихуя? Либа - это модель. А если точнее, либа - это модели + бизнес-логика. Скажем, ты дергаешь из SQL юзеров. У тебя будет класс DataAccess, модель UserModel и, скажем, класс ModifyUser. Но это все - по сути кишочки твоей программы, отношения к UI не имеющие. UserModel в либе и в WPF - не одно и то же. В такой программе у тебя вьюшка - вьюшка, модель - UserModel (НОВАЯ, а не из либы), а вьюмодель через либу просит юзеров или че-то с ними делает. Нахуй дублировать модели? Как минимум, модель в WPF относится к UI, а не к бизнес-логике. Во-вторых, модель в твоем UI и в твоих кишочках может различаться. Простой пример - ты дергаешь юзеров вместе с датой создания аккаунта. Она нужна в гуе? Нет. В итоге у тебя либа берет юзеров с датой, а гуй получает без даты. Удобно, например, когда ты этих юзеров получаешь через WebAPI: ты хочешь, чтобы через API можно было получить всю инфу о юзере, но для гуя тебе дата реги не нужна. Вариант 1: создать новый вид запросов к API, но это пиздец, да и не всегда ты владелец этого API. Вариант 2: делать запрос на всю инфу, как предлагаешь ты. Но если юзеров ты запрашиваешь много, то дохуя памяти будет просто так уходить на инфу, которая и не используется. Или вариант 3: ты делаешь запрос на всю инфу и обрезаешь ненужную, приводя первоначального юзера в удобоваримый для твоего гуя вид.
>>1816354 Мидл на галере 2+ людей. Недавно летом матрицу сдал(внутрений собес на должность мидла). А на проекте давно уже делаю задачи любой сложности.
>>1817103 >делать запрос на всю инфу, как предлагаешь ты. Но если юзеров ты запрашиваешь много, то дохуя памяти будет просто так уходить на инфу, которая и не используется И поэтому ты предлагаешь эту кучу юзеров одного класса перегонять в другой? То есть, мало того, что у тебя будет их в два раза больше, пока перегоняешь, так еще и время на это тратится, ведь пользователей дохуя. Браво, блядь, а потом начинается, мам, тормозит
>>1817483 На выбор есть несколько тем: wpf - говно, правда или вымесел? команды нинужны, стоит ли писать лишние строчки кода, чтобы в любой момент изящно запретить юзеру нажимать кнопку? мввм - является ли логика моделью?
Хммм. Хммммммм. Как же у вас все замудрено. А как называется следующая картина:
У нас есть сущность, она хранится в БД, она ничего не знает о бизнес-логике, просто представляет из себя строку в БД. Есть класс который бизнес логикой этой записи владеет, он знает что, допустим, возраст нельзя указать отрицательный или имя должно быть длиннее 2 символов. Ну и есть какая-то страничка, которая данные введенные отдает классу с бизнес-логикой, и соответственно рисует что-то в зависимости от того что скажет класс с бизнес логикой. Что тут чем является?
>>1817533 Нажал на вьюхе кнопку, сработал метод в вм, который взяв данные отправил их в модель, которая поглядела валидные ли данные. Далее метод из вм хуярит эти данные в БД, если они валидны. Все.
>>1817530 >что я еблан и в модели логики быть не должно ну если почитать у вас тут просто безумие какое то
>>1817533 >она хранится в БД, она ничего не знает о бизнес-логике, знает или не знает, но она является моделью в MVVM. В MVVM вообще все что не вид, то есть модель. Это концептуальное разделение основных слоев. Это не отрицает разбиение модели на слои типа слой бизнеслогики, слой персистенс, утилиты и т.п. MVVM всего лишь описывает как выделить визуальную часть
>>1817623 Опишу как у меня было. В школе я был тупенький, на уроках информатики давали паскаль. Ну, мне нравилось, я учил. Единственный во всем регионе сдавал информатику. Потому лучшие баллы, кек, по информатике в регионе, мне даже грамоту выдали за это, лол. Так вот, поступил я в шарагу на кодера. Там давали Си. Ну и год дрочили си. И сказать честно я нихуя не понимал как писать сложные программы. Ну, т.е. простые, которые нормально в одном файле можно держать - пожалуйста, а банально какую-нибудь складскую программу по учету товаров, еще и с ГУЕм - не представлял. Так вот, на втором курсе шараги у нас пошел шарп. И он был охуенен. С ним я быстро наращивал сложность программ, понимание как строить что-то сложное начало приходить, потому что не нужно было думать о куче мелких вещей. К концу второго курса я с такими вот днищескиллами смог найти работу .net-джуном. Так вот, когда на 4м курсе нужно было писать диплом и научник настойчиво попросил делать это на С++, проблем с переходом к С++ уже не было никаких, потому что умея строить сложные программы, плюс имея коммерческий опыт разработки, переключиться на другой язык не так сложно, достаточно немного погуглить про моменты которые отличаются, типа управления памятью и прочим.
Короче, мораль. С# позволяет очень быстро нарастить сложность программ и не думать о примитивных вещях, сосредотачиваясь на том как модули взаимодействуют друг с другом. Когда ты это умеешь, остальное лишь вопрос пары минут гугления.
Если я умею в формы, то могу ли я говорить, что умею в qt? Вроде немного поглядел, покрутил, одно и то же, контролов накидал, к событиям привязался, не?
>>1817701 Нет, особенности работы с qt у qt ведь не только аналог винформс есть, у них там еще QT QML слишком сильно отличается от форм. Да и различия самих крестов с решёткой тоже дают о себе знать
>>1817704 Не, я может коряво объяснил. Вот есть формы, есть кути. По сути и то и другое для визуализации чисто. Кути же для питухона того же есть, например. Если смотреть с точки зрения визуализации тогда, сам алгоритм работы же похож? Накидал на форму контролов, обрабатываешь баттонклики? Или в кути по другому все?
>>1817713 Объясни, плес, в чем именно? >>1817718 >Желаю тебе удачи и чтобы qt editor с 1 раза собрал все либы Кто? И что, он не может собрать свои либы, а виноват я или что? Я просто спрашиваю. В чем подход другой? Чем отличается от форм? От wpf отличается? Чем? Я знаю, конечно, что можно с головой погрузиться, но до того, как прыгну, мне охото понять, в какую жопу я собираюсь шагнуть
>>1817727 во всем. Начиная от набора контролов и заканчивая тем что в кутях слоты в общем если ты знаешь формы это значит что qt ты будешь как слепой котенок то же самое можно сказать и про WPF
>>1817728 Интересно. Если не лень, можно простой пример? Вот в формах есть баттон, нажал, событие или биндинг обработали - метод выполнился. А в кутях как? Не так что ли все работает?
>>1817727 Ну QT я бы назвал даже не фреймворком, а полноценным SDK со всеми его статическими и динамическими либами, бесплатными и платными изданиями и своими IDE. Вот их IDE - qt creator, можешь конечно попытать счастья в VS, но последний плагин под вижак я помню был на 15 студию, но если начнешь осваивать - я бы рекомендовал именно с qt creator. Так вот qt creator работает то ли на чистом cmake, то ли на своём враппере cmake, а cmake дело тонкое, чуть что не там файлы - ты нихуя не поймёшь, только в штаны насрёшь с ебанутых ошибок компилятора. Еще веселее было, когда у меня в qt creator'е какая то хуйня с локалями была, и эти ебаные ошибки выдавались даже не на русском/английском, а вот так dwadj038%T#$)t50w48t_)TY_@_$@u-6t824u huyna.h line 22 awd_(UT$WTU)$_)_____$*TU$)U_)$WIJ OERH GT)H$W) huyna.cpp line 90
Это раз. Два - это отличия qt и winforms. Я уже лет 5 не трогал qt, да и тогда трогал его только в академических целях, сделал 2 лабы на формах и QML и плюнул нахуй на эту дичь, ибо ну его впизду. Так что мои понимания отличий поверхностные и неактуальные. У крестов из под коробки нет событий, но их концепция в целом нужна в GUI приложений. Так вот эта система в qt реализована на слотах и сигналах, это как минимум первое отличие. Суть примерно та же, реализация совсем не та же. Генератор кода, насколько я помню, в qt был слабее, чем в winforms, приходилось много бойлерплейта писать. Не сказал бы, чтобы крестовые нюансы прям сильно вставляли палки в колёса, но в целом шарп гораздо слаще крестов, поэтому ванлайнеры решётки превращаются в среднюю такую боль на крестах.
Контролы местами другие и работают по другому. Уже не помню точно, но вроде у text input'ов не было слотов событий, которые есть у аналогичных контролов в винформс и подобное.
WPF есть смысл сравнивать только с Qt QML, но к тому моменту qt меня так заебал, а qml показался таким ебанутым по сравнению с xaml, что я окончательно забил
Допустим есть API1, в нем данные в одном виде, нужно раз в час делать запрос, получать данные, смотреть есть ли данные у моего приложения и если нет - приводить их к пригодному для моей модели виду. Так вот, как это в плане архитектуры должно выглядеть? Допустим я сделал так: У меня есть класс Worker, этот воркер раз в час делает запрос к API1 сравнивает что пришло с тем что есть и недостающее пихает в мою базу.
Но что если однажды нужно будет добавить новые данные, допустим из API1 нужно будет не один запрос, а 2 делать и как-то аггреригрвать результат? Или если апи изменится и отдавать будет не в том формате? Или я решу свою базу заменить выводом в консоль? В общем, как примерно было бы сделать такую штуку более гибкой, чтобы в случае чего не приходилось полностью переписывать класс Worker?
>>1817735 Какого хуя тогда всем этот куту нужен? Блядь, ну хуйня же? Нет, мы тут на куту пишем, а ты ничтожество, раз не знаешь, что событие это сигнал называется. Да ну? ДА! Это одно и тоже? Нет!! Этадрукое
>>1817817 >Какого хуя тогда всем этот куту нужен? Если ты не ERP макака на галере, а делаешь продукт, который продаешь третьим лицам, то на шарпе особо не попишешь, ибо вскрывается на раз-два декомпилятором. Если пишешь на крестах, то qt там наверно самый продвинутый sdk для UI ну или електрон))0
>>1817838 >ибо вскрывается на раз-два декомпилятором Ща бы сидеть вскрывать все говно, что твои макаки наговнокодили, ага. Главное идея и реализация. Я уверен код фейсбука был уббог, код вконтакта был убог
>>1817841 Ну я рассуждаю по проприетарному софту типа автокадовских и адобиевских программ. Я думаю одна из причин, по которой они пишут на невиртуализируемых языках - это дополнительная сложность крякинга
>>1817911 конечно не понимаю. это ж не я заявляю, что есть дохуя чего чего нельзя сделать на шарпе (и это с ансейф!!!), но можно на плюсах ибо есть указатели
>>1817936 насколько я помню, unsafe в шарпе не такой функциональный, как ты его себе воображаешь. ты не можешь например взять произвольный адрес и кастануть его к void*, а потом оттуда читать/хуячить в память напрямую. это можно делать с IntPtr и прочие вещи, но это очень долго и сложно
>>1818077 тут он повисает на втором локе, но из первого быстро выходит и сразу заходит во второй поставь Thread.Sleep() после Task.Run и увидишь что он будет ждать
>>1817843 Для них выбор продиктован требовательностью к производительности. На кряки и по большому счету наплевать, потому что основной доход у них от организаций, которым выгодней заплатить за лицензию, чем разорится на судах и выплате компенсаций.
Такое дело - добавил локализацию через AddDataAnnotationsLocalization, заполнил словарь, установил ErrorMessage у атрибутов и все работает. Вопрос как мне добавить поддержку локализации ErrorMessage для своего кастомного ValidationAttribute?
Кстати, я тут в фитчах 9 версии языка только сейчас обратил внимание на т.н. "Top-level statements and functions". И я что-то не совсем понимаю как оно работать должно. Допустим я вот такой еблан, что всегда делал Program не просто точкой входа но и синглтоном, т.к. в любом случае он будет, а следовательно почему-бы не запихнуть туда еще и какие-то общие штуки, типа ресурсов и прочего. Ну, собственно, как оно должно работать в этом случае? Я так понимаю что под капотом оно все еще будет собираться в некий класс Program и в нем все еще будет метод Main, но к нему-то мне обращаться не нужно было, а вот к другим методам, например настройкам приложения которые я получил из аргументов - нужно. В общем, на самом деле я давно хотел чего-то подобного. Вернее я хотел чтобы был вариант писать как в сишчке - без классов(хотя бы на уровне файла), потому что иногда они не нужны. Но пока единственное применение что я вижу в текущей реализации это какие-то совсем маленькие программки, потому что в больших - ну будет у нас один файл с этими "Top-level statements and functions". Ну и что? Погоды оно не сделает. А вот если бы можно было как на прикриплейд, то другое дело. Даже вижу кейсы для использования вот так вот. Например нужно константы хранить, оно довольно удобно ложилось бы на это все, каждый раз делать статичный класс для констант - ну реально же как-то неоч, а константы так или иначе много где нужны и разбить их по файликам бывает необходимо и получается что куча ненужного мусора в виде: public static class ProgramConsts{...}; public static class ServerConsts{...}; public static class SettingsConsts{...}; и т.д.
В общем, не знаю я. Было бы классно если бы тогда в 10 шарпе позволили без классов писать, пусть и с какими-то ограничениями.
>>1818513 >это какие-то совсем маленькие программк
Для этого и создавалось. В остальном не вижу проблем, кроме как неудовлетворенное "хочу как в сишечке". Твои includes можно заменить partial классами, и не нужно будет каждый раз смотреть что там заинклюдили и откуда.
>куча ненужного мусора в виде: ...
Мусор получится если ты всё это в один файл закинешь, а потом заставишь остальных гадать где какие константы лежат и вообще где они используются, а в твоём варианте сразу понятно к каким классам эти константы относятся. Можно вообще папки(неймспейсы) использовать для этого и везде у тебя будет твой Constants класс, просто с обращением через Server.Constants или Settings.Constants. Рефлексией можно будет легко собрать все константы, пройдясь по всем неймспейсам и вложенному классу Constants.
>>1818513 Я так понимаю это сделали чисто чтобы привлекать новичков, которых раньше при выборе языка могли отпугивать все эти class Program static Main, а теперь как во всяких Питонах/JS, понятно и младенцу.
Аноны, можно ли как то в один проект перенести файлы другого безболезненно? Знаю что можно вручную копировать, но может vs позволяет это сделать быстрее и проще.
Спасайте, уже мозги вытекают. Допустим есть стандартная учебная база блоги и посты. class Blog(int Id, string name, IList<Post> posts) class Post(int Id, DateTime time, Blog blog) мне надо через ЕФ Кор выбрать 5 блогов по времени последнего поста (это получилось) и два первых и два последних поста для этих блогов. Вот с этим, он меня посылает, то таблица 't' не сущестует, то could not be translated, то еще какая шляпа. Можно как-то написать такой запрос, не вытягивая на клиент все посты?
>>1818801 Да не. Я конечно понимаю, что возможности орм сильно ограничены по сравнению с SQL, но в данном случае дело скорее во мне, а не в орм. Получилось пока как на пике, не понятно почему нельзя написать Posts...Take(2).Union(Posts...Taske(2) что б на стороне базы объединение произошло.
>>1818817 >TakeLast(2) А есть хоть один провайдер в котором реализовано TakeLast? >>1818817 > делаешь таблицу с сортировкой по дате создания Можно по-подробнее? Что за таблица? Я же могу свою таблицу Posts отсортировать. У меня проблема в том, чтобы выгрести и инфу о блогах и часть их постов за один запрос.
Сап аноны, нужен совет, мне нужно писать диплом и я подумываю что бы взять на тему создание собственной СУБД, как думаете с этим вполне реально разобраться?
>>1818916 Если у тебя диплом в этом семестре, а ты всерьез задаешь такой вопрос типа реально-нереально разобраться, то не факт, что ты успеешь сделать какую нибудь васянскую ERP систему на винформах
>>1818966 Ну вот одумайся, пока не подписался. Я тоже выёбывался и в этот раз тоже выебнулся и брал ебанутую тему, потом либо просто проёбывал дедлайн, либо в последний день лютую хуйню делал лишь бы работало и приносил.
>>1818974 Раз это так запарно то лучше поищу другую тему, гугля что нибудь интересное для диплома я читал, что многие предлагают делать сайты или интернет магазины,такой вариант можно рассматривать или можно еще что то проще найти
>>1818979 У меня знакомые постоянно просят дать сайт, на котором можно прослушивать звонки знакомых или читать их смс. Если сделаешь такой - очень благодарен буду!
>>1819039 И еще поиск соцсетей человека по фотографии. А то финдфэйс закрылся, а вещь-то полезная. Это же не сложно, а люди спасибо скажут. Тыжпрогаммист
>>1818916 А я бы на твоем месте не слушал тех кто отговаривает. СУБД как тема диплома - интересно. Другое дело, что если это будет стандартная СУБД в который ты просто сделаешь индексы, хранимки, триггеры и прочий дефолт, то тебя могут спросить: "А что тут нового-то?", ну, это если вуз не совсем шарага. Разобраться - реально, я правда по другой теме писал диплом, но однокурсник запили колоночная СУБД, буквально за неделю реализовал, еще неделю занимался оформлением диплома, изучение необходимой для реализации литературы, по его словам, заняло месяц.
>>1818793 В глаза ебусь. >>1820153 Ну так в чем проблема? Сортируешь по возрастанию/убыванию даты и достаешь первые 2. Take должен во всех провайдерах работать и во что-то типа Select Top 2.../ ... limit 2 ну и т.д.
>>1818824 > нет. дело именно в орм. абстрагируясь от базы ты получаешь проблему выражения запросов к базе в терминах орм. А не абстрагируясь ты получаешь кучу копипастного кода и возможные проблемы в будущем. Для примера, вот чел на работе писал нативные запросы к MySQL, было это давно и на джаве, так вот, чел ушел, продукт остался. В итоге клиенты не могут нормально поставить себе новый MySQL потому что он там чет подхитровыебанное писал для оптимизации запросов, никто лезть разбираться из кодеров сейчас не хочет. Юзал бы он ОРМ, достаточно было бы одну dll'ку заменить на ту что умеет с новыми версиями MySQL работать и никаких бы проблем с этим не было. А ведь есть клиенты которые купили какую-нибудь про-версию MS SQL и хотят ее использовать, вот ты будешь писать нативные запросы к каждой СУБД? А есть ли у тебя время чтобы каждой возможной СУБД написать запросы? А что будешь делать когда уже все СУБД поддерживаешь, и нужно буквально в одном месте один новый запросик делать? А если по солиду все это реализуешь, то в итоге у тебя самого выйдет новая ОРМ, так нахуя ты велосипед изобрел, когда есть нормальные решения?
>>1820195 нЕТ ТЫ НИ НАПНИМАЕШЬ ВЫ ФСЕ МАКАКИ МАКАКИ ВЫ ХАТИТЕ ПРОСТО ЧТОБЫ БЫЛО И УДОБНО НЕЕЕТТТ СУКА Я ЗАПЩИРАЮ МАКАЧИТЬ МАКАКА НЕЛЬЗЯЯЯ НАДО ВСЁ НАТИВНО ДЕЛАТЬ СУКА ТЫ ЧТЬО БЯЛЯТЬ НЕ ПАНИМАЕШЬ ОТ ВАС СУКА СОФТ ТАРМАЗИТ ВСЁ ТАРМИАЗИТ МАКАКИ БЛЯТЬЬБББ
>>1820195 >А не абстрагируясь ты получаешь кучу копипастного кода и возможные проблемы в будущем. а абстрагируясь ты получаешь проблемы орм уже сейчас. 2 стула как ни крути.
>потому что он там чет подхитровыебанное писал для оптимизации запросов если ему без ограничений орм понадобиось оптимизировать, то с орм тем более это ему было бы нужно и он такое бы нагородил, что вы еще без смены мускуля все за голову хватались. Чито поделать - орм не для оптимизаций
ну а про то что новый мускуль не поддерживает старые запросы это шутка такая чтоль?
Вкатили на ворлдскилз. Компетенция - "программные решения для бизнеса". Анонасы, посоветуйте гайды по visual studio, а также sql menegment. В шараге гайдов не дали, сижу, пержу, ищу сам.
>>1820296 > посоветуйте гайды по visual studio Может тебе еще клавиатуру для кодинга подсказать чтоб программировать на 30% быстрее? Как тебя на ворлдскиллз отправили с такими вопросами?
>>1820283 > если ему без ограничений орм понадобиось оптимизировать А ему, судя по всему, и не надо было оптимизировать, он просто сам решил что хочет, а это был 2005 - делай что хошь, лишь бы работало. Я правда не знаю были ли в то время ОРМ, я тогда только в 3й класс пошел.
> ну а про то что новый мускуль не поддерживает старые запросы это шутка такая чтоль? Не знаю что там поддерживается или не поддерживается, потому что когда я пришел работать, никаких СУБД кроме MS SQL я не знал, а на работе для новых проектов использовали уже pgSQL. Суть в том, что при обновлении все ломается, а при откате на старый MySQL - работает, лезть в код этого проекта никто не хочет, потому что там хрен пойми как все работает. Один вот попытался, в итоге месяц возился-возился, а результатом возни было добавление в руководство строчки про то что работает на с такой-то версией MySQL работоспособность с другими - не гарантированна.
>>1820306 >работает, лезть в код этого проекта никто не хочет, потому что там хрен пойми как все работает ну так это ваши проблемы что написано все через жопу пишите нормально
зы: даже с вашей орм в случаях оптимизации придется костылить sql.
Хотя в наше время идут по пути "юзер богатый и докупит железа"
>>1820303 >> посоветуйте гайды по visual studio >Может тебе еще клавиатуру для кодинга подсказать чтоб программировать на 30% быстрее? Как тебя на ворлдскиллз отправили с такими вопросами? Туда всех с нулевыми знаниями берут блять
Приветствую. Нужна помощь. Надо соединить бек(asp.net core web api) и фронт (react+ts). Общее представление есть, хотел бы может какие то ресурсы/гайды или типа того что бы посмотреть примеры именно react+ts. Или может у кого будет вообще советы по коммуникации двух сторон. Перечитал подходящие главы из книги ASP.NET Core and React(Carl Rippon), но в ней много неточностей и непонятной инфы.
>>1819530 .NET 5 - это по факту .NetCore 4, очередной ребрендинг, с намеком что вот теперь то это основная ветка дотнета. Из менее маркетологических причин - начали сливать библиотеки в единую платформу, мол теперь CoreCLR - для серверов, Mono - для AOT, но крутится на них общая FCL
>>1820408 Зырь финт ушами. Берешь докер. Бек в контейнер для бека, там вся неткор хуйня Фронт в контейнер с нжинском В конфиге нжинкса делаешь чтобы запросы от клиента пересылались в контейнер с беком.
>>1820408 Никаких сложностей то и нет, если проблемы не искать. На фронте можешь сделать набор методов, которые будут принимать подходящие для запросов параметры, делать запрос по домену бэка + константа с адресом + аргументы твои через, например, https://www.npmjs.com/package/axios, возвращать промисы. На беке просто делаешь веб апи контроллеры и получаешь запросы от фронта. Если нужно коммуникацию в другую сторону - дефолтный signalr.
>>1820443 Всмысле как? Берешь фронт,собираешь его для прода, затем парой команд для докера копируешь в контейнер с настроеным nginx, затем создаешь из образа - контейнер и биндишь к порту, все у тебя фронт в контейнере, nginx там только чтобы принимать соединения. В другом контейнере у тебя лежит бекенд. Так вот, когда у тебя из фронта запрос в виде: env.prod.BASE_URL/api/v0/Item/1, если ты настроишь по гайдам, бек получит этот запро, отдаст фронту, а фронт уже через nginx клиенту. Это все делается просто-быстро. Да, можно не nginx а ноду или что-тебе больше нравится, просто nginx простой и довольно популярный.
Можешь конечно чуть больше поебаться и запихнуть фронт внутрь проекта с беком, настроить там все, но это та еще ебота на самом деле, первый вариант хоть и кажется мудренным, на самом деле проще и удобнее, потому что фронт отдельно - бек отдельно, ты можешь проверить большую часть фронта не запуская бек, можешь проверить свагером апи бека.
>>1820443 Легко, фронт же должен отдаваться браузеру через какой-то хттп реквест. Т.е. нужен веб сервер. Обычно если фронт пилится на Vue/React/Angular, то там запущен сервак на ноде (сблеванул) и когда ты деплоишь новые сорцы (в твоём случае тайпскрипт), он компилит это в джаваскрипт и потом отдаёт эти статичные файлы (жс, цсс, хтмл, графику, шрифты) любому, кто сделал http request.
Dockerfile FROM node:13.12.0-alpine WORKDIR /app COPY package.json ./ COPY package-lock.json ./ RUN npm install --silent RUN npm install react-scripts@3.4.1 -g --silent
А потом запускаешь docker build
Всё очень легко, всё делается за пол часа, всё гуглится с миллионом работающих примеров за минуты.
>>1820663 >>1820724 На самом деле в нашем сетапе Докер только для компиляции образов (image building) делается. Так то можно хоть докер, хоть бульду buildah - ебучие бульдоги и ебучие собаководы! не могли нормальное лого для своего продукта сделать? пригорает., хоть kaniko, хоть podman. Они все умеют взять имеющийся докерфайл и сделать образ. Докерфайл можно за несколько минут в баш скрипт преобразовать, если очень хочется.
>>1820727 >Нормальные пацаны Это ты так смузихлёбов назвал? Безсервеная архитектура хорошо для всяких stateless functions годится, когда надо чего-то быстро сделать - аутентификация, число посчитать, чего-то внутреннее для отладки, процесс какой-то запустить, аудит лог записать. Приложухи пусть пока будут на отдельно выделенном процессе (на кластере процессов) крутиться .
>>1820752 В моем хлеву с gcp работают, там уже не только функциями ограничиваются - App Engine, Cloud Run, базы данных. Хотя под капотом оно примерно кубернец и докер, конечно.
Челы, может кто подскажет? В своих примитивных новичковых нуждах стал пилить приложение для винды, чтобы с удаленным сервером без использования браузера взаимодействовать.
Медленно продвигался, делая самый базовый функционал для взаимодействия и обработки полученной инфы. Весь код для консольного приложения работал нормально.
В общем стал переносить на форму в ВФ кнопочки, типа сделать-то, сделать другое, в кнопочки копипасть рабочий код. Все шло нормально, пока вдруг аддон Flurl не запорол малину отказавшись отправлять ерундовый запрос - причем в консольном приложении все работало/работает, а в форме, в виде запрогораммированной кнопки, нихуя.
Причем с первой кнопкой все нормально, результат ее работы строго тот же, что и запуск из консоли.
Разница между кнопкам в том, что первому адресу достаточно пустого GET запроса, а второму необходимы headers, которые я ему присылаю. Но это почему-то не срабатывает для формы.
Где я проебался? Почему один и тот же код работает в консольном приложении и отлетает с абсурдной ошибкой в форме?
>>1820820 ниче не понял но на картинке он жалуется что ты шлешь GET с телом запроса (что конечно возможно, но не родным клиентом) тело запроса принято слать как POST же
>>1820823 Ну я скопировал всю инфу из запроса браузера. Там ГЕТ + набор header. Все тоже самое я ему и шлю. Кроме того, как я и сказал, этот же самый код работает из консоли.
>>1820828 нужно не для телеметрии, а для разработки
у тебя есть ендпоинт все вроде норм, но показывает 404 как узнать что там порешал асп что выдал 404, куда он там зароутил и не нашел? встроенным функционалом плиз
>>1820832 Если у тебя Serilog/TelemetryClient, то в конфиге в проде меняешь флаг на Debug/Verbose/Trace где надо (он может и дефолтные системные события ловить) и смотришь что он выполняет, куда тыкается, какие рауты пытается запустить и прочее. Во всяких облаках это за тебя вообще абстрагированно во всякие красивые панельки, там даже свои собственные конфиги трогать не надо, оно за тебя всё загрузит. Ну и dotnet-monitor.
>>1820828 >встроенный функционал это какой еще? У меня есть web-api в релизе, нужно реквесты проверять, чекать запросы. В телескопе из коробки есть широкий функционал, для asp.net нашел только (похожее) под AWS, и то платное >выплёвывает и куда пишет, если нет логгера? Все, что ты перечислил, это логгеры
>>1820840 В проде только на логи и надо полагаться. А то ещё додумаются перезапустить приложение в дебаге, пока в него живые юзеры стучатся. В разработке у тебя dotnet run с консолью, куда сразу всё выплёвывается и дебаг.
>>1820837 Кто в прод приложение без логера выпускает?
>>1820844 я спрашивал за прод >>1820842 >Кто в прод приложение без логера выпускает? логгер есть, но UI телескопа > текстовика с тувой хучей логов INFORMATION / WARNING etc.
>>1820845 Kibana, Elmah, App Insights, https://newrelic.com,https://grafana.com. Там нормальный поиск и группировка всех логов и телеметрии. Некоторые могут помочь навесить алерты и информаровать о высокой нагрузке, куче ошибок и прочему.
>>1820844 Я на коре в хайлоад прод пилю уже 3 года и не жалуюсь на отсутствие инструментария. Отладка косяков даже в твоём ненавистном проде занимает от нескольких минут до нескольких часов. Локально вообще секунды-минуты любая проблема устраняется. Даже когда работаешь с каким-то магическим 3rd party API, который ведёт себя не по документации (которой и нет).
>>1820876 >Я на коре в хайлоад прод пилю уже 3 года и не жалуюсь на отсутствие инструментария. звучит как "я в блокноте пишу и мне норм. значит IDE никому не нужны" или "я папки зипую и мне норм. ваши гиты не нужны"
>>1820879 Нет, это просто значит что ты не знаешь/не понимаешь как работать с выданным тебе инструментом. У меня были коллеги, которые ломали гит репо, и потом жаловались что гит говно, потому что делает какую-то ерунду. Вот было бы так как в SVN/TFS/Perforce!
А на самом деле они не только не знали как с гитом нормально работать, а даже учиться не хотели. Но момент пожаловаться никогда не упустят.
>>1820891 потому что называю вещи своими именами? это не делает меня не программистом. и желание иметь что-то что помогает мне в разработке больше чем тупая консоль, тоже не делает меня не программистом
так что мимо. Я свои слова могу обосновать, но это выйдет за рамки этого треда. И уж точно говнистость гита не относится к сути моих слов ранее, потому что гит там упомянут просто до кучи
Да и еще вопрос, тут за Serilog заговорили. Стоит ли его юзать, когда у Core есть ILoggerFactory? И еще такой вопрос насущный - логи где правильнее хранить, в ДБ или txt?
>>1820920 а у коре сделали хранение логов в файлах? последний раз ставил чей то велосипед с нюгета а вообще серилог это про структурные логи, хотя Nlog тоже могет
>>1820917 На данный момент я попробовал другой аддон. RestSharp кажется. С ним все примерно то же самое. Исключений нет, однако сервер выдает заглушку, типа у вас не доступа к этой странице. Опять же, запрос содержит точь-в-точь такой же набор заголовков, метод. Все это я просто скопировал из браузера и все работает в консоли.
Вот этот запрос с консоли выдает те же результаты, что и браузер. Через форму - хуй. Я в замешательстве. Приложение с нормальным интерфейсом гораздо предпочтительнее для меня, чем вводить циферки в консоли. Я даже нагуглить ничего не могу.
Мне кажется, что форма чем-то выдает себя из за чего сервер отказывается ей отвечать, как браузеру.
>>1820897 >звучит как "я в блокноте пишу и мне норм. значит IDE никому не нужны" >или "я папки зипую и мне норм. ваши гиты не нужны" >своими именами Сначала пожаловался, что у него инструментов не хватает или они не работают как ему нравится. Потом написал какую-то хрень про свои фантазии с блокнотами и гитами (именно что "своими именами", сам придумал, сам назвал). Затем, когда ему сказали что панелька в пхп вообще не сравнима с инструментарием в дотнете, его заклинило на гите. >А для кора чет ничего нету нормального Освой выданный тебе инструментарий сначала нормально, потом утверждай.
>>1820926 Оригин то зачем убрал? И если в заголовке тип контента, значит с запросом нужно отправлять данные, вообще так гадать сколько угодно можно, если хочешь чтобы помогли, то делай так чтобы проблему воспроизвести можно было.
Анон, помоги с WPF. Я не силен с этими биндингами. У меня есть грид <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition Height=""/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="250"/> <ColumnDefinition Width=""/> </Grid.ColumnDefinitions>
Теперь я хочу чтобы было не 250, а бинд на мою переменную, которую буду изменять в коде, и вот эти изменения должны отражаться. (то есть нажал кнопку и вместо 250 будет 500)
Но в голове каша
написал так public int PanelSize { get; set; } <ColumnDefinition Width="{Binding PanelSize, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"/> Но нихера не происходит при изменении PanelSize
Либо как-то по другому, можно без этих биндов получить этот Width?
Мне просто надо самым минимумом сделать, а не написанием огромных классов для маленькой задачи. Но и как получить ColumnDefinitions Width я тоже не шарю
>>1820979 >Потом написал какую-то хрень про свои фантазии с блокнотами и гитами (именно что "своими именами", сам придумал, сам назвал) дядь. ты перечитай тред что ли А именно хотя бы эту пару постов - мой, где гит упомянут, и тот на который он был ответом. Ну можешь и далее свой про гит. А потом подумай и еще раз подумай и еще раз подумай и именно подумай.
>его заклинило на гите. так это тебя заклинило. о нем РЕЧЬ ВООБЩЕ НЕ ШЛА. читай внимательнее, учитывай контекст
>Освой выданный тебе инструментарий сначала нормально, потом утверждай. ну вот опять.
>>1821100 все что касается браузера - фронтенд все, что касается сервера - бэкенд
для фронта нужно знание html/css/js, чтобы в браузере все работало как надо для бэкенда нужно на чем то логику писать, базы данных знать, кеширование и так далее V в MVC относится к серверному рендерингу шаблонов. Razor выполняется на сервере. То есть это бэкенд.
>>1821051 Я последний раз ВПФ лет 5 назад использовал, потому элегантного и правильного решения не предложу.
Но как вариант вот тебе говнокодерское. Даешь твоему гриду имя. Достаешь из него твой ColumnDefinition, где-то хранишь, значение и при нажатии кнопки меняешь значение его свойства Width. Да, как я сказал - говнокодерство, но это намного проще сделать если тебе действительно нужен минимум.
>>1820974 Потому что слишком зелен и не смог разобраться, а в случае с этими расширениями все оказалось понятнее. Кстати, а в чем разница, если эти аддоны внутри себя используют те же базовые методы?
>>1821016 C оригином выходит тот же самый ответ: Permission Denied. На самом деле, там нужен единственный заголовок, как на первом скрине. Из консоли я получаю страничку с инфой, которую далее обрабатываю.
На втором скрине, происходит такой же запрос(?), но из формы, однако ответ как если бы пользователь без прав перешел по ссылке, куда у него нет доступа. Но доступ-то должен быть, я подтверждаю его заголовком, это мои собственные данные из браузера.
Кажется дело в том, что через форму сервер почему-то сбрасывает сессию логина, то есть отвечает мне как незалогиненому пользователю - на скрине видно меню-форму для логина. А из консоли это меню сменяется на список с опциями и разделами, который пользователь может видеть после логина. Это уже хоть что-то. Спасибо, парни. Осталось понять, что с этим делать.
>>1820820 >>1820926 >>1821168 Отправил куки, как куки и все получилось. Авторизация не спадает и сервер отвечает, как и должен.
Конечно интересно было бы узнать, что это за НЕХ из за которой консоль работает не так, как форма. Но по крайней мере формально вопрос решен. Всем спасибо еще раз.
>>1821111 >V в MVC относится к серверному рендерингу шаблонов. Razor выполняется на сервере. То есть это бэкенд. Но ведь это касается браузеров, там html, css и js, это UI веб-приложения. Как же это не фронтенд?
хтмл/css/js это фронтендерское. фронтендер (в данном случае верстальщик) это создает и отдает бэкендеру а бэкендер делает из них шаблоны, прокидывает данные, собирает и рендерит в результат.
Вот тебе аналогия еще. Например вертальщик верстает страницу по макету что ему дизайнер дал, использует картинки от дизайнера, подготавливает спрайты, ассеты (или что он там делает), но это ж не делает его дизайнером.
Так что где бы ни был хтмл создавать его фронтендеру. Для бэкендера это просто шаблон который нужно отрендерить и заполнить
дело фронтендера работать с "там html, css и js, это UI веб-приложения". Он это и создает. И если что то должно быть получено с сервера - дело бэкендера организовать это получение. И это либо полноценный рендер шаблонов либо просто статик хтмлки.
Ну блин не знает фронтендер про Razor, про асп.нет, про MVC а бэкендер не знает про хтмл, стили, заебы браузеров и так далее. Так что никто из них не сможет залезть в чужую область.
Какой-то джаваскрипт нахуй, какие-то локальные стат методы, индекс-хуиндексы. Зачем всё это говно пихать в C#. Могли бы тогда отдельно выпустить Си Скрипт какой-нибудь. Я просто в ахуе во что код превращается со всеми этими конструкциями. Сейчас ещё джуны начнут это говно подхватывать. Сокращая код такими конструкциями ты его не делаешь более понятным.
>>1821380 Это обычный процесс - по ходу жизни простого инструмента он усложняется и предъявляет большие требования к квалификации. А потом появляется новый простой и удобный инструмент, за который садятся начинающие. Подобное с играми Paradox Interactive постоянно - со старта играть норм, а через несколько лет вкатываться - непонятно. А касательно конкретных изменений 8 версии - мне нравятся новые функции свича, юзинг, индексы и диапазоны (хотя больше работаю на 7.3). Асинхронные потоки тоже интересно было бы потрогать. Остальное не особо интересно для меня, но так и должно быть с языком широкого назначения.
Чуваки, а есть вариант, чтобы после отправки post запроса попросить сервер не отвечать мне? Вот добавил я ип со страницы, нажал кнопку, после чего страница обновилась. Я делаю тоже самое, только мне не нужна перезагруженная страница в ответе. Лучше понял-принял или ничего.
>>1821518 Не могу, я всего лишь модер. Админ проебался и неизвестно когда появится. А если такая настройка уже есть на сервере, можно ли об этом как-то узнать, на заходя на него? Вообще есть какой-то способ узнать об доступных API сервера извне?
>>1821326 >а бэкендер не знает про хтмл, стили, заебы браузеров и так далее. Так как он может этого не знать, если cshtml файл, он же View в MVC приложении, всё это в себе содержит? Или если это Razor Pages приложение, то cshtml @page файл.
>>1821688 ну он знает хтмл, он же не идиот. Его ж невозможно не знать. Но знает его ровно на уровне "мне дали хтмл, я превращаю его в шаблон для razor". Но в верстке он никакой, и если где то плывет верстка - это не его проблема. Его задача рендеринг шаблонов и заполнение их данными.
>>1821797 Да что угодно. Задача бэкендера чтобы вид генерился как надо. Для этого он использует шаблонизацию, проброс данных, таг хелперы. Даже если это стили или жс, или даже текст, что заполняются на лету. Но не он же этот хтмл, стили и жс придумывает.
>>1821406 >>1821414 >>1821466 Да, что-то я хуйню вчера сморозил. Сам ведь активно пользуюсь фичами из версии 6 и 7. А сегодня использовал новые свичи из версии 8. И мне понравилось.
Хотя насчёт локальных методов не уверен. У кого-нибудь есть хорошие примеры их использования? Просто, если метод сложный, то его всегда лучше разбить на простые методы и тогда смысл в локальных методах отпадает сам по себе.
>>1821844 > то его всегда лучше разбить на простые методы Ну так ты не останавливай мысль. Вот тебе наводящий вопрос
вот у тебя был 1 метод. ты его рефакторил и разбил на 3. куда положить 2 выделенных метода если они не нужны никому больше в классе кроме текущего метода?
Правильно ли я понимаю что каждый раз когда я передаю в метод или возращаю из него свою структуру, то я произвожу операцию копирования? Типа у меня структура весит 1000 байт, передал в метод получилось я перегнал 1000 байт, вернул из метода еще 1000. Сделал цепочку методов (10 штук) которые чекают что-то в структуре, но не меняют ее, получилось 10х1000 байт перегнал?
>>1822092 >Правильно ли я понимаю что каждый раз когда я передаю в метод или возращаю из него свою структуру, то я произвожу операцию копирования? Да. Чтобы этого избежать используют ref модификатор параметра либо ref структуры в новых редакциях языка. Если ты передаешь класс, т. е. ссылочный тип, то передается копия ссылки, если структуру, то передается полная копия данной структуры. Именно поэтому структурами рекомендуется объявлять сущности небольшого размера. Но минус ref модификаторов в том, что их нельзя использовать в async методах.
>>1820958 Да очень просто без задней мысли берешь и всё настраиваешь. Там я неправильно выразился, по сути тебе нужно делать web api, который вьюхи реакта/ангуляра будут просто дёргать для обмена данными. Именно дотнетовские вьюхи абсолютно не нужны.
Почему в шарпе нет синтаксиса типа: loop(10) { ... что-то делаем }
Приходится каждый раз писать статический метод loop(int, Action<int>), но у этого есть минус, если нужно выйти досрочно из цикла, потому если наужно таки выйти досрочно приходится делать метод loop(int, bool, Action<int>), в котором бы проверялось условие досрочного выхода, это неочень удобно.
Есть тут мастер над архитектурой? Нужна помощь... сорри за большой пост, не бейте
Клиент игры. В разных местах UI игрок может посмотреть на коллекцию предметов, отфильтрованных по типу. В одном месте он может посмотреть на скины-оружие и покрутить их в 3д, в другом - посмотреть на портреты, а в третьем - на емодзи.
GameItem представляет конкретный игровой предмет и хранит: Id, Type[skin,weapon,portrait,emoji], Rarity[comon,rare,legendary], иконку, 3д модель
GameDatabase хранит все игровые предметы разбитые по типу: Skins, Weapons, Portraits, Emojis. Дополнительно он хранит список UniqueItems - это особые предметы, которые доступны в коллекции только, если они попали в инвентарь игроку (например, это может быть новогодний подарочный скин). И список ItemsPacks - это игровые наборы, которые хранят в себе до 5 игровых предметов. В GameDatabase можно узнать: IsUniqueItem и IsItemPartOfPack по itemName.
BackendService хранит данные игрока и его инвентарь с сервера, стоимость и скидки на игровые наборы, список Discounted и Time-limited наборов. Предметы из Time-limited наборов доступны к покупке только ограниченное время, допустим 12 дней, потом они исчезают из коллекции. В BackendService можно узнать: IsDiscountedItem и IsTimeLimitedItem по itemName.
Итак, к сути вопроса. Когда игрок открывает коллекцию, то мне нужно показать актуальные игровые предметы для него и скрыть те, которые сейчас недоступны. Для этого мне нужно обратиться как к GameDatabase, так и к BackendService. Кто и на каком уровне должен проводить фильтрацию и сортировку предметов для коллекции? Это явно не GameDatabase, который выступает простым хранилищем. Это либо BackendService, либо какой-то отдельный класс, объект которого будет создаваться для каждой коллекции свой, типа GameItemRepository(database, backend);
Можно добавить новый класс: public class GameItemData { public string Name; public bool Locked; (находится ли предмет в инвентаре) public bool Discounted; (находится ли предмет в скидочном наборе) public bool TimeLimited; (находится ли предмет в ограниченном по времени наборе) } Заполнять и возвращать эти данные будет BackendService: backend.Store.GetSkinsAndSortBy(GameItemsSort.Rarity);
BackendService снаружи не знает о GameItem и о GameDatabase. Но внутри он хранит и использует ссылку на GameDatabase. Когда я буду заполнять коллекцию для UI, то буду работать и с GameItem, и с GameItemData.
>>1824059 foreach i in Enumerable.Range(0, 1) Сука, тебе мало синтаксиса в шарпе? Блядь, я год работаю на нем и еще год в качестве хобби, и ощущение, что я новичок
>>1824469 Мало. Хоче чтобы был способ делать асинхронщину еще проще. Типа просто пишем: async Object и не нужно каждый раз писать Task<Object>. Оч бесит его писать, когда у тебя там что-то типа : async Task<IZalypa<IPizda<IJopa>>> Почему бы просто не писать IZalupa<Pozda<IJopa>>? А еще хотелось бы чтобы был синтаксис для анонимных функций который позволял бы выйти из основной функции сразу. Короче, много чего хотелось бы в плане синтаксиса.
>>1824175 На такое только большим текстом и отвечать, что для двачей не формат. Если коротко, то учи SOLID. У тебя всегда должен быть только один source of truth для чего угодно. А сейчас ты хранишь предметы и на клиенте и на сервере (если я правильно понял). Если есть сервер, то он должен быть твоим источником правды и должен хранить текущее состояние твоей игровой сессии. Клиент своё состояние должен получать от сервера.
GameDatabase и BackendService - плохие названия в данном случае, потому что не отображают конкретное назначение. Нужно разбивать на более детальные классы: инвентарь, предложения (discounts и timeLimited), предмет (он должен содержать о себе всю нужную инфу, такую как unique, name, type), набор предметов (через всякие hashmaps можно быстро узнать, является ли предмет частью этого набора), игровой менеджер, персонаж, сервис для запроса к серверу (отправить новые данные, получить текущее состояние) и т.д..
Серверу пофиг, как ты там свой UI организуешь. Ему главное хранить текущее состояние объектов (игрового мира).
Сервер и клиент должны общаться друг с другом посредством контракта. Если изменение какого-то слоя на сервере (помимо самого контракта) влечёт за собой изменение клиента, то значит архитектура поехала и ты делаешь что-то не так. То же самое работает и в обратную сторону.
>>1824658 async Task<T> тоже бесит, но что поделаешь >>1824802 В котлине все по дефолту асинхронное? Разве асинхронность не вносит оверхед? Просто видел, что сравнивали какие-то фреймворки, и там синхронный вариант в некоторых задачах отказывался быстрее
>>1824941 >В котлине все по дефолту асинхронное? нет в котлине добавил функции suspend и она становится как async в шарпе, но при этом внешний вызов не требует писать await. код вообще не меняется.
Так это разное поведение, с await ты ждёшь выполнения асинхронной функции, а без await выполнение кода продолжается не дожидаясь выполнения асинхронной функции.
>>1825106 это корутина. без await она никуда не уйдет и будет ждать завершения корутины а async/await нужен если у тебя не одна такая корутинка и нужно чтобы дальше пошло и можно было еще корутинок запустить, то есть аналог var task =
а если у тебя в шарпокоде нет var task= , то и await тебе не нужен
>>1825111 >а если у тебя в шарпокоде нет var task= , то и await тебе не нужен
Как это не нужен? А если у меня есть асинхронный метод, который используется в разных участках кода, при этом в некоторых участках кода нужно ждать выполнение метода, а в других участках нужно просто запустить его выполнение и продолжить, т. е. у меня нет var но при этом где-то есть await, а где то его нет.
Это означает что у тебя в месте await поток освободит и даст поработать другому пока Foo() и Bar() работают. Но Bar() будет выполнено после Foo()
в котлин синхронно так foo() bar() эти вызовы будут сделаны в одном потоке.
но если эти функции помечены как suspend, то этот код будет выглядеть вот так foo() bar() то есть абсолютно так же но будут вести абсолютно идентично тому, что выше на шарпе - в месте вызова foo() поток даст поработать другим и будет ждать результата foo(), а потом вызовет bar() и снова даст поработать другим пока bar() не отработал
а вот если тебе нужен аналог var task/future то тут уже понадобится async/await чтобы котлин не ждал выполнения этих корутин, а реально пошел дальше и вел себя как TPL в шарпе
причины необходимости "когда нужен var task" те же что и в шарпе, когда ты уходишь от обычного await и опускаешься до TPL. Иначе же писать await не нужно - котлин сам знает что это корутины и нужно подождать на них (дав поработать иначе) пока кодер сам не захочет не ждать (подключит async/await в привычном виде)
>>1825159 В шарпе, написав/увидев await перед асинхронной функцией я понимаю, что выполнение кода может продолжаться в отличном от того, который выполнял код до await, потоке. Это нужно брать во внимание когда идёт синхронизация обращения к данным, как пример есть класс ReaderWriterLockSlim у него есть методы EnterReadLock и ExitReadLock которые должны последовательно вызываться из одного потока. И как мне в котлине знать, что вот этот как await а вот это нет?
>>1825183 1 неуловимый джо - твой софт недостоен ковыряния 2 очень злой джо - твоя ца энтерпрайз где за факт взлома их так нагнут, что им проще купить, чем рисковать 3 Ключевой функционал унести на сервер. 4 CoreRT может сделать тебе нативный бинарник который ковырять сложнее (но это уже свой гемор)
>>1825182 Ну т. е. ручками каждый раз наводить на вызовы и смотреть тип функции? Потом еще раз наводить, на всякий случай, вдруг вот на эту ты не наводил. Ясно.
>>1825214 Так это не удобно. Приходится на поля смотреть, когда ты думаешь о коде, то смотришь на код, а не на поля. И get("") воспринимается как обычный блокирующий вызов.
>>1825217 нуу это уже критика из разряда "а где точка с запятой, как я отличу одну инструкцию от другой" нет никаких проблем если пишешь на языке. даже не замечаешь этот аспект в отличие от ConfigureAwait который не только замечаешь, а и бесит
к тому же такое доступно только в функциях suspend (как и в шарпе только в async) а не вообще везде. Если слово async/suspend замечаешь и не понимаешь что это значит что внутри будут вызовы других корутин...ну значит котлин не для тебя
да и в шарпе только анализатор подскажет что функция возвращет Task, а ты написал ее просто так ибо не знал, что она с Task
>>1825187 Это мой домашний проект за который мне некоторые кидают донаты и я хочу дать им чуть больше функционала, потому что именно они его запросили и только из-за них я решил это сделать. 1) к сожалению ковыряют, я пробовал добавить тупо по ключам с HWID, раздал 10 ключей и отслеживал запуски, было более 40 штук, т.е 30 человек откуда крякнутую версию взяли. 3) не хочу содержать сервер и бороться с проблемами блокировок и прочей фигней, уже пытался в другом проекте так делать и это просто боль, по всему миру все друг друга блокируют и твой сервер может быть тупо недоступен для этих людей 4) у меня есть возможность в проге что-то типа плагинов делать, поэтому наверное такое мне не подойдет, сломает все к чертям.
Обидно что .net приложения очень легко ломать, от чего писать что-то сложное что можно продавать как премиум тупо отпадает желание.
Сап, почему не получается установить пакеты с NuGet Package Manager? Выбираю нужный пакет, последнюю стабильную версию, щелкаю на Install, затем OK и дальше выходят ошибки >The type or namespace PackageName does not exist in the namespace Microsoft (are you missing an assembly reference?)
>>1825319 Не может преобразовать стринг в чар. Да банально перегрузки этой нет. В коре у этого метода 10 перегурзок, а в фреймворке всего 6. Разные версии языка что ли?
Аноны, тут такая трабла, есть либа с приватным методом и ивентом. Они мне пиздец как нужны. По отдельности я их через рефлексию выцепил, вопрос, как мне подписаться на этот ивент с нужным типом делегата? Я хуй пойму, гугол не помогает
>>1825540 Типа хочешь подписать приватный event на приватный же метод? Если выцепил этот метод MethodInfo method И выцепил событие EventInfo eventInfo То 1) Создаешь делегат handler = Delegate.CreateDelegate(eventInfo.EventHandlerType, target, method) (target - инстанс на котором метод вызывается, ну или бери перегрузку без него, если метод статический) 2) Подписываешь его к событию eventInfo.AddEventHandler(eventSource,handler) (где eventSource - инстанс который event поднимает)
>>1825540 Ежели AddEventHandler не работает из-за проверки видимости ("бла бла бла нет публичного метода add") То нужно рефлексией вытащить сгенерированный компилятором метод подписки, и вызывать уже его (обычно на событие ShitHappened метод будет зваться add_ShitHappened)
Аноны, сейчас пишу фронт на JS'е, но хочу пересесть на иглу бекэнда и тут выбор на какой стул сесть: 1) питон и джанго 2) шарп и дотнет к обоим язык отношусь хорошо. Шарп привлекает чуть больше тем, что у него статическая типизация и по субъктивному моему мнение, он лучше для бекэнда заходит Но на питоне вариант вкатиться прям на текущей работе, потому что стек в беке питон + го
>>1825853 Зависит от локации. У меня дотнетный город (запад Украины) - много вакансий есть и на легаси, и на новье, но на пайтоне что-то тоже есть. По моим впечатлениям от комментов на дваче, в РФ с дотнетом потуже. Ориентируйся по сайтам поиска работы.
Всем привет.Я полная нулина, сейчас вкатываюсь в C#, что нужно учить , что более востребовано сейчас, чтобы взяли на работу.При гуглении открывается статья на хабре 2013-го года.хелпуйте
>>1826143 Смотри что в вакансиях твоего региона требуется, то и учи. Может быть у тебя там только для легаси шарп нужен, тогда изучая .net core ты по большей части время потратишь и будешь типа >>1825316 вопросы задавать. А может быть у тебя там все на докерах-хуекерах сидят - нужно будет учить как деплоить докером. А может быть у тебя там извраты и они во встройки впихивают .net, тогда вообще весело будет. В общем, смотри вакансии, требования к ним и гугли незнакомые слова.
>>1826126 В самом статике ничего плохого нет. Если это stateless класс, который легко покрыть тестами - то вообще никаких проблем. Если есть state, то надо убедиться что оно thread-safe. Если это классы внутри Startup scope, то вообще пофиг. Эти вещи нужны для инициализации всего приложения и покрываются интеграционными тестами.
>>1826160 Ну, я использую статику чтобы разгрузить основной класс от всяких вспомогательных методов. Типа вот у меня есть метод JoinXwithY(X, Y), мне не хочется чтобы реализация этой штуки была в методе т.к. метод join в linq довольно здоровый выходит, я вынес это в метод, но если подумать, зачем этот код внутри этого класса - потому я выношу в отдельный статический класс. Ну или мне не нравится писать каждый раз string.IsNullOrWhiteSpace(str), я сделал метод расширения str.IsEmpty(), но ведь вдруг кто-то проебет класс с этими расширениями и получится что половина кода программы - красная. Ну или в сторонней библиотеке есть enum, а у меня с этими перечислениями связана логика, как-то оформить нормально в класс не совсем получается потому что получится что я как-то должен управлять новым классом чтобы знать что там за элемент перечисления, потому я делаю еще один статический класс в котором логика которая связана с работой этого enum(достать имя связанное с ним, какие-то константы и прочяя фигня), тут я бы, будь это не сторонняя штука, - таки замутил класс обычный, но вот что поделать - сторонняя библиотека.
>>1826090 Использовал первоначальную реализацию (из решарперовского кода, когда еще Lifetime был классом), сомневаюсь что на двачах найдешь еще юзеров этого дела.
>>1826169 Extension Methods - обычное дело. Под них целые nuget пакеты пилят.
>получится что половина кода программы - красная Студия быстро найдёт, какой using добавить. А вообще, если расширяешь какой-то класс, то один из стандартов - это пилить свой класс в том же namespace, в котором находится основной класс. И не важно, что у тебя в приложении используются свои нэймспэйсы. namespace System { public static bool IsEmpty(this string str) { } }
Главное внутри таких классов не делать чего-то, что невозможно будет покрыть тестами. Например new ExternalResource(). Это может быть и БД коннект, и хттп клиент, и работа с файловой системой, и подключение к хранилищу сертификатов.
Как это оптимизирует среда? Будет ли просто проверка первого бита или как-то иначе? Просто не хочется качать жетбрейновские штуковины, потому что я не доверяю этим пидорам, да и прочие штуки качать, но интересно же. Может кто упарывался и знает.
Как ловить движение мышки из консольного приложения? Только не говорите опять что ебучие винапи нужно. Я не переживу этого. О какой кроссплатформенности можно говорить, если постоянно для любой хуйни - винапи. Если так, то пиздец же.
Могу ли я как-то лениво читать из респонса HttpCleiny, Ну, скажем, мне приходит респонс в виде джейсона на 50МБ, и мне хотелось бы как-то лениво это обработать, по одному объектику, чтобы не создавать кучу ненужного хлама, пока остальная программа бы работала в штатном режиме. Можно ли как-то это сделать? Просто столкнулся с тем, что апи одно отдает json который при десерелизации в 14к объектов превращается и сразу после этого - бац - 800МБ оперативки сожрало, хотя мне-то надо только найти там один-два нужных мне объекта и отдать их куда нужно, а выходит что обычными путями такая вот дичь происходи. Скажем, читай я из файла, я бы мог по строчке брать, смотреть то ли это что мне надо - отдвать дальше и чистить память и затем читать следующую строчку и так пока до конца файла не дойду. Но с запросами по HTTP я что-то подобного не вижу.
>>1827030 С запросами тебе нужно работать с сетевым потоком, который ты будешь передавать в жсон-парсер. Для того чтобы взять только нужное, отбрасывая лишнее, нужно будет написать жсон-конвертер.
Насколько я знаю, в RSA, (e, n) - публичный ключ, (d, n) - приватный ключ. Соответственно... Шифрование: >c = m^e mod n, где с - cipher, m - message, e - public exponent, n - modulus Дешифрование: >m2 = c^d mod n, где с - cipher, m2 - decrypted message, d - secret exponent, n - modulus >(m == m2) -> true Подпись: >s = m^d mod n, s - подпись (читай шифрование приватным ключём), m - подписываемое сообщение, d, n - компоненты приватного ключа. >(m, s) - подписанное сообщение (сообщение и подпись) Проверка подписи: >m2 = s^e mod n; дешифрование, но публичным ключём. >(m2 == m) -> true, если подпись s валидна.
Однако, что если задача состоит в том, чтобы шифровать-дешифровать и подписывать данные произвольной длины? Очевидно, следовало бы разбить их на блоки, и поработать с последним блоком, например, указав в конце шифра длину последнего блока.
ну, и собственно вопрос... Как всю эту хуятину впроглить, чтоб оно фурычило годно, с байтарраями произвольной длины?
>>1827030 Файл это FileStream Сеть это NetworkStream И тот и тот stream Нет никакой разницы в последовательном чтении разве что в NetworkStream не сделаешь Seek назад
>>1826317 Концепция то мощная и всяко лучше Dispose, но использовать ее - совсем другое дело. Я вот пытаюсь интегрировать в MVVM и, если по хорошему, то при создании каждой новой вьюмодели нужно создавать LifetimeDefinition который еще и хранить где то и точно так же не забывать вызывать как и Dispose и очищать. И это в MVVM где WeakRef норма.
>>1827143 Ну внутре решарпера у них свой компонентный фреймворк автоматически их порождает и диспозит вовремя, большой бонус в том что не надо в каждом элементе иерархии имплементировать dispose да не забывать диспозить дочерние компоненты, а просто передавать по цепочке лайфтайм. Абсурд ситуации в том, что у MS внутри у себя похожим образом использует в качестве лайфтаймов CancellationToken (LifetimeDefinition ~ CancellationTokenSource), а nugetной версии JB прикрутили к лайфтаймам функционал этих самых токенов.
>>1827153 ну жетбраинс проще. они сделали свой компонентный фреймворк. А я натягиваю сову на имеющийся глобус.
имхо MS просто нарушает семантику. Меня в асп.нет коре смутило что их лайтайм с событиями запуска это не события а CancellationTokenSource Семантика нарушена, хрен поймешь, нужно идти гуглить (а еще попробуй нагугли почем так, ведь только мнения)
>>1827153 Чем больше пишу, тем CancellationTokenSource у меня не эквивалент lifetime-ам. Уже много кода переписал и количество lifetime.Bracket/Execute/TryExecute просто зашкаливает. У CancellationTokenSource ничего похожего нет.
Книги не привык читать, посоветуйте плез видео доклады/лекции по конкурентости, паралелизму, тредам, контекстам, таскам и всей этой хуйне. Нашел единственную не формошлепскую джун вакансию и там требуют теоретические знания во всем этом.
>>1827415 Ты до этого всего сам по видео никогда не дойдёшь, хоть засмотрись. Это всё надо самому пробовать и параллельно смотреть, почему оно именно так работает. Эти видео сеньорам хорошо заходят или просто интересующимся, когда хочется на диване поваляться, но запоминать толком ничего не планируешь.
>>1827488 не соглашусь. Вот я использую другой подход, где первым шагом является разобраться в основе "что к чему куда", общее понимание "как все устроено". для этого читаю и смотрю все ПО ДИАГОНАЛИ что можно пока не придет понимание. Именно понимание. Если ничего не запомнил и хер с ним. Невозможно запомнить без практики. Главное понять суть. Для этого меняю источники пока не сложится общая картина.
Таким образом формируется основа и далее уже можно начинать учиться и тогда новые знания будут укладываться в канву общего понимания. Без основы мозг будет вынужден куда то отложить новые знания, а нормального каталогизированного склад в голове нет и потом приходится класть знания абы куда, что потом затрудняет поиск. А именно способность быстро находить в голове нужное и есть цель - так то мозг никогда ничего не забывает, он плохо ищет в своем бардаке
Если же не понять, то в итоге можно стать гугл-копипастер проггером, который видит закономерности че как используется, но не понимает, потому и копирует найденное, а не реализует "по принципу"
Конечно можно "разбираться по ходу дела", но это банально медленнее в итоге.
я соглашусь, что "ну для тебя это не первый язык". Да. Но я этот подход использую для любой области, где у меня нет базиса, и он себя оправдывает
>>1827504 Я уже честно сказать забыл, как базы изучал (15 лет прошло), поэтому всё айтишное теперь можно просто брать и смотреть и понимать, что там происходит. Конкретно это видео >>1827416 для новичка без нормальной базы будет просто развлекалово без какой-то практической ценности.
Немного подумал и согласился со сказанным. Я тоже в любой новой (не айти) области сначала кучу всего по диагонали пересматриваю, а потом уже пробую.
>>1827990 Описываются. Я просто думаю что ты немного путаешь модель с DTO. DTO может выступать моделью, но модель не ограничивается DTO'шкой. Валидаторы, запросы к базе и вообще бизнеслогика это все модель.
>>1827999 а это типичная проблема анемичные модели (не путать с dto) и rich model "не путать с dto" потому что назначение dto следует из названия. А анемичная модель не цель, а следствие. В rich model в саму модель пихают логику. Противоположный подход - когда логику распихивают по сервисам, а сама сущность в итоге вырождается в dto по своему виду. Еще и базы данных способствуют тому, чтобы были get;set; для мапинга.
но анемичная модель, хоть и выглядит, как dto, но не dto, а значит может иметь методы. Я противник rich model, даже валидация и та зависти от контекста. но тупые get;set; тоже не дело. Я предпочитаю чтобы модель имела контракт (что особенно важно в мультипотоке, да и вообще защищает от ошибок), что делает ее неподверженной "ой забыл учесть", но добавляет проблем с базой данных.
То есть я не меняю логически связанные поле1= и поле2= а придумываю какой то метод которые позволяют не делать публичных сеттеров
>>1828023 ну база данных любит публичные сеттеры. А если у меня их нет, то мне приходится изворачиваться с сохранением и чтением.
Тут варианты - либо иметь гет сет и валидаторы в нужных местах, что данная заполненность модели валидна в данном контексте (и что никто кривыми руками не сломает ничего после валидатора) - либо любое изменение модели не нарушит ее стейт, то есть минимум публичных сеттеров и апдейты через методы.
>>1828016 И в чем проблема того чтобы то что выглядит, ведет себя и по сути является DTO называть DTO?
Да и в чем проблема порезать всю логику на сервисы. Скажем вот так вот: IRepository<T>; IValidator<T>; В репозиторий мы в конструкторе отправляем валидатор: Repository<T>(IValidator<T> validator)
и все, пусть делают там что хотят с объектом который получили из БД, но когда решат сохранить его то будет что-то типа:
void Update(T entity) { if(!_validator.IsValid(entity)) throw new Exception("Что-то пошло не так :)"); Update(entity); Commit(); }
При этом этот же валидатор может быть использован много где. Удобно же. А если нужно будет добавить новый валидатор в одном месте - никаких проблем, ты добавляешь новый, и просто инжектишь его в то место где надо, а в остальных все остается по старому. То же самое и с репозиториями, допустим для тестовых нужд тебе достаточно чтобы у тебя все это дело было в виде обычного списка, нет нужды реальную БД запускать и все это там как-то реализовывать - никаких проблем если вот так вот делать не возникает. В общем, я не знаю.
>>1828027 >по сути является DTO называть DTO? не является. выглядит, но не является. семантика иная. в дто логики быть не должно в анемичной модели она допустима есть еще ValueObject который похож, но у него своя семантика.
про валидаторы я вообще хз о чем ты.
Просто в споре "где должен находится код валидации" я отвечаю "не в модели". Модель может быть валидна в одном контексте, но невалидна в другом. Частично заполненная модель валидна в месте заполнения, а там где она нужна полная - она придет уже полная. потому валидировать ее нужно в контексте использования, что текущее состояние модели допустимо в текущем месте.
Есть такое понятие как "концепция баррикады", где на входе модель завалидировал и нет смысла ее валидировать постоянно, главное чтобы она не менялась после (из другого потока или джун посчитал что в данном месте ее можно поменять и все сломал)
Я сторонник анемичной модели. с ней тупо проще кодить. Так что у меня модели с гетсет, сервисы с логикой, валидаторы. И такое в подавляющем большинстве софта.
Прочитал про UnitOfWork и не до конца понял. Ну, т.е. что я понял. Штука нужна чтобы контекст у всех репозиториев был общий Зачем оно надо - впринципе ясно. А вот что не ясно, так это как этим правильно пользоваться. Допустим я хочу чтобы в моем контроллере я работал с репозиторием товаров. Правильно ли я понимаю что нужно в конструктор передавать этот самый UnitOfWork, из него тащить репозиторий, как-то работать там с ним. А что если репозиториев много? Да и вообще, если в контексте EF рассматривать, получается же что DbContext это же и есть этот самый UnitOfWork. Или это не так? В общем, можете объяснить, если не сложно?
Помогите долбоёбу, пожалуйста, объясните на примере из говна и палок что такое регулярные выражения в этом вашем C#? Мне для лабы нужно написать прогу, которая высчитывала бы метрики Холстеда для кода на этом языке, а я черт знает сколько регулярок собственно в конкретном куске кода есть:
int a = 100; while (a > 5) { System.Console.WriteLine(a); a--;
>>1828243 Ты че-то напутал, чел. Тебе поди надо пересчитать сколько в данном куске кода используется переменных, операторов, пространств имен и прочих языковых выражений. Для автоматизации определения и подсчета можно использовать регулярные выражения. Вкратце про них можешь почитать по ссылке. Примеры кода можешь нагуглить сам: метрика Холстеда для c#.
>>1806517 Взломать можно всё, вопрос лишь в цене. Ваши гавноподделки и так ломать никто не будет, проще свою прогу написать с таким же функционалом и продавать, вот и всё. Вы вряд ли там пишите что-то такое, что никто бы не написал.
>>1828029 >в дто логики быть не должно >в анемичной модели она допустима >Anemic domain model is the use of a software domain model where the domain objects contain little or no business logic - https://en.wikipedia.org/wiki/Anemic_domain_model
В DTO тоже никто не запрещает добавить конструктор (который всякие сериализаторы смогут спокойно вызвать) и/или добавить пару методов, например Equals для своей версии сравнения двух объектов ДТО или HasErrors, HasRecords, Count для какого-нибудь generic response.
>>1828754 Тоже самое было. Своё было пилить лень. Так и тупил несколько лет. Потом задолбало и начал ковырять свои проекты и читать кучу статей/смотреть видео. Потом методом перебора нашёл нормальную работу. Теперь норм.
>в моем контроллере я работал с репозиторием Это вообще чума. Контроллер должен быть туп как пробка. Он создаёт контракт для работы с твоим приложением. Это точка входа, которая описывает маршрут, по которому можно что-то запустить в твоём приложении, request/response models, возможные варианты ответов (200, 201, 204, 400, 401, 403, 404, 500). Стандартный такой набор, который почти любой контроллер должен иметь. Всё!
Остальное должно быть во всяких сервисах, хэндлерах, валидаторах, которые уже будут решать, откуда данные тянуть - HttpClient, DbContext, Redis, FileSystem, etc.
>>1828887 Все дело в семантике. Семантика это суть класса. Суть dto - передача данных. Анемичные модели не для передачи данных. Они используются как модели/сущности. Их можно использовать как dto, кидая их в сериализатор, но сериализовываться будет от хорошо до "дохера мороки".
у dto же, наоборот, суть - передача данных, потому у них во главе всего именно это, а это значит открытые независимые друг от друга свойства без какой либо валидации и вкусные для сериализатора и без конструктора. И в нем нет никаких причин делать конструктор с параметрами.
И если вам захочется добавить конструктор чтобы "ну там вот оно было так вот я управляю там чем то", то это уже будет не DTO (семантика которого всего этого не иметь), а переход к POCO, который используется как DTO HasErrors, HasRecords, Count также внесут семантику POCO
Ананасы, как найти стажировку на шарпе? Всё перерыл, нихуя нет. Живу в ДС2, везде требуются питонщики, жависты, онанисты, пхпмакаки, а православный шарп в хуй не впёрся всем.
В моем полумиллионнике никому не нужны шарписты без опыта. Как быть? Переезжать в Мааскву и пытать счастье там или может учить какой-нибудь другой язык? Мне кажется, зная c#, какую-нибудь джаву за полгода можно освоить минимально.
>>1829499 Зависит от того, что тебе удобнее. Если не против переехать - рабочий вариант. Можешь попробовать пойти на какие курсы при фирме с перспективой трудоустройства. Можешь за те же полгода сделать приличный пет-проект или пофрилансить для опыта. Можешь изучить другой язык, если хочешь. Я бы в таком порядке рассматривал возможности.
Есть ли риск просадки по производительности, если я буду оборачивать единичные float'ы и doubl'ы в struct'ы, чтобы гарантированно не складывать метры с килограммами, например?
>>1829517 АТО! Риск просадки есть всегда. Вот звезды не так сойдутся и GC решит в самый ответственный момент почистить кучу и вот тебе просадка. А конкретно со структурой. Если будешь делать ее нормально, через указатели и не будешь постоянно упоковкой-распаковкой заниматься, то ничего такого быть не должно.
>>1829534 Каким, образом-то они меняются? AsEnumereble просто возвращает сам себя. IQueryable это просто интерфейс который расширяет IEnumerable гарантируя по контракту что тот кто будет его имплементирует - реализует работу с провайдером и прочую залупу.
Имею в виду, это же просто стринг, а не кастомный класс. Значит и переопределять .GetHashCode() не нужно, верно?
Сап программач
Аноним14/10/20 Срд 01:42:08№18297101021
В общем пишу свой консольный круд на .Net Core 3.1 и заметил что программа ведет себя неадекватно. Если выполнять прогу в обычном режиме, всегда возвращается false при сравнении строк, а когда выполняю в дебаге пошагово то все работает норм. Никто не сталкивался с таким? Если нужно то могу шебмку с демонстрацией запилить.
>>1829710 Забыл добавить, чтобы вы мне не говорили что я строки не так сравниваю, такая фигня с обычной логикой тоже наблюдается. Всегда когда взаимодействую с определенным свойством. Например проверяю через || превышает ли длинна строчных свойств обьекта какую-либо константу.
>>1829707 Имплементации стандартного GetHashCode могут меняться и хеш может не совпадать с хешем такой же строки созданной в старой версии проги либо в другом модуле. Если тебе пофиг на это то юзай дефолт
>>1829710 Показывай код, причин может быть несколько. Разница в дебаге и релизе в том, что в дебаге код компилируется без оптимизаций, т. е. твой говнокод в релизе мог быть обрезан в каком-то месте, поэтому результат отличается от результата в дебаге. Еще одной причиной может быть: >в дебаге пошагово Если ты используешь асинхронные функции, таски или потоки.
>>1829731 Никакой ассинхронщины. Пикрил1 - собственно код обычного класса юзера. IsValid проверяет являются ли поля слишком короткими при этом не являясь заглушкой Nothing. Запускаю прогу, получаю пикрил2. Пошагово проматываю в отладчике до следующего юзера с заглушкой и получаю пикрил3. Входные данные одинаковые, результат другой
>>1829733 Ну так дебил, возврат метода один и тот же будет, просто в оптимизированном коде отрицание добавилось к той каше которую ты написал в сравнении, потому что анализатор убрал условие после которого ничего не происходит.
>>1829740 Ты правда настолько тупой? У тебя middle name у всех @ что по твоему условию невалидное поле, но почему то в твоей тупой голове оно стало валидным, может тогда в коде отразишь? Или будешь дальше ждать когда коробочка магическая твои мысли прочтет?
>>1829742 Блять, каким хуем заглушка, на которую стоит проверка это невалидное, мать его, поле? Там есть всякие точечки и другие знаки вместо имен и я и хочу получить таких юзеров. Если пройтись до первого такого юзера отладчиком, он не попадает как невалидный, а если пустить выполнение дальше то все остальные попадают
>>1829733 >>1829735 >>1829944 Удачи, анон. Я сам сталкивался (правда во фреймворке, а не в коре) с тем, что условие, которое 100% должно выполняться, в дебаге работает, а в релизе просто проскакивается, как-будто этого кода вообще нет. Победить так и не смог.
В итоге пока этот код нужен был, приходилось юзать его в дебаге, что замедляло работу очень сильно. Хорошо хоть это был личный проект, а что бы я делал, будь это что-то серьёзнее - хз.
Привет, аноны. Я начинающий шарпист, только освоил азы и поставил перед собой цель надрочиться до элементарной фрилансерской работы. Офис мне не нужен, мне нужен конкретно фриланс. Так вот, технологий хуева туча и встаёт вопрос. Что из всего этого многообразия учить, чтобы как можно скорее взять первый заказ и получить 10 рублей 5 копеек на киви и для этого не пришлось перерыть все фриланс сайты в интернете? Пока думаю над ASP/Xamarin, однако также интересен юнити. Слышал где-то, что на ASP спрос больше всего, это правда? Двач помоги новичку
Есть девайс. Читаю его регистры. Тереблю реле. Так вот. Чет код стал какой-то слишком объемный. Как можно порезать его нормально, чтобы было более абстрактно, а не: if((mask<<32)|incomingMessage > 0) DoCoolStuff(message.slice(0,64))
Условия в if заменяй на переменные, названия которых будут объяснять то что происходит в коде. К примеру: if (target < 32 && target > 1) Делаешь: var targetInAcceptableRange = target < 32 && target > 1; if (targetInAcceptableRange)
Твой message.slice(0,64) можно поместить в переменную, которая опишет, что у тебя в этом слайсе с 0 по 64, чтобы можно было хотя бы представить что ты с ним в методе делаешь, если еще и метод назвать хорошо, то и код читать не придётся.
>>1830394 Пользовался conemu и cmder много лет. То же самое говорил, когда мне про новый WT задвигали. Теперь не знаю как без него жить. Очень удобно. Очень близко к zsh на маке + свои фишки.
Тупой вопрос. Вот у меня куча запросов к стороннему АПИ. Допустим мне нужно по разным каталогам таваров по разным ценовым диапазона сделать запросы. Так вот, если делать это последовательно то оч медленно выходит. Я решил использовать PLINQ. И чет не совсем понимаю как мне потом аггрегировать результат. Не будут ли какие-то проблемы если я результат в List засовываю с помощью AddRange? Я просто пока что посмотрел на дебаге и все норм работает, но я в этом вашем паралельном программировании и прочих многопотоках не силен особо, но ждать пока 90 запросов каждый из которых возаращает по 1к+ответов - довольно долго, приписав AsParallel() в дебагере скорость в разы скаканула, но я боюсь, что в релизне могут быть подводные камни. Я знаю что можно залочить, но так же знаю что оно не всегда нужно. Вот мне и интересно, надо ли в этом случае и вообще как правильно-то этим AsParallel пользоваться.
>>1830696 Для новичка я бы Шилдта или Албахари советовал, как справочник. Причем не обязательно последние версии. А если практические знания, то как не хейтят тут, но метанит и professorweb - норм сайты чтобы с основами разобраться. Конечно там многие примеры - сферически кони в вакууме, но так-то у большинства обучающих материалов так, там хотя бы круды научишься делать.
>>1830695 var httpClient = new HttpClient() { BaseAddress = "blah" }; //этот клиент должен создаваться один раз как singleton
var tasks = listOfUrls.Select(url => httpClient.GetAsync(url)); var result = await Task.WhenAll(tasks);
Как-то так. У тебя хттп запросы и так асинхронно запускаются. Вместо того, чтобы запускать их по одному, запускай разом все и потом получай список ответов.
>>1830695 Неправильно, AsParallel используется для compute-bound операций, а у тебя i/o-bound, т. е. тебе будет достаточно асинхронности. Т. е. делай как этот >>1830731 анон посоветовал.
>>1830696 Для новичка - Троелсен. У него и информация свежая, и изложение для новичка. Альбахири не читай, его нужно открывать когда ты уже пару книг для новичков прочитал и имеешь хоть какой-то практический опыт. Метанит и профессорвеб даже не открывай, это пустая трата времени, которая только в заблуждение тебя ввести может.
>>1830731 > await Task.WhenAll Аноны, я конечно самоучка и пишу только для себя, но поясните, почему использование подобных конструкций вообще важно?
Когда мне нужно выполнить асинхронно какой-то код, я просто создаю объекты Thread и выполняю их, руками контролируя выполнение и завершение потоков. Есть же семафоры, есть мьютексы. Никаких проблем никогда не возникало, грабли многопоточности как правило дают по голове один-два раза, а потом ты уже понимаешь, откуда идут проблемы и больше сам себе их не создаёшь. Так ли важно пользоваться всем этим синтаксическим сахаром?
>>1830843 Ты не различаешь асинхронности и многопоточности, первое тратит меньше ресурсов, легче контролируется и уменьшает шанс выстрелить себе в ногу. Создание Thread для выполнения асинхронных операций это пустая трата процессорного времени и памяти, так как всё могло бы происходить в рамках одного потока. Для этого как раз и создан класс Task и TPL в целом.
>>1830858 Жили, но использовали не Thread, а делегаты и AsyncResult, но они сложны и раздували код настолько, что использовали их только создатели библиотек и по-настоящему опытные программисты.
>>1830861 > делегаты и AsyncResult Я скорее даже не про ранний C#, а вообще. 20-25 лет назад тоже писали стабильное и быстрое ПО (лучше, чем сейчас), хотя у серьёзного программиста под винду были только плюсы и голый CreateThread из винапи. И ничего.
Есть один ASP.NET Core сервис. Раньше был на 2.2, мы перенесли его на 3.1 Фронтом ему выступает IIS из Win Server 2019. Единственное, что было изменено в конфигах: startupTimeLimit="3600" в web.config
Раньше (на 2.2) при загрузке приложения из Application Pool оно почти мгновенно грузится (секунд 20-40) и сайт сразу же после этого становится доступен. Сейчас, на 3.1, сервис грузится те же 20-40 сек, а потом 10 минут сайт недоступен. То есть я делаю запрос, запрос зависает. Запрос развисает через 10 минут, и следующие запросы выполняются мгновенно. Запрос один и тот же и крайне дешёвый (10-15 мс). Я открываю логи, которые ведёт сама программа: в 10 первых минутах запроса там просто нет, то есть он даже не приходит. Через 10 минут они прилетают все скопом.
>>1830885 20-25 лет назад у нас все клиенты тяжёлые были и сетевые запросы редко использовались. Но мультипоточность и работа с сетью была жёсткой магией и писалась на тыщи строк на всяких плюсах. И эти проги постоянно падали или отжирали все имеющиеся ресурсы и тормозили.
>Возможно, нужно почитать что-то на эту тему. Не "возможно", а обязательно к прочтению. Щас ни одна прога (даже иногда калькуляторы, лол) без async/await не обходятся. Не зная как оно работает ты себе не только в ногу, но и в голову начнёшь выстреливать. Надо кучу статей перечитать и самому много всего перепробовать.
>>1829733 Разворачивай проверку и делай дебаг каждого шага, если косяк только в релизе, то через старый добрый PRINT DEBUG смотришь. Я подозреваю что у тебя там косяк с кодировками, на входе идет какой-нибудь utf-16, а строка у тебя в utf-8, выглядят одинаково, но по факту это разное.
>>1830069 Значит этот код не участвует в работе программы или в нем вечная false проверка, в результате оптимизация убила эту ветку кода. Просто так код не выкидывается из работы, плюс дебаг не работает на релиз версии потому что код который ты пишешь может стать нечто другим и там тупо не на что ставить breakpoint.
>>1831353 Ну. Мне вот дали протокол(что-то около 20 разных типов сообщений: регистрации, авторизации, проверки подлинности сервера, запроса канала и т.д.). Задание было в форме: Есть 100к роботов, они хотят общаться, но из-за того что они очень стеснительны - бояться общаться напрямую. Необходимо разработать приложение которое бы позволило им всем общаться через это самое приложение, а так же в случае необходимости - рассылать им всякое разное от людей. Форма диалога происходит в виде: Робот 1 присылает запрос о том что хочет выйти на связь с Роботом2, если робот2 сейчас подключен - создается зашифрованный канал, который передает сообщения, в случае если превышено время ожидания, либо один из роботов прислал сообщение о том что хочет разорвать общение, либо сообщение об ошибке, какнал закрывается. Так же необходимо было всякие проверки подлинности по этому протоколу, регистрации и прочую залупу. А другому джуну что вместе со мной приходил - распарсить жсон попросили.
>>1831466 > плюс дебаг не работает на релиз версии потому что код который ты пишешь может стать нечто другим и там тупо не на что ставить breakpoint. Вот меня эта хуйня реально бесит. Серьезно. У меня просто на работе стоят шпиенские программы которые захватывают файлы собранные и минут еще 10 держат, и приходится постоянно переключаться то на релиз то на дебаг чтобы дебажить и на релизе приходится либо молиться чтобы тут-то остановилось, либо везде долбить в консольку чтобы отлаживать. Вот какого хуя-то? Почему нельзя сделать было по-человечески, чтобы все эти оптимизации только с каким-то флагом компиляции включались, а изначально то что ты написал - то и будет. Аааа, жопа.
>>1831500 > Вот какого хуя-то? Почему нельзя сделать было по-человечески, чтобы все эти оптимизации только с каким-то флагом компиляции включались, а изначально то что ты написал - то и будет. Аааа, жопа. Вообще-то можно, но какой смысл тогда в релизе?
>>1831500 >Вот меня эта хуйня реально бесит Прикол, сначала делают дизайн из костылей, а потом жалуются. Чё-то у меня за 10 лет такой хуйни не происходило.
>>1811338 Ну и пиздец. > public virtual byte[] Encrypt(byte[] data, RSAEncryptionPadding padding) { > throw DerivedClassMustOverride(); > } > > public virtual byte[] Decrypt(byte[] data, RSAEncryptionPadding padding) { > throw DerivedClassMustOverride(); > } Это так много мне говорит, что охуеть просто. Я весь в просвещении. Меня настигло сатори и я познал Дзен, это этой хуйни. Спасибо анон. В качестве благодарности, нихуя так и не поняв - вкину вам сюда - неразрывный пробел: Alt+255, вакаба ваш говнокод не жрала.
>вкину вам сюда - неразрывный пробел: Alt+255, ЧТОБЫ вакаба Нутыпонел. Рили, проще запилить свою RSA на BigInteger.cs, чем это вот, хуй знает как написанное - юзать.
уже в шапку пора писать что нового в шарпе 9. немного осталось же к тому же некоторый синтаксис из шарпа9 почему то работает в моей VS, где им и не пахло.
>>1832560 Потому что >the current plan is that C# 9 will only be officially supported on .NET 5. However, in the current design records do not depend on any new CLR features, so many things may work in .NET Standard 2.0 in an unsupported fashion (similar to C# 8).
>>1831496 это вы в яндекс или в мейл собеседовались? я на миддла просто мило попиздел с тимлидом о всякой дотнетщине и скинул ссылку на свой гитхаб, без всяких тестовых заданий
>>1833066 Ну как. Там тестовое это выдавалось на время испытательного срока. Типа вот тебе задание, вот три месяца - справишься - берем, не справишься - посмотрим. Я сделал за неделю, меня взяли и сразу кинули в пекло, чел что парсил json не справился и его перевели отправили к тестировщикам. Воооооот.
>>1833172 да причем тут .NET Standard 2.0, который описывает по факту какие классы доступны и синтаксис языка, который должен разобрать компилятор и если он не знает, допустим, про инит свойства, то для него это будет "бэд синтакс"
Аноны, я хочу подробно изучить работу сетей. Клиент - сервер. HTTP, шифрование и все в этом ключе с использованием шарпа. Подскажите, пожалуйста, качественные туториалы на эту тему
>>1833457 Так хорошо начал, что захотелось даже граммотно с нормальными примерами ответил, но после >вот прям искаропки ничего нет или как? только и хочется сказать "ты дебил или как?" и бросить ссылкой
Допустим есть БД, из нее достается какая-то запись и обрабатывается в виде задачи. Одновременно может обрабатываться много записей. Так вот, я хочу иметь возможность отменить обработку записи по ID этой записи. В чем собственно проблема? Я не совсем понимаю как это сделать не всрато. Пока что придумал так: Вот словарик, в нем ключ - id, а значение - CancellationTokenSource, если я решаю отменить задачу - смотрю есть ли в словарике такой ID, и если есть - отменяю. Но это выглядит во первых всрато, во-вторых получается что нужно заботиться о том чтобы удалить CancellationTokenSource после того как задача завершилась. Есть ли какой-то более изящный, элегантный и вообще правильный способ это все организовать?
Нуб на связи. Пишу простенький инвент для текст бокса и просто охуеваю с того, что некоторые строки кода просто не выполняются, будто их вовсе не существует. Причем одна строка может выполниться, а следующая точно такая же - нет. Я просто в охуе. Пикрилейтед, там подписано, какие строки срабатывают, а какие нет. Причем без разницы, что там за инструкции, могу после замены текста поставить какой-нибудь тхреад.слип - один хуй он будет проигнорен.
Аноны, помогите пожалуйста дураку. Как создать sql базу данных локально? Я читал гайды на метаните, смотрел на ютюбе и я не понимаю, где она создаётся и что я вообще делаю. Короче, скажите просто как сохранить поля класса, чтобы при следующем запуске он их считывал и выводил. Заранее спасибо.
>>1834996 > База данных на локальном сервере хранится, тебе нужен denwer или MySQL сервер Т.е. без этого никак? А вот когда сборка программы будет, оно базу данных само создаст? Нет, просто вроде бы был какой-то метод, чтобы без вот этого вот хранения на локальном сервере. Просто пишешь кода на sql и он подчиняется. > Смотря какую базу используешь Ну вот я и хотел спросить, какие варианты есть, и как бы сделали вы?
>>1835003 MySql и sql всегда хранятся на сервере Либо локальном либо удаленном, а приложение запрашивает к нему доступ Внутри приложения никакой базы нет
Но
Существует база данных которая хранится просто в файле Гугли SQLite
Гайс, хочу устроиться на 50к+ со старта без рабочего опыта на .net core бэка. Могу в mvc, api, ef/sql, di, git, проектирование бд, безопасность, кэш, немного в деплой, немного в design patterns. Это реально с поверхностным знанием html/css и с нулевым знанием js? А то смотрю, все вакансии требуют плюсом фронт в виде жса+ангуляра/реакта/вью, тобишь все фулстеков хотят, дрочить дальше чтоль?
>>1834999 >Звучит как шиза Я вот и сам охуел с этого. Сначала не было этих мессджбоксов, у меня просто селектор не ставился в курсор позицию, стал разбираться почему и выяснилось, что после присвоения текста часть кода просто не работает.
Единственное, что буквально только что перешел с 2017 на 2019, и изменил фреймворк до 4.7.2, до этого ничего такого не замечал.
>завтра попробую твою штуку посмотреть, или если поймёшь в чем дело то пиши Спасибо. Попробую тоже завтра-послезавтра на максимум упростить этот код, и надо будет в отдельном проекте попробовать и на разных студиях, может понятней будет.
Имеется asp.net core приложение. Там есть кнопка "создать", по нажатию на которую создается сущность с дефолтными полями, помещается в БД, и происходит переход на страницу этой сущности по её id. И этот переход работает не всегда корректно. Когда выполняю прогу пошагово - работает, когда непошагово - не всегда работает. Заглянул в логи, обнаружил, что когда переход не работает, то после строки "Executed endpoint MyApp.API.Controllers.ThingController.GetThing (MyApp.API)" всегда отсутствует "Request finished in 130.0922ms 200 application/json; charset=utf-8". Есть ли способ насильно вызвать финиш реквеста?
Почему студия не видит пакет? Как это пофиксить? на using Namespace.PackageName; даёт ошибку что Using directive is unnecessary. The type or namespace name PackageName does not exist in the namespace Namespace (are you missing an assembly reference?) При том что нужный пакет есть в packages.
>>1835480 то что есть в референсах то нюгет и затянет если может чего нет - то не затянет ну и конечно еще есть опциональные зависимости - будет тянуть если условие соблюдается. например у тебя либа на разные дотнеты и каждому варианту свой набор зависимостей
>>1835494 В общем с нагетсами какая то фигня. Делюсь лайфхаком, как я сделал: Правая мышка по References, Add Reference. Дальше Browse и выбираю из папки с нагетсами нужный референс вручную. Почему то через нагетс менеджер не устанавливается, хз почему так.
>>1835440 Не совместима с версией используемого фреймворка. Также надо проверить что проекты в солюшене тоже друг с другом по версиям стыкуются. А еще почисти на всякий слачай nuget cache (гугли команды) и сделай Clean Solution + Rebuild Solution.
>>1835523 Потому что основной используемый шаблон в дотнете был MVC, а там обазательно вьюшки с хтмл+жс+цсс. А ещё раньше АПИ вообще не было, только веб формс. Последние 3 года всех кого знаю пилят только АПИ точно также как и жава, а весь фронтенд в отдельном репо на всяких Ангулярах и Реактах.
В жаве же с фронтендом всегда туго было, поэтому на нём всегда только бэк пилили.
>>1835550 да глупости же. кто пишет апи или вообще веба не касается знать не знает фронтенд вот я не знаю. вернее я знаю его настолько чтобы знать что оно лютое говнище
Хм. А нормальная тема делать контроллеры дженериками или абстрактными классами? Чет просто с одной стороны, а чому бы нет, наследоваться то можно, все настроить тоже, но при этом я почему-то во всех примерах что другие люди кодят не замечал чтобы хотя бы какой-нибудь примитивный CRUD делали дженериком, постоянно хреначат для каждой сущности копипастные методы. Я чего-то не понимаю?
>>1835578 Контракт должен быть железным. Если тебе нужно чтобы твой ресурс могли GET /api/my-resource/:id то весь этот контракт нужно прямо указать. Никакой магии, никаких зависимостей, каждый контракт полностью самодостаточен. Да, код получается больше, но поддерживать, читать и расширять такой код куда проще чем магическая динамичность. Ты ещё gRPC не видел, там ещё с контрактами жёстче.
Вообще, как и в случае с протобафом для gRPC, ты можешь руками (или при помощи какого-нибудь постмэна) построить свою OpenAPI доку и потом применить генератор, который тебе Controllers + Actions оттуда напили. Добавишь потом custom Api Conventions и можно пользоваться.
Если в одном месте прям свербит и хочется динамичности, то иди копай GraphQL, который можно на прямую в твою БД отправить и клиент сам сможет выбрать оттуда что ему нужно.
>>1835303 >>1835297 >>1834889 >>1834999 >>1835072 >То есть ты пишешь в поле - вызывается текст ченж- внутри события ты меняешь текст в поле и снова вызывается текст ченж) Да, все так, спасибо, тоже сейчас дошел до этого.
И как же мне теперь передвинуть курсор? Главное до этого все работало, когда метод изменял исключительно последний символ, но теперь вообще не помню как я так изменял этот текст, чтобы ивент не вызывался второй раз.
>>1835668 >события в шарпе сами по себе уебанство Почему? И как же такое без событий делать?(И зачем?)
>и тех кто делает sender as нужно бить палками Почему и как надо? Изначально объявить объект текстбокса через sender as и уже к нему обращаться? Будет разница?
>>1835672 >Почему? И как же такое без событий делать?(И зачем?) потому что чтобы отписаться нужно передать делегат, да не какой то, а тот же самый. А если он у тебя ламбда то придется ламбду ломать. лучше когда какой нибудь IObservable подвариант где выдаст тебе токен, который ты потом Dispose вместе со всеми А еще лучше lifetime передать и оно само отпишет отовсюду когда lifetime умрет
>Почему и как надо? ((TextBox)sender) и везде так где сендер не ожидается нулл или другого типа. Получишь ошибку каста вместо невразумительного Null Reference Exception если делаешь as - следующим делом проверяй на null. Иначе касти нормально
>>1835672 чет не ответил на "а как без событий" ну тут никак если конечно не подключаешь reactive, а поскольку обычно нет, то да получается такая херь с +=/-=
>>1835694 ну так то в сендеры может и что то другое прилететь. вот у меня в WPF с табконтролом хрен знает что прилетало (кривая его реализация) вот тогда нужен as и проверка на нулл правда и тогда лучше is
Я вот чет не знаю. Вот я нахреначил классов которые в конструкторе только IServiceScopeFactory принимают, либо IServiceProvider, воооот. И теперь достаю все что мне нужно. Ну и в чем казалось бы проблема. А в том что, как мне кажется, это какое-то говнокодерство. В общем рассудите, говнокодерство это или нет. Опять же, плюс в том что как бы получается что конструктор довольно простой, то что нужно классу в общем - достаю из провайдера, если такого нет - сразу ловлю исключение, то что нужно только в рамках метода - из scopeFactory. Пользоваться этим действительно оч удобно, но вот с точки зрения класса как какой-то самостоятельной сущности, ну хз. Опять же, в чем плюс, допустим я в Startup уже дал строку подключения и теперь если подключатсья к БД нужно только в рамках метода, мне не нужно передавать строку подключения в класс, не нужно над многими другими штуками думать. Короче, я не знаю. Вроде так писать удобно, но меня не покидает ощущение, что это как-то неправильно, типа вся эта взаимосвязь сущностей остается, но становится неявной и уже просто взглянув на то как объект представлен на диаграмме классов - остается только по названию методов и самого класса догадываться что оно собственно делает.
ТАкой вот вопрос: Локально на проекте подключаюсь к задеплоиной БД, стянут последний мастер с фронта и бека. Есть функционал по добавлению роли для участника какого то клуба. Локально все работает, но вот на задеплоином сайте почему то вылетает ошибки: System.InvalidOperationException: Role IJ����� ������� does not exist. at Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`9.AddToRoleAsync(TUser user, String normalizedRoleName, CancellationToken cancellationToken) at Microsoft.AspNetCore.Identity.UserManager`1.AddToRoleAsync(TUser user, String role)
Как это вообще возможно и в чем может быть проблема??
Тут не любят когда я на дропбокс заливаю, потому вот вам скриншот.
В общем смотрите, я накидал примерную суть упрощенную своего сервиса обработки некоторой работы. В моем петпроекте работа создается в контроллере и она отличается, в данном примере чтобы показать что типа сложно - сортируем лист из 100000 элементов.
Так вот, мне хочется проекте добавить возможность посмотреть статус работы чтобы на фронтенде рисовать красивый прогрессбар. Как это можно сделать красиво? Если скажем я сделаю класс: WorkStatusObserver в этом классе у нас будет словарь id-WorkProgress, в который буду добавлять на каждой итерации цикла объект WorkProgress пусть это будет простой объект, в котором при создании указываем максимальное значение и затем обновляя текущее и таким образом можно посмотреть % выполнения и обновлять его по ходу выполнения работы, это будет нормальным решением? Допустим этот класс(WorkStatusObserver) будет синглтоном, таким образом я буду из контроллера иметь возможность посмотреть сколько там осталось еще пока работа завершится. Норм это, или не?
Привет. Нужно по интернету и одного веб-сервиса посылать какую-то работу на другой сервис для выполнения. Пример: веб-сервис 1, на нем есть, допустим, Class1 : IJob и Class2 : IJob ... Сам IJob содержит Task DoJob(); . Нужно послать на сервис 2 объект класса ClassХ. Сервис 2 имеет такой же IJob, и должен запустить DoJob() полученного объекта. Как примерно такое сделать? Может есть готовый фреймворк? Или вручную только сериализовать и рефлексировать? Или еще какой подход есть для таких задач?
Аноны, есть ли где-то список совместимых пакетов (именно версии интересуют) с определенной версией .NetFramework? Чтобы было прямо указано что например с NetFramework 4 работает библиотека Xxxx версии 1.02, Yyyy версии 4.1 и тд.
>>1797054 (OP) В общем есть задание, каждое кол-во времени создаются детали. Как их лучше хранить? Думал в лист<стринг> сохранять "A","B" if timeHasCome, но потом парсить будет некрасиво.
>>1837212 Охуеваю с таких постановок задач. Пиздец, я пока читал - запутался, пришлось перечитать 10 раз чтобы понять что за 4 этап и что вообще от меня хотят. Нет бы по человечески: G(w0) = F(w1)+ E(w2) + 8 + rand(-3, 3). Нет, блядь, каждый раз какой-то еблан берет и вот такую вот простыню напишет и ты больше времени не на решение а на формазизацию задачи тратишь. С этой хуйни еще в школе горело. Нахуй и в пизду.
Ребятушки. Не бейте тапками. В общем, хочу из одного IHostedService посылать запросы к своим же контроллерам. Но т.к. эта фигня делается исключительно чтобы в этом сервисе не нагружать и без того тяжелый сервис всеми этими контекстами с бд, не хочу чтобы это api торчало наружу. Что и где прописать чтобы исключить возможность запроса из вне. В идеале вообще сделать это апи доступным только изнутри приложения. Я гуглил, все решения это в мидлваре прописать контроллеру ограничения, но блин, а вдруг злоумышленник - ебучий сисадмин, который вертит на хую эти запросы к самому себе и режет их.Просто лично мне это было бы ну очень удобно, потому что в синглтон не хочется передавать IServiceScopeFactory, а из БД таки хочется достать данные. Конечно, я могу просто создать еще один синглточнчик в котором буду хранить строку подключения и создавать контекст так.
>>1837272 > Зачем? Чтобы не передавать в синглтон IScopeFactory или не делать дргой синглтон, который будет делать мне контексты к БД. Я же написал вроде. В контроллер, т.к. он scoped я могу спокойно передать нужный мне контекст, затем просто сделаю запрос к нему, получу нужные мне данные и буду работать дальше. Ладно, чтобы было понятно. Есть сервис, он должен брать из БД табличку с расписанием, смотреть время, если пришло время для следующего запуска запросить из БД все объекты которые привязаны к этому расписанию и делать запросы на основании этих объектов к сторонним ресурсам, получив ответы - обновлять значения в БД. Ну и я вот хочу убрать из этого класса этот IScopeFactory, тогда в этом классе будет только методы Start/Stop/DoWork, в DoWork я и буду делать всю эту поеботу. Зачем оно надо? А вот надо, нужно смотреть цены на товаров раз в 12 часов в некоторых интернет магазинах и кидать оповещение если цена снизилась людям которые подписались на рассылку. Как это сделать иначе - я не придумал.
>>1837289 то есть вместо прямого очевидного и простого решения лезть в базу данных из своего вечноживущего сервиса ты хочешь нагородить сверхсложный огород пытаясь дергать внешний контроллер
>>1837304 Ну да. А что, это неправильно? Я просто не понимаю. То говорят что передавать контекст напрямоу плохо, то что ручками его собирать, то что IScopeFactory в конструкторе - говнокод. Я уже не знаю как делать чтобы правильно было. Делаешь очивидно и просто - уууу, в лоб зарешал, ууу. Пытаешься делать не так - уууу, нагородил огород. Короче, не знаю уже.
>>1837318 Нужно избегать использования Service Locator, потому что он скрывает знание "что конкретно нужно этому классу". Это такая неявная зависимость и приходится рыть код, чтобы понять что ему надо то. Может он раз в 100 лет попробует достать из локатора какую то зависимость, а у тебя ее нет в контейнере и все рухнет.
То есть вместо передачи зависимости на контейнер нужно стараться, чтобы зависимости были явными. Чтобы класс знал только о том, что ему нужно и четко определял это в контракте (идеально конструктор и все). А уже кто-то там повыше уровнем решал как прокинуть ему эти зависимости.
И в общем случае вместо прокидывания контейнера, из которого класс будет доставать что ему нужно лучше создать фабрику которую и прокинуть и уж она предоставит все что нужно. Фабрика это уже явная и узкая зависимость. И та же фабрика обеспечивает lazy создание чего там тебе нужно.
Я не пользуюсь и не знаю EF но по примерам складывается ощущение, что прямо на месте создают/достают из контейнера. Я хз такие практики - у меня от них глаз дергается.
>>1837440 Глобально установлен. Команда заработала, но отвечает хуйню Building project ... It was not possible to find any compatible framework version The framework 'Microsoft.AspNetCore.App', version '3.1.0' was not found. - No frameworks were found.
You can resolve the problem by installing the specified framework and/or SDK.
Сап, шарпач! Курю мануалы по авалонии и возник вопрос. Почему в построении интерфейсов назрели две крайности? 1. Таскаешь мышкой компоненты по форме, мышкой же размещаешь, мышкой же в инспекторе сбоку настраиваешь свойства. 2. Всю разметку печатаешь ручками в специальном языке разметки, при поддержке твоей ИДЕ тебе показывается конечный результат, в котором ничего нельзя подправить мышкой. Я не нашел сбалансированного решения, наподобие как в автокадах всевозможных, когда ты можешь и мышкой таскать и в командном процессоре снизу показаны команды, которыми строится интерфейс и при желании и умении, ты можешь ручками продолжать его строить, вводя новые команды. Воркфлоу выглядит так, пишешь ему что-то типа button name="OK" text="{bind MyOKCaption} а потом можешь мышкой подвинуть появившуюся кнопку и в этом поле команда станет выглядеть например так button name="OK" text="{bind MyOKCaption} margin=point(16, 303)
Если такие CAD-style-решения есть, ткните носом, позязя.
>>1837572 WPF так всё и работает, но я не представляю как этим пользоваться кто-то в здравом уме будет, потому что это своего рода костыли для долбоеба, который не может разместить элементы интерфейса по контейнерам.
Хочу через рефлексию подобрать подходящий метод для вызова. Проблема в том, что стандартный GetMethod бесполезен.
Мне известен возвращаемый тип (стоит ли его учитывать; есть ли он вообще; является ли он generic) и известны типы параметров. На основе этого нужно подобрать подходящий метод.
Пока думаю делать так: - первый проход по методам - строго сравниваем параметры (type == type) - второй проход - используем IsAssignableFrom, но учитываем только generic типы - третий проход - используем IsAssignableFrom
- проходим по получившемуся списку методов, подбираем первый подходящий возвращаемый тип и возвращаем метод
>>1837583 Это понятно. Может есть способ проще... Мне нужен такой же подбор по параметрам и возвращаемому типу, как это сделано в самом C#. Это нужно для скриптового языка.
>>1837586 ну а какая разница? знаешь типы, методы есть - выбирай из них. Для экономии времени можешь составить свой словарь "сигнатура - метод" и он будет моментально тебе находить по сигнатуре
>>1837504 Для drag-and-drop пользуйся win forms. От создайния интерфейсов мышкой не зря отказались. Это вообще теперь industry standard - не пользоваться drag-n-drop разработкой. Такой способ только для быстрого прототипирования может подойти или для домашней поделки.
>>1837689 >методы есть - выбирай из них Легко сказать... Там столько подводных всплыло с дженерик-типами. Написал не слишком сложный поиск. Добавил ещё сортировку по "весу". Для скрипта должно хватить, если я всё учёл. https://pastebin.com/YW9N8xbP
>>1837892 Потому что парсер наткнулся на этот кусок и дальше не стал строить дерево.
А вообще, как по мне заменять это на LINQ - плохая практика. я вот сам попервой нахреначил кучу хуйни так, а потом хуяк и этим пользоваться менее удобно оказалось и для понимания оно сложнее, особенно теми кто не особо за LINQ шарит, например бывшие джависты-пхпшники, они сразу начинают - ууууу, нипанятна.
>>1837921 В html/css никто не двигает элементы мышкой. Маржин и паддинг нужно устанавливать у родительского элемена, дочерние элементы уже выравниваются автоматически. Тоже самое и в WPF делают. Это удобно тем, что если у тебя, к примеру, 5 последовательных эелемнтов и ты их расположил двигая мышкой т. е. явным указанием маржина, а иногда и трансформирования, то если тебе нужно будет передвинуть один элемент, то менять эти маржины придётся у всех 5 элементов.
Сап. Есть одна БД, в ней около 10 таблиц, в каждой около 10 столбцов, все таблицы записаны в csv. Суть: нужно по запросу вида "таблицанейм.столбецнейм" получать столбец/строку из него. Я решил под таблицы написать модели и быстро осознал, что на каждую придется написать строк 100 чисто логики парсинга, и то полнейший костыльный пиздец выйдет. Так вот: как эту хуйню нормально запарсить? Про библиотеки, которые это сделают за меня, я в курсе, но шараге на их существование (ровно как и на существование половины стандартных библиотек, лол) поебать. Нужно как-то свою реализацию написать.
>>1838313 У меня проблема с тем, что мне нужно вручную как-то забиндить распаршенные данные к моделям, при этом таблиц дохуя, столбцов дохуя, типы данных у столбцов разные. У меня нет идей, как это сделать нормально, а не через тысячу ифов.
>>1838316 Парсишь csv сначала в словарь где ключ это название заголовка, а значение список из значений таблицы под этим заголовком. Переводишь все щначения при помощи tryparse
Используется ли до сих пор ASP.NET, или все уже перешли/мигрировали на ASP.NET Core? Каков шанс, что при устройстве на работу джуном посадят на не-кор ASP.NET проект?
>>1838335 >>1838331 Откровенно говоря, и старье переписывается. Но старого фреймворк кода еще горы, и джуны еще много лет будут за него садится. Знать нужно и фреймворк, и кор.
>>1835547 >Последние 3 года всех кого знаю пилят только АПИ точно также как и жава, а весь фронтенд в отдельном репо на всяких Ангулярах и Реактах. Сейчас же в ASP.NET Core есть Blazor Server (WebAssembly на вебсокетах).
>>1838675 Он только только продакшн френдли стал. И он не для всех проектов подойдёт. Для тяжёлых клиентов надо однозначно Blazor выбирать вместо всяких реактов/ангуляров. Для остального надо думать.
>>1838918 >И он не для всех проектов подойдёт. Почему не для всех? По вебсокетам дешевле общаться и отзывчивость лучше. Есть автоматическое переподключение. Если вебсокеты недоступны, то переключается на SSE или Long polling. Можно пересылать данные и файлы в бинарном формате MessagePack.
>>1837504 Сап, шарпач! Это снова я! Все вышеотвеченные ответы понял, принял.
Возникла новая проблема. Читаю документацию по этой авалонии, сделанной любителями и пытаюсь воспроизводить хеллоуворлд. И первое что я пытаюсь сделать, чтобы при нажатии на кнопку вызывалось событие. Мне предлагают три варианта: 1. Прибиндить простую команду. 2. Прибиндить команду Reactive UI (кстати, добавочный вопрос, кем сделан этот и может лучше мне его рассмотреть? Почему вообще авалония эта к нему цепляется, как к зависимости? Не, я конечно и сам погуглю, но и анона бы почитал) 3. Пробросить нормальное классическое событие. И вот тут возникает проблема. Когда я пишу <Button Content="Click Me" Click="OnClick"> клик подчёркивается и пишет, что unable to find suitable setter or adder bla-bla-bla... Я что, должен что-то подключить? Но я делаю в точности по референсу в туториале. Ожидается, что такая фундаментальная вещь, как обработчик нажатия кнопки, должна быть подключена из коробки. Или нет? Хуета какая-то, простихоспаде.
выбор между 1 и 2 фломастеры. 2 получишь так, а 1 самому придется фреймворк писать. Для меня это изи и я выбрал 1. но потом ничего не выбрал, потому что мыльность шрифтов в авалонии под винду нет лечения.
Есть класс, в котором хранится переменная, которую я хочу изменять из другого класса. Если я создаю экземпляр класса MyClass Class = new MyClass(); через него обращаюсь к переменной и изменяю её, то в следующий раз у неё оказывается то же, неизменённое значение. Как это сделать нормально?
>>1840099 MyClass Class = new MyClass(); создает локальный инстанс. потому никто другой ее не видит - она каждый раз создается. нужно присвоить ее внешнему чему нибудь
>>1840131 нет никакой особой магии. те же правила, что в и однопотоке представь что ты вызываешь метод с этим MyClass Class = new MyClass(); из одного потока подряд. И подумай как бы ты сохранял переменную между вызовами. Вот это и делай
Доброй ночи. Подскажите неопытному масленку почему возвращается результат тат работы кода (который ниже) True, False, True, True Почему во втором случае False хотя строка не менялась.
Доброй ночи. На связи unityдрочер. Есть задача дать возможность персонажу динамически изменять слой на котором он находится, но никаких рабочих методов я так и не нашел, это вообще возможно и если возможно то как? Ниже пример моих попыток:
>>1840583 Потому что s2 и s3 это ссылки на интернированную строку, а string.Format (s1) это ссылка на ново созданную строку, если обернуть его в string.Intern то результатом второго сравнения будет True.
Есть приложение на C#, которое написано на winforms. Сейчас потребовалось сделать кроссплатформенный интерфейс. Какие могут быть дальнейшие шаги и варианты? Слышал про GTK#, но он как будто какой-то старый и чето документация не особо хорошая. Есть вроде Avalonia, насколько тяжко будет переходить на неё, если все завязано на winforms да еще и куча компонентов от devexpress. В общем, поделитесь опытом или дайте советы, какие могут быть варианты.
>>1840805 ни на какой. остался на WPF. В нем есть TextOptions.TextRenderingMode
>>1840796 варианты это uno но это, как я понимаю, вебвью какой то а не натив или авалония или QT
и даже если на авалонию (или uno) перегонишь код как есть в основном (не внедряя MVVM) то контролы придется создавать самому. в XAML это конечно проще чем формсы, но все же это знать надо. Можешь подождать MAUI но хз че оно там будет еще....и когда.
>>1840812 > остался на WPF Не катит. Оно гвоздями прибито к шындовс. А я ищу замену устаревшему морально Lazarus FreePascal IDE который write once - compile everywhere с библиотекой LCL, кросплатформенным клоном Delphi VCL, которая в винде враппится в win32, в линуксе, в окружении KDE враппится в Qt, в окружении гнома враппится в GTK, в окружении андроида в андроид, и так далее. И всё это создано и отполировано ещё в нулевых. Я не перестаю охуевать от того, что замшелым дидам-паскальщикам это всё доступно искаропки, а молодые шутливые шарпобоги не имеют возможности одним росчерком пера одной распальцовкой клавиатуры создать универсальное окно и нахуярить в него универсальных контролов/виджетов, которое система автоматически встроит в целевую платформу, юзая нативные интерфейсы этой платформы. Воспользуюсь советами второму анону. Изучу приведённые варианты.
Правильно ли я понимаю, что async-await просто упрощают работу с тасками? Или они добавляют какой-то новый функционал? Вот есть допустим такой код https://ideone.com/zCEfZ4 , как можно переписать его на async-await, чтобы ход исполнения оставался прежним?
>>1840842 async-await избавляет тебя от необходимости контролировать всё что связанно с потоками и их выполнением, упрощают работу с ними и делают твой код намного читабельнее. Проблема вот этого кода: https://ideone.com/zCEfZ4
В том, что каждый вызов Thread.Sleep блокирует поток, в то время как он мог бы выполнять полезную работу и не занимать место в памяти без пользы. Если заменить всё на async await и Task.Delay, то весь код может выполняться в рамках одного потока. Т. е. помимо меньшего потребления памяти за счёт отсутствия необходимости создавать дополнительные потоки, улучшается и производительность за счёт меньшего переключения контекстов между потоками.
>>1840851 await (в любом языке) позволяет переписать цепочку калбеков/продолжений в линейный вид например псевдокод (посади дерево).continueWith(построй дом).continueWith(роди сына) в линейную await посади дерево await построй дом await роди сына
коих 95 методов
но если тебе нужно запустить несколько (посади дерево) одновременно, то тебе уже понадится заводить объект Task
но и там для вместо continueWith для ожидания результата каждой таски поможет await. но это уже не полноценная замена. ведь await ожидает в данном месте и пока не дождется дальше не пойдет.
например запустил ты 3 таски (посади дерево) и у тебя 3 таски task1, task2, task3 и ты делаешь await task1 await task2 await task3 то он остановится и будет ждать task1 и даже если task2 уже все, то оно об этом не знает. потому что это эквивалент
>>1840812 Вот мои поиски все тоже ведут в основном к Avalonia. Понятно, что придётся самим контролы писать и у devexpress не взять. Но, боюсь, что вариантов других нет, ибо компании нужна кроссплатформенность. В идеале, конечно, в веб это всё перенести, но приложение слишком нетривиальное и я боюсь представить сколько на переписывание уйдёт лет.
>>1840838 >нахуярить в него универсальных контролов/виджетов, которое система автоматически встроит в целевую платформу, юзая нативные интерфейсы этой платформы. ну это хамарин формс такой. хотя вряд ли мауи (что идет ему на замену) будет такой же в плане работы на десктопах. Я хз как можно решить проблему шаблонов, ведь хамл создает визуальный вид контрола, а нативные контролы они не такие гибкие. Авалония вот использует свой рендер.
>>1840887 Используются с перечислениями которые помечены атрибутом Flags, если не понимаешь побитовые операции, то будет сложно понять как работает переключение флагов. Поэтому на базовом уровне знать нужно, иначе соснёшь.
>>1840046 > мыльность шрифтов в авалонии под винду нет лечения Получается, предпоследний пункт на пикче - ложь? Или там просто WIP и надо просто подождать, затянув пояса? >>1840886 > Я хз как можно решить проблему шаблонов, ведь хамл создает визуальный вид контрола, а нативные контролы они не такие гибкие. Авалония вот использует свой рендер. Я понемногу начинаю просекать фишку. Если бы WPF не прошёл бы мимо меня стороной, я бы уже давно фишку сёк и даже сомнений бы не было. Потому что это реальный прогресс по сравнению с классическими формо-ориентированными тулкитами. Я уже неделю плотно изучаю вопрос и понимаю, что возврата назад для меня уже не будет. Ни ГТК, ни КТ, ни ВХ не обладают и 10% той гибкостью, что дают хамл-ориентированные тулкиты.
>>1840901 Я не знаю что означает предпоследний пункт. но за рендеринг шрифтов отвечает бэкенд Direct2D и я хз как его заставить рендерить не мыло. WPF точно такое же мыло рендерит, но там это можно обойти и получить четкий шрифт. у меня даже встроено вот такое
>>1840924 Сорян, я отношусь к противоположному лагерю людей, ради которых и было сделано это всё, мне наоборот режут глаз шрифты без сглаживания. То есть, на этой гифке мне всё видится нормальным. Никакой беды не вижу. Но, я тебя понимаю, возможность включить или выключить сглаживание по запросу пользователя должна быть.
>>1840991 Так это понятно, только я сомневаюсь что у тебя там вычисления на несколько секунд. В любом случае нужно использовать async/await и класс Task, особенно если речь идёт о IO операциях, таких как обращение к диску или сетевому адаптеру.
>>1840991 Работу нужно не симулировать, а делать )
await это точка, где "уходит в ожидание" и освобождает поток дав поработать кому то другому кому нужнее, пока ждет. Когда await дождется, то его продолжение станет в очередь в текущем контексте синхронизации (тредпул например)
Воспринимай await как тот же ContinueWith только переписанный иначе, где тело продолжения это от await и до конца метода.
Сахар же чтобы уйти от калбэков
в котлине же вон вообще код с корутинами не отличить без них без подсказки редактора.
>>1841011 > освобождает поток дав поработать кому то другому кому нужнее
Сам по себе поток не занимает процессорное время, т. е. Thread.Sleep не тратит процессорное время, он тратит память в котором хранит все данные о себе.
>>1841024 >Сам по себе поток не занимает процессорное время он занимает сам поток. И если у тебя 1 поток (например гуи) - у тебя лаги или все висит. Количество потоков пула тоже конечно. займешь их все и остальные задачи станут в очередь дожидаясь реального освобождения потоков.
Почему сервер на SocketAsyncEventArgs работает быстрее чем если использовать TcpListener или обычные сокеты с ReceiveAsynс? Провел около 10 тестов и всегда эти эвентАрги - выигрывают.
>>1841434 Потому что SocketAsyncEventArgs более низкоуровневая концепция чем TcpListener. Т. е. ты вырыл тоннель которым пользуешься только ты и спрашиваешь почему по этому тоннелю ты добираешься из пункта А в пункт Б быстрее, чем по общественной дороге. Либо твои тесты хуйня.
Можно ли сделать HashSet из объектов ссылочного типа, для которых не переопределен GetHashCode. Как я понял, для получения GetHashCode будет использоваться адрес памяти, где расположен объект. Но если GC начнёт утрамбовывать память, то адрес объекта может измениться. Как тогда это будет работать?
>>1842251 >Можно ли сделать HashSet из объектов ссылочного типа, для которых не переопределен GetHashCode.
Можно. >Как я понял, для получения GetHashCode будет использоваться адрес памяти, где расположен объект.
Откуда ты это понял? Обращаться к памяти при вызове GetHashCode было бы весьма затратно, особенно учитывая, что GC перемещает объекты в памяти со временем.
>Как тогда это будет работать?
Не переопределенный GetHashCode всегда возвращает одно тоже значение для объекта n на протяжении всей жизни приложения. Сборщик мусора никак не влияет на это поведение.
>>1842264 >Не переопределенный GetHashCode всегда возвращает одно тоже значение для объекта n на протяжении всей жизни приложения А как оно берется-то? Откуда? Или при инициализации объекту добавляется автоматически поле в памяти со значением хеша? Если например, поля объекта - такие же ссылочные типы, без данных типа значения.
Зависит от хеш-функции. При первом вызове GetHashCode CLR генерирует хеш-код и помещает его в синхронизационный блок объекта, дальнейшие вызовы GetHashCode возвращают данное значение.
У меня пара вопросов. 1. Стоит ли резать основной класс на подклассы. Чтобы было понятно. Допустим это текстовый редактор. Я беру и режу его на FileReader, FileSaver, TextFormatter и т.д. внутри основного класса уже создаю инстансы этих вот подклассов. 2. Насколько стоит думать о близасти конвенциональным понятиям "читаемого" кода? Допустим, ведь можно написать вот так вот: async Task<ReadOnlyMemory<byte>> ReadData(byte[] buffer, CancellationToken cancellation) => buffer[..(await this.StreamReader.ReadAsync(buffer, cancellation))] Как по мне оно все еще читаемо, но при этом в 1 строчку вышло, в противовес стандартным примерам где:
Ну или если с циклами так вообще смотрите как удобно:
int i = 0; while( (i = await ReadData(buffer, cancellation) > 0) { что-то делаем с данными из буфера }
и как это будет в классическом примере? А как-то так: while(true) { int items = await ReadData(buffer, cancellation); if(items == 0) break; что-то делаем дальше }
Как по мне первый пример проще понять(сразу видно условие выхода из цикла, например, да и вообще сразу ясно что это за цикл: читаем, пока есть данные которые можно читать) и читается он легче, но почему-то в среде шарпистов я его только в исходниках самого .net вижу, а гитхабы и прочее места где другие люди пишут код - перегруженные конструкции используют, которые длинные, и часто больше с толку сбивают.
А, ну и последнее. В исходниках на гитхабе постоянно вижу эти if(condition) throw new Exception("!!!Some condition happened!!!"); На кой оно надо? Почему не писать так, чтобы такой вот херни не происходило? Ты же сам блин пишешь, зачем кидать эти исключения, вызывая падения там, где можно было бы просто не допустить его возникновения? Нет, блядь, каждый метод как поехавшие проверяют на null, будто он возьмется из воздуха само по себя, если ты сам его туда не передашь, а если передал, ну, сам дурак, все равно программа упадет при и ты увидишь где, а следовательно просто сделаешь так, чтобы не передавался null.
>>1842460 >1. Стоит ли резать основной класс на подклассы.
Зависит от того, как ты будешь с этими подклассами взаимодействовать, за что конкретно они будут отвечать. Если ты эти части менять будешь редко, то не стоит, потому что это только раздует твой код. Если у тебя предполагаются различные реализации условных FileReader, FileSaver, то стоит.
>Как по мне оно все еще читаемо
Так можно про любой код сказать, который ты написал пару минут/часов назад. Попробуй разобрать эти однострочники через неделю/месяц и поймешь почему так делать нельзя.
>Ну или если с циклами так вообще смотрите как удобно: >while( (i = await ReadData(buffer, cancellation) > 0) А зачем тебе вообще i объявлять? Оно здесь лишнее. Отдельные переменные нужно объявлять если собираешься их считывать и исходя из значения что-то делать, в случае с чтением потока байт это может быть изменение размера буфера.
>В исходниках на гитхабе постоянно вижу эти if(condition) throw new Exception("!!!Some condition happened!!!"); >Ты же сам блин пишешь
Гитхаб - опенсорс. Опенсорс - твой код помимо тебя будет использовать кто-то еще. И чем он его дополнит, как допишет, как будет использовать - тебе неизвестно, поэтому если случилось что-то критическое, то нужно бросать эксепшн, а не ждать пока пользователь твоей библиотеки обнаружит, что с его данными какая-то хуйня неведомая творится.
>>1842460 1 резать нужно всегда ибо SRP, но они не будут подклассами же. Хз о чем ты 2 ну можно ведь пойти дальше и принимать не byte[] buffer, а вообще Span ну или вообще yield 3 если пишет значит ожидает что может пойти не так и что внутри не будет исключений, а значит сам обязан кинуть исключение
Уважаемые, нужна ваша помощь! Ситуация следующая Имеется html форма в которую через инпут заливается картинка, далее это дело отправляется POST запросом в Контроллер в виде параметра IFormFile. Тут возникает вопрос: как мне из этого IFormFile'а сформировать что-то, что я смогу отправить методом Http.PostAsync в API в виде (опять же) POST запроса? Я пытался упаковать эту картинку в StreamContent, StringContent, но на всё один ответ - "Unsupported media type".
Я НАШЁЛ! И это... Eto! Нашёл его, изучая предложенную мне аноном авалонию, в которой Eto в ряде случаев юзается, как бэкэнд. Я загуглил, а там! Полноценный ЮИ-фреймворк, да ещё есть возможность описывать формы на JSON. Это второй бурный оргазм, нахуй!
А существует ли вообще джуно шарпо работа, где не надо шлепать winforms, wpf или html/css? Сука, каждая вакансия это или легаси на wpf или около-фуллстэк на асп с обязательным знанием джс. Мне просто нравится язык, я не хочу шлепать формы.
>>1842781 Ну ты показал, как это отправить в соответствующую функцию на API пост-запросом, но на API должен быть код, который это откуда-то достанет. Я пытаюсь несколько часов это достать, как параметр принимающей функции, но в результате либо null, либо Unsupported media type
>>1842786 Есть просто бек. Есть бек с микросервисами. Есть бек с лютой скалабельностью, параллелизацией и хайлоадом. Наверное, есть еще тысяча и одна область, о которых я не знаю. Но я хочу верить, что программисты это не только формошлепы и веб макаки. Лучше уж тогда пинать хуи на мамкиной шее, чем пиздовать на такую работу.
>>1842794 >Есть просто бек. Есть бек с микросервисами. Как видишь - нет. Либо ты фуллстэк, либо фронтенд-макака. >Есть бек с лютой скалабельностью, параллелизацией и хайлоадом. Это уже больше к С++ относится и серверным частям на нём, а не к шарпу.
>>1842812 >Это уже больше к С++ относится и серверным частям на нём, а не к шарпу. Та бля, в каждой шарпо презентации говорят насколько он крут и быстр. Да и структуры с указателями в нем точно не просто по приколу. > с лютой скалабельностью, параллелизацией TPL дает охуенные фичи для паралеллизации, а скалабельностью славится даже скала с ее акторами. Мне кажется, плюсы нужны только ты пишешь что-то под комп клиента- игру, сложную программу типа фотошопа и тд. А на сервере хоть на питоне пиши, просто пиши так чтобы можно было без напрягов просто добавить еще один сервер, если один не вытянет.
>>1842858 >Та бля, в каждой шарпо презентации говорят насколько он крут и быстр.
Ну да, в сравнении с петухоном, пыхой и даже жабой, он довольно быстр. Вот только на нём написано мало, поэтому и мало чисто бэкендных позиций. Новый код на нём писать выгодно только в том случае, если его будет писать разраб-фуллстек. Вот поэтому мы и имеем вакансии с акцентом на фуллстеков.
>TPL дает охуенные фичи для паралеллизации
В TPL нет ничего нового и сверхъестественного, это просто удобная часть стандартной библиотеки, которая в других языках, в той же жабе, существовала в виде пользовательских библиотек.
>>1842783 У нас фронта под дотнет в принципе нет, поэтому даже джуны клепают серверную часть, не трогая фронт-енд. Но HTTP1/2 протоколы знать всё равно нужно вместе со всякими куками, Etag'ами, request/response'ами.
>>1842783 А что ты подразумеваешь под джуноработой? Просто интересно. Вот когда я пришел на дужна за 11к рублей, мне сказали: Смотри, Вась, тут заказ есть, нужно разработать решение на микросервисах, вот тебе требования, вот пожелания, - пиздуй делать, через месяц не будет MVP с фронтом на ангуляре - досвидос. Я за это время выпил энергетиков на большую сумму чем мне платили, благо все еще на шее мамки сижу. Потом правда до 20к подняли зп, теперь доволен как слон, на энергетики и даже сигареты хватает.
Проблема не решилась, спрошу заново: Имеется ASP net core приложение. Пользователь в инпут формочку загружает картинку, эта картинка POST запросом отправляется в функцию, обрабатывающую POST запросы по данному адресу. В этой функции картинка появляется в виде IFormFile интерфейса в качестве параметра функции. Теперь нужно как-то отправить эту картинку по известному Uri в другой контроллер и как-то эту картинку в нем прочитать 1ый пик - Функция извлекающая картинку из формочки и пытающаяся отправить картинку по другому адресу при помощи PostAsync 2ой пик - функция, которая должна принять картинку, но вместо этого если указать у нее какой-либо параметр, то возвращает код Unsupported Media type, если не указывать параметры, то не понятно, как получить отправленную картинку
>>1843622 >то что у StreamContent'a, что у HttpClient'a api оно пустое потому и отбивает его фремворк как "я не знаю какой Content-Type у того что мне шлют и я хз че с ним делать". Это первая проблема
>>1843687 да точно так же или запрос не стримконтент, а полноценно MultipartFormDataContent в котором уже стримконтент и которое неотличимо от "отправляю форму" и на получении тот же IFormFile
или на клиенте [FromBody] но вряд ли там можно получить стрим как IFormFile (все таки апи), тогда [ReadableBodyStream] к action и вычитывать тело запроса самому
>>1843548 Ну как, меня сразу взяли в штат и дали работу, которую потом отдали заказчику и заказчик доволен был. Вот. Сейчас, спустя 2 года - 20к получаю. Вот.
>>1844204 > бел. рублей? Российских > как это 20к спустя два года? Ну, если сравнивать с 11к и учитывая что я на мамкиных котлетках с макарошками - нормально. > или гос. контора? Внезапно - лидер в своей области, причем мировой, мать его(там даже пару лет назад скандал был, дальше не буду распространяться, т.к. еще узнаете где я работаю, а тут за очернение репутации фирмы и выпизднуть могут). Просто те кто управляют - предпочитают себе выписывать каждый квартал премию с 6 ноликами в долларах, а за проебы все на кодеров сваливать, и за это тут постоянно говорят про то что кодеры не справились, ну да, блядь, штат 20 человек - 50 проектов, сука, конечно не справились, у вас же всяких продажников 500 человек и у них продвижени по службе - охуенные идеи, которые скидывают на кодеров, и потом кодеры виноваты что не выстрелило, ведь охуенная идея по всяким рассчетам должна была миллиарды денег принести, а это кодеры такие вот хуевы и похуй что даже на джуна вешают полноценные проекты, похуй что на кажодом челе по несколько - расширять штат мы не будем, это вы как-то работайте быстрее. Благо хоть понимают, что таких вот дураков не много и просто так не выгнать.
>>1844215 > таких вот дураков Воистину при капитализме капиталист платит ровно столько, за сколько готовы работать. Как же они рады, что у них в штате 20 дурачков, которые работают за зарплату дворника и не увольняются.
>>1844227 А просто некуда идти. Тут знания специфичны очень и соотвсетственно ты будешь вынужден с позиции максимум мидла начать на другом месте, единственный конкурент - платит столько же, но по договору, который нужно было подписать после скандала, идя конкретно к нему ты должен выплатить штраф в размере всех ЗП которые ты получал пока работал тут. Это многих напрягает, особенно тех кто работает лет по 15.
>>1844229 > по договору, который нужно было подписать после скандала, идя конкретно к нему ты должен выплатить штраф в размере всех ЗП которые ты получал пока работал тут И кстати, осторожнее с такими подробностями. По такой юридической практике контору уже принципиально возможно вычислить. А двач славен шерлоками комнатными.
>>1844215 Скажи честно ты поехавший или просто траль? Почему ты не ищешь работу в норм компаниях? Есть скайп, есть зум, нет хочу за 11к хуй сосать, нахуй переезжать куда-то?
>>1797054 (OP) Такс, Repository Pattern используемый над EF Core официально полнейшее говно по многим причинам, но есть ли более-менее адекватные альтернативы?
Вот один из примеров на что его можно заменить, как минимум плюшки IQueryable не теряются, но блять, под каждый пук определять отдельный класс, это как-то сомнительно. Кто-то пробовал придумать универсальное решение, или может нактыкался на него?
>>1843548 Лол, я без опыта вообще первую работу нашел на ЗП 60к+, просто не надо в себе сомневаться и надо пробовать влетать всюду куда предлагают. Если ты завалишь собес тебя никто не покусает, а если пройдешь то на реальном проекте можно быстро дотянуть то чего не знаешь, и это понимают и те кто собеседуют, на собесах чаще смотрят просто на то как ты мыслишь и рассуждаешь, чтобы понять что ты из себя представляешь.
>>1844710 Тебе показать выписку по ЗП? 20к после вычета налогов, стаж 2 года. >>1844719 Вангую что ты ДСоблядок. Конечно, у вас и в макдаке каждый хуй по 300к получает, что удивляться-то, сосете кровь из регионов. А тут вот кодеры с 15 летним стажем получают 50к и довольны как не знаю кто, я с 20к тоже вроде доволен, только вот хочется видеокарту обновить(770 уже не тянет), но видимо подожду следующего поколения.
>>1844714 > Repository Pattern используемый над EF Core официально полнейшее говно по многим причинам Да как раз нет. Если тебе действительно нужны фишки IQueryable снаружи - делаешь интерфейс для репозитория который этот твой IQueryable возвращает и этот интерфейс просто расширяет другой интерфейс обычного репозитория, банально вот у тебя IAsyncRepo<T> вот у тебя IQueryableRepo<T>. Другое дело, что нахуй оно надо-то? Вот серьезно. На высоком уровне ты просто инжектишь сервис который уже все под капотом сам сделал, даже с репозиторием не работаешь напрямую. А внутри этих сервисов - просто делаешь что тебе надо. Ну и да, сами майки почему-то в своих примерах с архитектурой используют репозиторий над EF. И норм у них, красивенько все удобно. Опять же, если нужно будет затестить саму бизнес-логику, тебе не нужно париться с наполнением БД и прочей залупой, ты просто замокал репозиторий и можешь нормально проверить работу сервиса на соответствие бизнес-задачам. А чтобы такой вот аналог запросов получить - берешь https://github.com/ardalis/Specification и используешь
Есть таблица в postrgeSQL, есть класс данных который надо вставлять в табличку. Поля бд соответствуют полям класса 1 в 1. Ключевых полей нет. Есть Npgsql, Dapper и Dommel. Проблема в том,что не работает команда:
using (var connect = new NpgsqlConnection(someConnectionString)) { connect.Insert(dataSet); }
Класс примерно такой public class DataSet { public int data_count_1 { get; set; } public int data_count_2 { get; set; } }
>>1845135 >Другое дело, что нахуй оно надо-то? Это все выглядит как лишний уровень абстракции, который не служит никакой цели, кроме как чтобы Unit тесты было писать якобы проще при том, что в EF Core уже есть абстракция IDbSet, которая по сути и есть репозиторий, в инете в целом, легко найти статьи о том, почему утверждение что тестить EF Core напрямую сложно или невозможно - это не совсем правда, так еще такой подход закрывает плюшки ORM. То что майки сами его используют в каком-то туторе, и то что его используют во многих примерах "Best Practicies" - еще не значит что его надо пихать абсолютно везде. Я ищу альтернативы, потому-что, к примеру, если мне не нужны Unit тесты в каком-то маленьком-простеньком проекте, то репозиторий по сути только мешает, но при этом я бы не хотел иметь прямые зависимости от EF Core в сервисах или контроллерах, шобы все было по DIP.
Вообще, на базовом уровне, еще давно когда я читал по нему туторы меня смутила необходимость определять методы навроди "GetHuinyaWithZalupa" в репозиториях, при том что существует IQueryable, тогда я забил, но сейчас мне это не дает покоя. Очень сомнительная хуйня, ты по сути сам себя сознательно ограничиваешь при этом можно сказать что ты в некотором смысле даже нарушаешь OCP, и не понятно какие реальные профиты от этого получаешь. Я придумал реализацию Generic Repository на основе IQueryable, которая не требует определять отдельные интерфейсы под каждую отдельную сущность, на западных ресурсах буржуи сказали что вариант интересный, но использование репозитория вместе с EF Core раскритиковали, в целом, указав на то что этот функционал уже есть искаропки. Вот решил еще у соотечественников спросить.
>>1845249 Clean code, все дела. С репозиториями и GetHuinyaWithZalupa() методами у тебя получается больше кода, но каждый кусок отвечает только за свой функционал. Репо хорошо ложатся в CQRS. С репо ты напрочь закрываешь какие-либо зависимости: сегодня Dapper, завтра EF, там у тебя постгрес, тут у тебя монго. А то ведь данные и с какого-нибудь сервиса прилетать могут. Через репо ты абстрагируешься от источника данных и отдаёшь бизнес логике только удобовариваемые контракты, по которым она работает с данными.
Кода больше, но поддерживать и расширять такой проект, когда он перевалит за 1кк строк, просто. Каждый девелопер может свой кусок менять не боясь за то что поломает чужую логику или наделает кучу merge conflicts.
Это нормально постоянно дергать context.AuthenticateAsync? А то у меня есть несколько схем аутентификации, где-то нужна одна, где-то другая. Или можно как-то запихать все принциплы в свойство юзер?
>>1845289 Пишет что не ключа для name_spase.table Если сделать поля без _ везде, то он нормально работает. Я так понял нужно сделать public class DataSetMap: DommelEntityMap<DataSet> и как то ее инициализировать, но возможно просто использовать атрибуты для полей класса, правда я не понял каких.
>>1840625 Хорошо а в первом случае почему true ? Ведь там по идее будет сравнение по ссылкам на объект в они будут отличаться потому что будет выполняться метод Join. Или я не прав ?
Вот есть такой язык VBA (бейсик для MS офиса).Есть программы сделанные в MS Access - окошки через формы, логика на VBA. Мне дали задачу - сделать морду-интерфейс (фронтэнд) на шарпе
Так вопрос - можно ли из C# вызывать функции написанные на VBA?
Потому что переносить весь старый бейсиковский код на шарп - легче застрелиться.
>>1845980 Можно, но только при условии, что код на VBA является CLS-compliant кодом, т. е. в нём не используются фишки конкретно VBA, в шарре например если использовать uint тип в коде шарпа, то этот код не будетс cls compliant.
>>1845980 Админил в начале нулевых софт, написанный в этой чудовищной среде (MS Access + VBA). Админил несколько лет. Что я могу тебе посоветовать? Беги оттуда, глупец, пока не поздно! Несмотря на то, что ты пишешь: > Потому что переносить весь старый бейсиковский код на шарп - легче застрелиться. Я рекомендую именно с этого и начать, чем раньше, тем лучше. Можешь, как советует этот >>1846019 анон, завести в солюшене два комплиантных проекта, один на ВБ.Нет с перенесённой в него логикой из акцес-формочек (и пожалуй в нём же организовать доступ к БД), собирающийся как библиотека, второй на шарпе, с первым в качестве зависимости, и он содержит фронтэнд. Как-то так. Замечу ещё, что просто так ты код из VBA на VB.Net не перенесёшь. Там работы будет дохуищща! И проще сразу на шарпе всё переписывать. И ещё, у МС есть функционал для запила дотнетных расширений к офису, в том числе к акцессу. Я его никогда не пробовал в работе, но в принципе вся эта идея выглядит сомнительно. Нирикаминдую, хоть и Пастернака не читал.
Мне нужно проверить несколько переменных на null и выполнить действия, если какие-то из них null. Для каждой переменной своё действие. Как это сделать без гигантского ifа на миллиард строк? if((string1 ?? int2?? string3 ?? double4?? string5 ?? string6) == null) не подойдёт в моём случае именно из-за того, что мне надо надо знать кто именно null и делать действия.
>>1846131 И какой логический вывод ты можешь сделать, глядя на переменные из второго сравнения и четвертого? Будут ли одинаковыми объекты полученные из строк? Если да, то почему? Если нет, то почему?
>>1846139 ну вывод там прост в 4 случае сравниваются 2 интернированные строки и это вообще 1 объект (компилятор постарался) в первом сравниваются строки, потому что интернированная строка это тоже строка а во втором объекты и значит string не перегружает object.Equals, вот только он перегружает
>>1846133 Делай, почти как анон выше предложил, только без горожения безумных интерфейсов и фабрик. Заведи одну функцию, которая принимает аргумент и коллбэк, если аргумент = нулль, дёргает коллбэк. Просто, быстро, говняно, неподдерживаемо. Если переменные нескольких типов, это же очевидно, что надо сделать: скопипастить функцию с другим типом аргумента.
>>1846219 >потому что правильно исползовать в котлине Ага, потом нам понадобиться чтобы при null выполнялось отличное действие от того, когда у нас не null и в котлине мы схватимся за голову и соснём. >но это еще дальше уходим от проблемы автора Никто никуда не уходил, всё то что ему нужно - если переменная null, то ничего не делаем, если у неё значение, то выполняем метод.
>>1846226 >Ага, потом нам понадобиться Если бы у бабушки были.... Каждой задаче свой инструмент. Нет задачи - не нужно хвататься за голову.
>всё то что ему нужно - если переменная null, то ничего не делаем, если у неё значение, то выполняем метод. а я понял что ему не только нужно чтобы выполнялся метод если очередная переменная нул, а чтобы дальнейшие нулл переменные не обрабатывались
на что я запихал бы все переменные и методы в List<KeyValuePair<object, Action>> и проходил бы по ним.
Наконец завязал с доистористорическим web forms и решил перекатиться на ASP.NET Core MVC. Сразу же получил по ебалу. Большинство материалов расчитано на тех, кто работал хотя с ASP.NET MVC. Нихуя непонятно, прям другая вселенная. Посоветуйте учебник для новичков в этой технологии или же материалы, которые помогут мне хоть немного наверстать упущенное время и пробелы в знаниях.
>>1846231 >Каждой задаче свой инструмент. Нет задачи - не нужно хвататься за голову.
В инструменте ценится универсальности, если нет универсальности, значит должно быть выше качество. У котлиновского let нет универсальности, при этом оно и качеством ниже чем шарповский аналог.
> я понял что ему не только нужно чтобы выполнялся метод если очередная переменная нул, а чтобы дальнейшие
Так перечитай. Я тоже не правильно понял, ему нужно выполнить действие, если переменная null, т. е. заменить:
if (var1 == null) method1(); if (var2 == null) method2(); if (var3 == null) method1();
>>1846250 для любителей web forms сделали razor pages А вообще ASP.NET Core MVC он как и тысячи ROR-подобных фреймворков - разобрался в общем устройстве одного и вкатится в другие (даже на других языках) просто, ведь понятно что где лежит и зачем
>>1846262 >В инструменте ценится универсальности у меня молотком плохо шурупы закручиваются. только заколачиваются и потом не выковырять. Выходит молоток говно? )
>если переменная null, т. е. заменить: признаю. он запутал меня этим if((string1 ?? int2?? string3 ?? double4?? string5 ?? string6) == null)
>>1846264 >у меня молотком Вторую часть манямирок отказался воспринимать? >если нет универсальности, значит должно быть выше качество выполнения задачи, чем у более универсального инструмента.
>>1846263 >для любителей web forms Я не любитель, а застрявший в этой технологии из-за места работы. Несколько лет поддерживавал древний проект, теперь приходится срочно переучиваться на самое новое, что есть в .Net по части вэба. А это, насколько мне известно, Core MVC.
>>1846288 В том и дело, что не выполняет var?.let не выполнится если var == null, а ему как раз нужно чтобы выполнился если var == null и не выполнился, если иначе.
>>1846226 > всё то что ему нужно - если переменная null, то ничего не делаем, если у неё значение, то выполняем метод Выполняем метод всегда, а у метода в начале if (argument == null) return; Всё гениальное - просто.
>>1846343 Во-первых. >Я тоже не правильно понял, ему нужно выполнить действие, если переменная null Во-вторых >у метода в начале if (argument == null) return; Хуевое решение, потому что условия могут поменяться для каких-то определенных переменных, либо в каких-то случая понадобится проверка на что-то еще, тогда тебе придётся пилить костыль, либо переписывать уже существующий код.
void ExecuteForNonNulls(params Tuple<object?, Action> foo){ foreach(var (obj, action) in foo){ if (obj!=null)... ] } и вызов ExecuteForNonNulls( (var1, Action1), //а можно и лямбду если параметры есть (var2, Action2), (var3, Action3) )
>>1846273 Не, самое новое - это Blazor и gRPC. Вот где придётся полностью переучиваться :) Razor Pages тоже новее Core MVC. Ещё нынче принято "котлеты отдельно, мухи отдельно". Пишешь API, а морду делаешь на всяких Vue/React/Angular. Но я бы Blazor выбрал.
>>1846415 >Razor Pages тоже новее Core MVC. для любителей web forms создан или для простых случаев. Так то он хуже чем MVC. >Но я бы Blazor выбрал. каждой задаче свой... а задачи бывают разные.
Посоветуйте плес че написать на микросервисах для резюме. Я чет понятия не имею, что может написать один человек, джун, чтобы для этого пригодились микросервисы.
Алсо, можете плес пояснить что я делаю не так? В резюме кратко описал все свои пет проекты, основные проблемы с которыми в них столкнулся и что из них изучил/ что в них юзал. Но ссылок на исходники кидал только для одного проекталан, для двух, но второй не на шарпе, да и в нем я не овнер, просто сделал всю архитектуру и большинство коммитов. другие проекты уж слишком говнокодисты, чтобы я ими на гитхабе хвастался В этом ли проблема? Кинул резюме уже на две вакансии, а меня по-просту проигнорили, даже на собес не позвали.
Стену текста никто читать не будет, особенно связанную с пет-проектами. Резюме читает не программист, а человек из отдела кадров знания которого весьма поверхностны, поэтому ему в хуй не уперлось читать твои истории и тем более смотреть что там на гитхабе.
>В этом ли проблема? Откуда нам знать? Мы твоего резюме не видели.
>>>1846448 > че написать на микросервисах для резюме Напиши систему управления авиаперелетами. Чтобы все чин по чину, сервисы для просчетов маршрутов, сервисы определения по оптимизации закупок топлива, сервисы для составления отчетностей и т.д. При этом следи чтобы все по солиду было и соблюдай DRY. Про тесты не забудь. Все должно собираться одним кликом и сразу деплоиться куда скажут. > что я делаю не так? Вангую много текста, мало тегов. Надо наоборот как раз. Тебя на собес позовет хрюша, а не тимлид или кто-то из тех кто шарит. Хрюша, это как тупой гугл, она просто видит ключевые слова и зовет на собес тех кто подходит. Гитхабы и прочее уже будут на собесе смотреть, если конторе интересно, обычно ограничатся разговором что тебе интересно, что делал, что умеешь, если не совсем мудаком покажешься и будет своя система управления авиаперелетами - возьмут.
>>1846466 >object? object по определению нулабелен, поэтому "?" излишен, разницы нет. >впрочем, нет разницы, работать будет Работать будет, но медленнее и с большим потреблением памяти, т. е. не без разницы.
>>1846473 >object по определению нулабелен, поэтому "?" излишен, разницы нет. все реф типы нулабельны по определению, а ? пишем, чтобы подчеркнуть факт нулабельности для анализатора.
>т. е. не без разницы. я к тому, что упаковка не влияет на работоспособность. А разница в потреблении памяти и прочем - так она во всем. Хочешь скорость - пиши 100 этажные if и за каждым боксингом следи. Хочешь меньше писать - жертвуй.
правда тут жертв то....немного боксинга (переменных то несколько...хотя можно в цикле ага да), но только на значимых типах, коих может не быть. да и делегат еще аллокацию сделает
всё. хватит. всем срочно писать как в GO - простыни ручного говнокода. Нахер сахар. Только соль
>>1846478 > пиши 100 этажные if и за каждым боксингом следи Только что загуглил боксинг. Возможно я понимаю неправильно, но боксинг это упаковка переменной в object и она у нас появилась только после того, как мы всем тредом начали от 100-этажных if-ов уходить. Не?
>>1846478 >а ? пишем, чтобы подчеркнуть факт нулабельности для анализатора. Какого анализатора? Нормальная IDE тебе предупреждение выдаст и попросит удалить лишний символ.
> Хочешь меньше писать - жертвуй. Так жертвовать и не надо, для того чтобы не жертвовать придумали обобщения.
>>1846483 боксинг появился из-за каста к object значимого типа. Если у тебя не высоконагруженный код не парь мозг. Больше проблем от того, что тип теряется и если тебе нужно его передавать в делегат, то придется обратно кастовать и хоть это работоспособно но выглядит ущербно.
>>1846488 >Нормальная IDE тебе предупреждение выдаст и попросит удалить лишний символ. значит Visual Studio плохая IDE (скрин зри). зопесал.
>Так жертвовать и не надо, для того чтобы не жертвовать придумали обобщения. есть такое, но баланс "короче if/оверхед" не такой хороший. И я бы выбрал if, чем множественный вызов обобщенного метода.
>>1846470 >Напиши систему управления авиаперелетами. Звучит конечно круто, но проблема та же, что и с бд лабами в универе - я понятия не имею, как на самом деле авиаперелеты устроены. И я уверен, что закупки авиатоплива на миллионы долларов для кучи лайнеров устроены гораздо сложнее, чем я могу представить. Хотя, ты натолкнул меня на мысль сделать свой аналог убера - вполне реалистичный стартап, который способен реализовать один программист. Хз правда, как на сервисы разделить точно будет сервис для клиента, сервис для таксиста и мб сервис для поиска оптимальных путей, да и в андроид разработку я не очень хочу вкатываться. >Вангую много текста, мало тегов. Надо наоборот как раз. Тебя на собес позовет хрюша, а не тимлид или кто-то из тех кто шарит. Ок. Вырежу почти все из "опыта", и удвою колличество скиллов., говоря даже о том, в чем не шарю. Надеюсь, проактит. Спасибо за ответ, анон.
>>1846501 >значит Visual Studio плохая IDE (скрин зри). зопесал. Вычеркивай. > И я бы выбрал if, чем множественный вызов обобщенного метода. А потом переписывал бы код, когда проверки перестали ограничиваться одним if-ом. Либо когда в if нужно добавить еще какое-либо условие.
>>1846523 >Вычеркивай. ты не используешь <Nullable>enable</Nullable> ? ты мазохист? али старообрядец? Надеюсь на неткоре хоть пересядешь)
>когда проверки перестали ограничиваться одним if-ом. тогда и обобщенный метод не поможет. да и в обоих случаях можно запилить Predicate<bool> но читабельность от этого не вырастет а переписывать СТОЛЬКО ЖЕ
>>1846520 >гораздо сложнее, чем я могу представить так и есть. неважно сколько у тебя опыта программисткого за плечами, но если ты не понимаешь тему, которую нужно закодить, то считай, что ты джун
Лучше опиши технологии с которыми сталкивался и как их использовал. Будет много и честно. А один хер все на собеседовании будет выясняться
>>1846527 >ты не используешь <Nullable>enable</Nullable> ? Нет, я ведь не восторженная макака, которая тащит всё новое в код, независимо от пользы. >старообрядец Когда по умолчанию будет enable, тогда и приходи. >тогда и обобщенный метод не поможет. Создаешь метод-расширение ExecuteIfNull<T>(this T value, Action action), в нём у тебя будут все нужные проверки, код который использует его не будет меняться если нужно будет сделать дополнительную проверку.
>>1846548 > независимо от пользы. NRE, та которую назвали ошибкой на сколько там долларов, бесполезна так и думал ) >Когда по умолчанию будет enable он не может так быть. это вам не котлин, где это с самого начало и как положено. Тут это новая фича и включать по дефолту анализатор, когда весь написанный до этого код, не следует этим правилам - никто небудет
>код который использует его не будет меняться если нужно будет сделать дополнительную проверку как это не будет если будет если мне нужно будет вместо if(val!=null) сделать if(val!=null && val !="foo") то что обжект метод, что этот обобщенный сразу пойдут лесом. В предикатный метод ExecuteIfNull<T>(this T value, Predicate<T, bool> pred, Action action) еще можно добавить проверку, но сам такой метод не сильно лучше голого if (даже хуже)
access = new Access.Application(); access.OpenCurrentDatabase(@"bd.accdb", true, null); string ret = access.Run("func", myarg); access.Quit();
(но блин, оно только для .net framework. Для .core нихрена, нет рабочей Interop... Хотя решение тоже нашел, руками вписать ссылку на com либу в .csproj (скопировав из проекта на нетфреймворке)
Меня не устраивает юнити. Потому я хочу сделать свой движок без фатальных недостатков этого самого юнити, правда, наверное, ограничившись исключительно 2д. Так вот, есть ли что-то про архитектуры кроссплтформенных решений? Ну, скажем, я представляю чего мне нужно в конечном итоге получить с точки зрения пользователя движка и под винду я точно знаю как это сделать, а вот как сделать так чтобы оно на линуксе, и андроиде, как минимум, работало одинаково - уже нет. Я ради примера смотрел исходники всяких SDL/SFML(да-да, С/С++, но оно действительно кроссплатформенно), и там все выглядело примерно так: Вот мы зафигачили дефайнов затем прошлись #ifdef, там подключили под одним и тем же именем разные файлики с конкретной платформой и дальше фигачим. Так вот, как я понимаю в шарпе такой подход не будет работать, банально потому что тут препроцессорные директивы не делают таких вот крутых штук. А как тогда? Делаем разные реализации для каждой платформы(допустим обработку работы клаивиатуры), они имплементируют один интерфейс(допустим IUserInputProvider), а при настройке контейнера таки проверяем #IF где мы там запущены и запихиваем это в контейнер, ну а дальше просто фигачим на интерфейсах? Или как? Или что? Довольно сумбурно получилось, просто не имел опыта с написанием кроссплатформенного кода, обычно выбирал всегда то на чем мне нужно и фигачил.
Почему это тут спрашиваю? Очевидно же - буду делать на шарпике.
>>1845286 >GetHuinyaWithZalupa() А если у меня не две сущности, а 15, или мне нужно чтобы сущности из нав. свойств вернулись с каким-то нав. свойством определенном в них? Прикольный выйдет метод GetHuinyaWithZalupaWithPizdaWithAnusWithGovno().
Чем больше погружаюсь в эту тему, тем более сомнительно этот паттерн выглядит.
>>1836747 А если в результате этой вашей рефлексии, проявляется детерминированность алгоритмики психики, которую можно автоматизировать и захардкодить кодингом кодерским?