Главная Юзердоски Каталог Трекер NSFW Настройки

Программирование

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 1073 93 177
C# .net 9 release дотнета тред #59 /csharp/ Аноним # OP 22/12/24 Вск 18:03:02 3347352 1
image.png 170Кб, 500x471
500x471
Предновогодний тред про лучший язык!

Приятного общения ИТТ.
Главные темы - IReadOnlyList, Enum и BackingField

1. Ресурсы:
https://dotnet.microsoft.com/learn
https://ru.stackoverflow.com/a/416585/422180
https://metanit.com
https://professorweb.ru

2. С# для веб
https://docs.microsoft.com/ru-ru/aspnet/core

3. C# для десктопа
https://docs.microsoft.com/ru-ru/dotnet/desktop

4. С# для игр
https://ru.stackoverflow.com/a/609901/422180

5. С# для мобильной разработки
https://docs.microsoft.com/ru-ru/dotnet/maui

6. Годные ютуб-каналы
https://www.youtube.com/c/CODEBLOG
https://www.youtube.com/c/AndreyShyrokoriadov
https://www.youtube.com/c/DevJungles
https://www.youtube.com/user/Shmachilin

Шапка: https://pastebin.com/HT7Hi6FD
Прошлый тред: >>3332445 (OP)
Аноним 22/12/24 Вск 19:59:29 3347427 2
Возникла задача заделать софтину работающую с девайсом по езернет-сети. Никаких ИП, никаких ТЦП, там по верх езернета поднят свой протокол, вот по этому протоколу и нужно общаться. Всё что удалось нагуглить это
https://learn.microsoft.com/ru-ru/dotnet/fundamentals/networking/overview
Но там опять таки тисипи/айпи. А мне, я так понимаю, нужно ловить все входящие езернет-кдры и из них выбирать нужные, и также в эзернет отправлять согласно тому протоколу свои кадры. Повторюсь, никаких тисипи/айпи.
И судя из того что на тему работы напрямую с зернетом на C# ничего негуглится, у меня, как у ньюфажины, складывается впечатление что это и не возможно. Подтвердите что это так или скажите где смотреть.
Аноним 22/12/24 Вск 23:33:26 3347595 3
Аноним 22/12/24 Вск 23:34:52 3347596 4
OSIModelv1.svg.png 83Кб, 440x518
440x518
Аноним 23/12/24 Пнд 00:03:06 3347606 5
>>3347595
Может быть. Сказать что хотел?

>>3347596
Вот мне канальный уровень нужен.
Аноним 23/12/24 Пнд 00:34:19 3347618 6
>>3347606
Тебе нужен С/С++ и уровень ядра. Сишарп - это про асинхронные пуки в кафку.
Аноним 23/12/24 Пнд 01:24:10 3347637 7
>>3347618
То есть никак? Хорошо. Тогда если на С/С++ скомпилировать библиотеку и потом её подключить к C#, прокатит?
Аноним 23/12/24 Пнд 01:35:33 3347641 8
Взял дипломную тему по автоматизированному кросс-бразузерному тестированию сайтов.
Нужна интеграция с CI/CD
Запись видео сценариев

Не знаю, как к нему подступиться. Думаю выбрать Selenium и использовать какую-то программу, например ffmpeg. Но боюсь, что могут возникнуть проблемы с linux и докером.
Можете подсказать, что лучше использовать?
Аноним 23/12/24 Пнд 02:47:50 3347651 9
>>3347641
Для диплома надо было брать самую простую тему, а не интересную. Потом 20 раз пожалеешь.
Аноним 23/12/24 Пнд 09:00:51 3347713 10
>>3347651
Если он планирует дальше учиться надо брать какую-то тему для дальнейшего развития в кандидатскую.
Аноним 23/12/24 Пнд 09:28:10 3347724 11
>>3347713
>Если он планирует дальше учиться надо брать какую-то тему для дальнейшего развития в кандидатскую.
Ну и будет такое же дрочево с дипломом. Плюс к моменту завершения кандидатской тема моржет оказаться уже неактуальной (особенно в айти-то). Для кандидатской нужна тема с реальной работы решающая реальную проблему. Ну или решающая реальную теоретическую проблему, но это тоже не уровень диплома.
Аноним 23/12/24 Пнд 10:10:49 3347769 12
>>3347724
>ема моржет оказаться уже неактуальной (особенно в айти-то).
Как вы заебали. Ваши фреймворки не имеют блять никакого отношения к Информационым технологиям.
Если твоя кандидатка это не говно из допы её актуальность будет ВЕЧНОЙ. Кнут пишет свой труд уже 60 лет и первый том актуален как никогда. В ИТ за 70 лет ничего особо не изменилось в базовых вещах. Все твои фреймворки и подходы типо ДДД и аджаил созданы 30 лет назад.
Аноним 23/12/24 Пнд 11:05:55 3347812 13
>>3347651
Так у него браузерный кал, самое дно в программинге.

>>3347713
Проиграл, а дохтурскую ты на пехепе собрался защищать?
Аноним 23/12/24 Пнд 17:15:55 3348240 14
>>3347427
Максимум что можно сделать из шарпа это дергать winapi для такой низкоуровневой работы с сетью но это такой жуткий гемор что лучше сразу плюсы брать, ибо дергание winapi из шарпа - это пиздец. Из вариков только WinDivert смотреть, мб там есть врапперы для шарпа, но наверняка не знаю Если речь идет о Линуксе то вообще пизда, лучше сразу брать scapy из пистона
Аноним 23/12/24 Пнд 17:18:30 3348245 15
>>3347641
Братан, ты пиздец взял, целый microsoft свой playwright 3 года дрочит чтобы сайты кросс-платформенно тестить а ты решил соло это для диплома сделать? Лучше ебашь CRUD-ы если еще можешь поменять тему или в целях работы заранее уточни что-то чтобы снизить градус амбициозности
Аноним 23/12/24 Пнд 18:20:59 3348321 16
>>3348245
он может сделать обвязку над playwright
как над тем же селениумом.
никто не ожидает что он свой селениум напишет
а что то типа "я нажал на кнопку оно тестируется, красиво отчеты рисует"
Аноним 23/12/24 Пнд 20:06:42 3348392 17
>>3348240
>Если речь идет о Линуксе
О винде.

>WinDivert смотреть
Я нуфаг и даже не представляю что это такое.

>дергать winapi для такой низкоуровневой работы с сетью но это такой жуткий гемор что лучше сразу плюсы брать
Поясни кратко в чём там принципиальная разница .
Аноним 23/12/24 Пнд 20:40:52 3348413 18
>>3347651
>>3348245
Ну из выбора у меня была унылая машинка на притоне и друга муть, завязанная на математике и робототехнике. Это самая интересная тема была и близкая ко мне.

У меня вопрос, как все это сделать. Как записывать экран? Я знаю, что в Selenium можно делать скриншоты headless браузера. Думаю, склеить их вместе, например, с помощью ffmpeg. Как это будет работать в github actions, докере и етс? Просто не хочу, чтобы случилось так, чтобы весь труд пошел насмарку, когда выяснится, что это не работает где-то.
Аноним 23/12/24 Пнд 23:55:55 3348543 19
>>3348413
А нахуя ты это спрашиваешь у продуктовых разработчиков, которые с этой поебенью целыми днями ебутся?

Я вот пришел сюда твою мамку хуесосить и отдыхать душой, а не за студентов дипломы писать.
Аноним 24/12/24 Втр 15:00:54 3349004 20
>>3348413
Посмотри сорцы Selenoid, они такое делают. Вроде как стримят видео из браузера подключённого к виртуальному дисплею (или из самого виртуального дисплея я хз) через ffmpeg.
Аноним 24/12/24 Втр 21:57:55 3349352 21
right.jpg 283Кб, 960x1280
960x1280
Сегодня я понял, что FluentAssertions - полная хуйня, потому что
либо они не срабатывают на вопросительном знаке:

some?.object.Should().Be(false);

либо стреляют с NRE, что не информативно.

И вообще, все эти билдеры и закосы под английский язык нахожу уебанскими.
Аноним 24/12/24 Втр 22:12:51 3349366 22
>>3347352 (OP)
ну чисто по приколу, так для себя кидает человек ресурсов, что такого?
программирование Аноним 24/12/24 Втр 22:16:12 3349369 23
/pr/
Подскажите, только начинаю изучать программирование, думаю связаться и начать "Kotlin", норм варик?

pls pls
Аноним 24/12/24 Втр 22:18:48 3349374 24
Аноним 24/12/24 Втр 22:23:19 3349378 25
>>3349352
>И вообще, все эти билдеры и закосы под английский язык нахожу уебанскими.
вот вот. программисту проще читать код (банально мозг отформатирован на чтение именно кода), а эта англоязычная херота она для тестеров придумана, а не для нормальных людей
Аноним 24/12/24 Втр 22:54:21 3349394 26
>>3349352
Пользуйся Nunit там нормальный синтаксис.
Аноним 25/12/24 Срд 08:18:32 3349464 27
>>3349369

Если тебе нужен выразительный язык - смотри в сторону котлина.
Всё остальное есть в c#
Аноним 25/12/24 Срд 08:23:47 3349467 28
>>3349394
NUnit мне не нравится. Это комбайн всё-в-одном. А еще в нём нельзя управлять жизненным циклом самого теста/тестового класса/сборки.

В принципе сейчас в этом плане xunit единственный, который по нормальному устроен. Он модульный и состояние по умолчанию не переносит из теста в тест
Аноним 25/12/24 Срд 10:04:25 3349502 29
Есть кто blazor использует? Я заебался с ним только начав знакомиться.
Беда с обновлением компонентов(server):
Есть две ссылки на одну страницу, в ссылке передается Id. Компонент отображает таблицу с данными, отбирая их по Id. Если тыкать по разным ссылкам с другими компонентами, чередуя их - то компонент таблицы обновляется нормально. Но если открывать один компонент таблицы по ссылкам с разными Id, то отображается только таблица, которую открыли первой. Повторное открытие страницы с компонентом с другим Id не обновляет данные. statehaschanged не помогает.
Аноним 25/12/24 Срд 11:46:11 3349547 30
>>3349467
Тут еще какой то tunit рождается
Аноним 25/12/24 Срд 20:13:49 3349934 31
изображение.png 133Кб, 1076x560
1076x560
>>3349547

Смотрю я этот TUnit

> Property injection
нахуя?

> Dependency injection support
нахуя?

> Native AOT / Trimmed Single File application support
ну тысячах на ста юнит тестах, вероятно, будет полезно

> Parallel by default, with mechanisms ...
круто, конечно, но это для очень высокоранговых разрабов

> Hooks before and after
годная штука по идее, но, вероятно, если есть необходимость гонять хуки - то тесты спроектированы неправильно

Ну шустрее немного. Но ввиду того, что они поддерживают только восьмой фреймворк - без вариантов, пересаживаться на него не имеет большого смысла
Аноним 25/12/24 Срд 20:35:22 3349946 32
>>3349934
> только восьмой фреймворк - без вариантов
плохо быть тобой.

а зачем это всё - узнаем по отзывам когда оно выйдет. без тулинга оно не нужно. Да и релиза первого не было.
Аноним 26/12/24 Чтв 00:28:27 3350073 33
>>3347427
И какая адресация, чел? Ты понимаешь, что IP - это считай базовая база, поверх которой все остальное работает?
Или у тебя взаимодействие в духе - вот провод подключен я по нему нулики-единицы гоняю?
Если есть адресация - значит будет IP - стек. А значит берешь сокет, ручками собираешь пакет и погнали.
Если ее нет - у тебя будет ком-порт и ты пишешь-читаешь как из файла.

Все. Не тупи.
Аноним 26/12/24 Чтв 01:06:08 3350081 34
>>3350073
>Ты понимаешь, что IP - это считай базовая база, поверх которой все остальное работает?
Вот так да, даже и такие бывают...
Малыш, ты что-нибудь про МАС-адреса слышал?
Аноним 26/12/24 Чтв 02:17:47 3350088 35
>>3350081
Ой, ну не начинай.
Я на 146% уверен, что чел просто неправильно понял задачу и потому лезет куда не надо.
Учитывая мой опыт работы с заводами - там Ethernet'ом называют свою библиотеку для работы с тем самым TCP/UDP, дальше оборачивают это в свой HDLC-лайк или Modbus-лайк протокол. Никто там не лезет в залупу. Потому что надо железки продавать, а не изобретать велосипеды. А железки сейчас покупают из принципа - я тут самые дешевые купил, там еще дешевые купил они должны все подружиться, если это не дружится с остальным нормально - идет нахуй.

А когда в нее лезут - зовут тех кто шарит, а не чела, который такие вопросы задает.

Если ему реально надо - пусть берет питон, у питона дохуя пакетов для работы хоть с маком, хоть с хуяком.
Аноним 26/12/24 Чтв 08:07:44 3350142 36
>>3349946
> плохо быть тобой.

Я свои проекты перевёл на восьмёрку этой осенью, с версии 3.1.
Но мои коллеги буквально клали хуй около 4 лет на обновление. И таких проектов много.

Буквально люди не понимают, что "окончание поддержки" фреймворка - это буквально окончание поддержки в том числе и сообществом.

Знаю проект, который не хотели обновлять с фреймворка 4.5.2 и даже попытались "переписать на микросервисы". Правда, получилась хуйня и они просто понаписали кучу синхронизаторов вокруг старого проекта, и в итоге всё равно пришлось переписывать основной проект на дотнеткор+докер.

А разработчикам tunit ничего не мешает буквально выставить 2 числа в проекте, чтобы подарить возможность его использовать значительному количеству разрабов.

А один факт поддержки только последнего фреймворка как бы намекает на уровень авторов.
Аноним 26/12/24 Чтв 08:23:15 3350154 37
>>3349547
И как вишенка на торте, разработчик tunit повторил ошибку nunit и вкорячил уродливые nunit-подобные ассёрты непосредственно в запускалку тестов.

Это чтобы разрабы сразу подключили fluent-assertions, передрались и друг за другом начали ассерты переписывать на "правильные".

Я чем больше смотрю на внутреннюю архитектуру xunit - тем больше охуеваю с того, какой он классный. Взять хоть IDisposable
Аноним 26/12/24 Чтв 08:37:50 3350162 38
>>3349547
И ещё одна вишенка на торте, там утырок не поддерживает не асинхронные тесты.

Там даже ассёрты возвращают таски

[Test]
public async Task MyTest()
{
await Assert.That(1).IsEqualTo(3);
}
Аноним 26/12/24 Чтв 10:24:29 3350209 39
>>3349394
Да говно там из пальца высосанное, которое только долбоёбам заходит, которые кичатся знанием английского кичатся.

price.Assert()!.Is!.That()?.Equals["to"]?(1);

Я помню, был один еблан, он думал, что код на английском языке пишет. Ему ответили, что он на c# пишет.
Аноним 26/12/24 Чтв 12:24:13 3350290 40
>>3350142
>А один факт поддержки только последнего фреймворка как бы намекает на уровень авторов.
намекает на желание быть "на острие", а не поддерживать устаревшее говно.
как пользователь софта - я бы осудил, как программист - понимаю, ибо сам такой.
Аноним 26/12/24 Чтв 12:32:55 3350294 41
>>3350154
хз о чем ты. tunit, похоже, имеет только fluent подобные assert
и обычных не имеет (что лично для меня плохо - я пишу код, а не свитки)
Аноним 26/12/24 Чтв 14:43:58 3350358 42
>>3350294

Я о том, что nunit включает в себя ассёрты с очень специфичным синтаксисом, и отключить их невозможно.

Большая часть из них объявлены устаревшими и поэтому там постоянно ассерты переписывают

А ещё часто на проекты с нюнит с тестами подклчюают дополнительные тестовые фреймворки и начинается переписывание переписанного
Аноним 26/12/24 Чтв 20:20:08 3350583 43
>>3350358
Вполне нормальный синтаксис.
Аноним 26/12/24 Чтв 21:22:37 3350603 44
>>3349369
Норм варик в 2к25 это F#. Попробуй, сразу влюбишься.
Аноним 26/12/24 Чтв 21:30:25 3350609 45
>>3350603
так то он, как и все, любит ДЕНЕЖКУ
а в твоем фшарпе где денежка то
Аноним 26/12/24 Чтв 21:31:52 3350610 46
>>3350603
Литерали говно без задач. F# появился 20 лет назад и до сих пор нигде не используется.
Аноним 26/12/24 Чтв 21:34:46 3350611 47
>>3350610
ну сам язык не говно, а весьма более менее, хотя "они убили немерле, сволочи"
но применить его на фоне существования шарпа мало кому есть куда ибо мало кто понимает зачем оно куда и почему
и проще написать на шарпе, чем изучать новые материи.

таким образом - без задач.
Аноним 26/12/24 Чтв 21:40:30 3350614 48
>>3350609
Кто деньги ищет, тот всегда найдет. В F# есть ДУША! Душа .NET платформы. На этом языке можно писать большие проекты без ебли с нагромождённостью C#. Ну, а деньги последуют.
Аноним 26/12/24 Чтв 21:41:22 3350615 49
>>3350611
>немерле
Лол, кто-то еще помнит эту хуйню. На рсдн полтора шиза топили за эту польскую поделку, форсили патерн матчинг как не в себя. В итоге матч добавили в сишарп, оказалось нечитаемым говном, которое никто не использует.
Аноним 26/12/24 Чтв 21:43:44 3350616 50
>>3350615
лол. сила немерле это макросы. они вон даже в расте есть
в шарпе же "ну поззззяяязяяя ну добавьте это хотя бы через сто тысяч миллионов лет"
Аноним 26/12/24 Чтв 21:45:35 3350617 51
>>3350616
Макросы не нужны. С ними каждый проект превращается в непонятную хуйню.
Аноним 26/12/24 Чтв 21:48:57 3350619 52
>>3350617
сделать так и без макросов можно. тот же кодоген хотя бы тоже работает неявно.
так что не нужно искать черную кошку
Аноним 26/12/24 Чтв 21:56:05 3350620 53
А есть для шарпа нормальный линтер в виде расширения для VS Code?
Такой, как для Python - чтобы на лету проверял форматирование на соответствие стандарту и подсвечивал проблемные места с рекомендацией по исправлению.
Аноним 26/12/24 Чтв 22:26:19 3350639 54
>>3350620
там только одна рекомендация будет - НЕ ИСПОЛЬЗУЙ VSCODE
Аноним 26/12/24 Чтв 22:35:23 3350647 55
>>3350583
>Вполне нормальный синтаксис.

согласен?.Вполне()?.Нормальный(x => Синтаксис())!
Аноним 26/12/24 Чтв 22:53:52 3350660 56
>>3350639
Дохера всего, но этим никто не пользуется. В дотнете нет таких проблем
Аноним 26/12/24 Чтв 23:45:23 3350674 57
Аноним 27/12/24 Птн 00:31:40 3350679 58
>>3350620
Два варианта.
- .editorconfig
- stylecop

Можно как вместе использовать, так и по отдельности.
Аноним 27/12/24 Птн 01:31:34 3350686 59
Вот есть у меня класс
class myass
{
public char A;
}

Мне нужно создать динамический список из таких объектов. Чтобы самому с этим делом не ебаться использую коллекцию
List<myass> Asses = new List<myass>();
Могу добавлять туда объекты, всё пучком.

А теперь мне надо создать динамический список таких коллекций. Хотелось бы для этого тоже использовать коллекцию. Как бы коллекция коллекций. И вот тут я чёт затупил, на уровне синтаксиса не понимаю как это должно выглядеть. Вкиньте пример хоть что ли.
Аноним 27/12/24 Птн 02:08:44 3350687 60
>>3350686

var listOfListOfMyAsses = new List<List<myass>>();
listOfListOfMyAsses.Add(new()); // добавляем первый список
listOfListOfMyAsses.Add(new()); // добавляем второй список

var list1 = listOfListOfMyAsses[0]; // первый список
var list2 = listOfListOfMyAsses[1]; // второй список
Аноним 27/12/24 Птн 02:12:00 3350688 61
{40F00034-4969-[...].png 23Кб, 495x429
495x429
Чет неделю пописал на плюсах и теперь мне стандартный формат шарпов не нравится.

Хочу вот так теперь в шарпах.

Как сделать, чтобы студия по умолчанию так же делала?
Аноним 27/12/24 Птн 03:01:34 3350694 62
>>3350688
Я знаю, но не скажу. Не хочу чтобы мудацкий K&R кто-нибудь тащил в мои шарпы.
Аноним 27/12/24 Птн 03:18:40 3350696 63
Как K&R сделать я и сам знаю.

Мне хочется чтобы не было отступов внутри неймспейса и класса. Плюс - модификаторы доступа на отдельной строке.

Типа вот так:

namsepace Foo;

class Bar {

public
void Buzz();

}
Аноним 27/12/24 Птн 06:29:36 3350714 64
>>3350614
>Душа .NET платформы

Автомаппер?
Аноним 27/12/24 Птн 06:50:33 3350718 65
>>3350620
>линтер

Именно линтера нет, у нас другие категории. >>3350696
>Мне хочется чтобы не было отступов внутри неймспейса и класса.

внутри неймспейса и так не будет отступа, если использовать file scoped namespace

внутри класса - боюсь, тебе придётся самом поискать, как это делается. Мы обычно пользуемся настройками по умолчанию
Аноним 27/12/24 Птн 21:50:32 3351199 66
Аноним 27/12/24 Птн 22:04:32 3351203 67
>>3351199
Про WinAPI лучше спрашивать у байтоёбов, они в соседнем треде сидят.
Аноним 28/12/24 Суб 02:07:29 3351278 68
>>3350088
>А когда в нее лезут - зовут тех кто шарит, а не чела, который такие вопросы задает.
Анон, у тебя какое-то неправильное впечатление по отношению к заводам сложилось. Да и не завод у меня, а КБ военка Никто никого звать не будет, если темой занимаешься ты - тебя и заставят пердолится, и будут заставлять пока не сделаешь. Так что у меня вариантов нет.

>>3351203
Это в котором?
Аноним 28/12/24 Суб 04:05:33 3351284 69
изображение.png 867Кб, 1280x607
1280x607
>>3350687
Не работает твоя хуита. В частности подчёркивает пустые скобочки, и ещё чо-то было, не помню.
listOfListOfMyAsses.Add(new());

В общем сам разобрался. Учись салага.
Аноним 28/12/24 Суб 07:10:26 3351308 70
>>3350688
Ебать ты пидармот вырвиглазный. Все блять пятнисто-цветастое как приход нарколыги под лсд или очко павлина. Не удивительно чты тупорылый овощ ведь в башке насрано вместо мозгов нахуй!
Аноним 28/12/24 Суб 10:28:42 3351391 71
>>3351284

Вы учите друг друга, как объекти в список добавлять?

А ничего, что в 2к24 году такой хуйнёй никто не занимается, потому что это ответственность автомаппера?
Аноним 28/12/24 Суб 10:32:51 3351398 72
>>3351308
Как же заебали нейросети в тематике.
Аноним 28/12/24 Суб 12:02:27 3351478 73
>>3347352 (OP)
Хочу укатиться к вам с пыха, есть смысл влезать в эту авантюру или по деньгам/вакансиям шарпа все сейчас плохо в рф? Меня заебло перекатываться по проектам с написанием магазинов дилд для ИП Оленян.
Аноним 28/12/24 Суб 12:37:39 3351503 74
>>3351478
Иди в бигтех, там толкового пхпшника с радостью заберут и переучат на говноланг
Зачем тебе полумертвый шарп
Аноним 28/12/24 Суб 13:04:10 3351524 75
>>3351503

хуй знает, что более полумертво, голэнг или c#. Сейчас все пишут на автомаппере
Аноним 28/12/24 Суб 13:11:08 3351526 76
>>3351503
Почему полумертвый? Я наоборот только пару лет назад стал о нем слышать в среде разработчиков. До этого дотнет считался зашкваром для пользователей виндовса.
Аноним 28/12/24 Суб 13:20:49 3351535 77
>>3351526

Когда дотнет считался зашкваром?

Дотнет хорош тем, что он не категоричный. В нём нет отбитых установок и мантр типо "ВСЁ ДОЛЖНО ДЕЛАТЬСЯ ОДНИМ СПОСОБОМ" или "ВСЁ ЕСТЬ ФУНЦИЯ" или "ООП ЭТО ВЫСШЕЕ ЗЛО" и прочей хуеты наподобие "БАТАРЕЙКИ ВКЛЮЧЕНЫ"

Дотнет в этом плане просто предоставляет языки и возможности писать программы в каком хочешь стиле. Он ненавязчивый и приятный. За то его и любим
Аноним 28/12/24 Суб 16:14:12 3351663 78
>>3351391
>автомаппера
Не слышал о таком.
Аноним 28/12/24 Суб 16:27:30 3351677 79
>>3351535
На дотнете не осталось чистого бекенда, один сраный фулстек у нищебродов.
Аноним 28/12/24 Суб 17:26:58 3351730 80
>>3351677

я для тебя пустое место, что-ли
Аноним 28/12/24 Суб 17:57:18 3351756 81
>>3351677
Ну как в родном пхп!
Аноним 28/12/24 Суб 18:16:43 3351769 82
>>3351756
Щас бы в 2025 доверять каждому спорному утверждению на дваче.
Аноним 28/12/24 Суб 18:31:22 3351783 83
1650181920745.png 28Кб, 377x649
377x649
>>3349467
> NUnit мне не нравится.
Что именно не нравится?

Xunit уже научился разбивать именованные кейсы по разным элементам в обозревателе тестов?
Даже количество тестов не умеет считать, пиздец убожество.
Аноним 28/12/24 Суб 20:34:49 3351887 84
>>3351783
>Что именно не нравится?

NUnit громоздкий комбайн, там раз в 40 больше кода, чем в xUnit и MSTest вместе взятых. Куча неймспейсов, всякого мусора. Он некорректно обрабатывает жизненный цикл тестов, переиспользует поля класса и это не настраивается.

Ну и в NUnit уебанский нетипобезопасный синтаксис ассертов, который выкинуть нельзя, и работает он как говно.

Кто будет писать вот такое:
Assert.That(1. Is().IsGreaterThan(x => x.To(1))).
если можно писать вот такое:
True(x>2);

Почитай исходный код обоих. XUnit писался после NUnit, с учётом всех ошибок. Он внутри крайне логичен и прост. NUnit же выглядит как переусложнённое хуй пойми что.
Аноним 28/12/24 Суб 20:49:25 3351897 85
Ненавижу юнит-тесты!
Аноним 29/12/24 Вск 08:52:06 3352045 86
>>3351897
Чего их ненавидеть-то?

Мы с одним разрабом поспорили. Он сказал, что запилит сложную фичу только по тестам, ни разу не запуская проект.

И ведь не обманул, чертяка.

Я с тех пор начал относиться к тестам по другома. Просто представь, что результат отладки проекта остаётся лежать внутри проекта и автоматически запустится когда какой-то хуй полезет в код уже реализованной фичи.
Аноним 29/12/24 Вск 09:03:08 3352052 87
>>3352045
Потому что тесты вынуждают его думать.
Аноним 29/12/24 Вск 11:37:20 3352103 88
>>3351897
Люблю юниты, но когда они в меру. Ненавижу дрочь на процент покрытия.
Аноним 29/12/24 Вск 12:02:40 3352113 89
1625739660668.png 77Кб, 1022x456
1022x456
>>3351887

> Assert.That(1. Is().IsGreaterThan(x => x.To(1))).
Франкентшейн какой-то, ты маМорозко ошибся. Смотри пик.

Как по мне, такой синтаксис охуенный и удобный. В таком варианте у тебя не возникает мысли каким аргументом идёт expected, а каким actual.

> Он некорректно обрабатывает жизненный цикл тестов
Приведи пример, что ты под этим имеешь ввиду.
Аноним 29/12/24 Вск 12:55:59 3352150 90
>>3352113
>Франкентшейн какой-то, ты маМорозко ошибся. Смотри пик.

Вижу на скрине уродливый набор слов

> В таком варианте у тебя не возникает мысли каким аргументом идёт expected, а каким actual

Всем похуй. В нормальных фреймворках давно уже забили хyй на это педантичное недоразумение и поменяли слова actual/expected на left/right.

Но NUNIT-выблядки высосали из пальца проблему, понаписали каких-то синтаксисов на несколько десятков тысяч строк и в приказном порядке задепрекейтили всё, что было ранее.

Чего там удобного - я xyй знает. Только почему-то в других фреймворках это "удобство" не стали затаскивать.

> Он некорректно обрабатывает жизненный цикл тестов

Там за каким-то xyем сделали общее состояние тестов внутри одного класса. А надо чтобы настраивалось. Скопипастили с java [Setup] и [TearDown], которые в принципе ничего не меняют, но сами по себе уродливое говно, вызванное ограничениями джавы и внутренним устройством Junit.

Когда я увидел, как в xUnit не стали eбать мозг атрибутами и сделали конструктор-диспоз, а так же возможность полностью настраивать жизненный цикл тестов - я на nunit стал смотреть просто как на какое-то недоразумение. xUnit разработали с чистого листа те же самыe люди, что делали NUnit, кстати, не забывай.
Аноним 29/12/24 Вск 15:23:13 3352230 91
>>3352113
>Как по мне, такой синтаксис охуенный и удобный
как по тебе
эти (модульные) тесты пишут и ЧИТАЮТ программисты
а программистам привычно читать именно код, а не вот эту англохрень.

еще можно понять всякие ShouldBe в названиях тестов потому что их могут гонять всякие гуманитарии, но в теле модульного теста это нахрен не нужно
Аноним 29/12/24 Вск 18:33:26 3352394 92
Гайс, кто-нибудь работал на проектах с DDD? В прошлом треде вот не очень хорошо отозвались о нём, а может, у кого-нибудь и положительный опыт есть?
Аноним 29/12/24 Вск 19:19:29 3352434 93
>>3352394

> кто-нибудь работал на проектах с DDD?

С какой его частью?
Аноним 29/12/24 Вск 20:20:16 3352485 94
>>3352394
Как всегда же
достоинства для одного является недостатком для другого.
Вопрос выбора стула во всей красе.

пример медиатр
киллер-фича - нет прямой связи между отправителем и подписчиком
фатальный недостаток - нет прямой связи между отправителем и подписчиком

таким образом речь говорящего о плюсах будет всегда предвзята. (впрочем и о минусах тоже)
Аноним 29/12/24 Вск 20:30:55 3352491 95
>>3352485

не буду сегодня мандеть про медиатр, всё-таки новый год на носу
Аноним 29/12/24 Вск 20:49:52 3352511 96
>>3352045
>Мы с одним разрабом поспорили. Он сказал, что запилит сложную фичу только по тестам, ни разу не запуская проект.
>
>И ведь не обманул, чертяка.
Только наебал он тебя похоже. Либо он глубоко в контексте был либо результат был тупо подогнан к тестам (чем собственно и плох TDD).
Аноним 29/12/24 Вск 21:26:37 3352547 97
>>3352045
Тесты и есть запуск проекта
Аноним 29/12/24 Вск 22:20:56 3352582 98
1653983096579.png 199Кб, 1104x1368
1104x1368
>>3352150

> Всем похуй. В нормальных фреймворках давно уже забили хyй на это педантичное недоразумение и поменяли слова actual/expected на left/right.
В нормальных это в каких?

В xunit сигнатура метода выглядит так:
void Equal<T>(T expected, T actual)

И если перепутать, то в обозревателе тестов они тоже будут перепутаны. Так что не пизди.

> Скопипастили с java [Setup] и [TearDown],
Ну и чем это на практике отличается? Ничем.
Пикрелейтед.
Концептуально xunit с конструктором и дизпозом выглядит интереснее, но на практике разницы нет.

> Но NUNIT-выблядки высосали
Это поэтому сейчас в 3-ий xunit, спустя 10+ лет высосали TestContext? Ведь изначально НИНУЖНО.

А так, что в nunit, что в xunit косяков предостаточно.
Но косяки xunit для меня критичнее, поэтому использую nunit.
3 версию xunit надо погонять детальнее, но сомневаюсь, что там что-то глобально изменилось.


>>3352230

> еще можно понять всякие ShouldBe в названиях тестов потому что их могут гонять всякие гуманитарии, но в теле модульного теста это нахрен не нужно
И? В чём претензия-то? У nunit тесты прекрасно читаются, даже гуманитарии могут. Смотри:

Утверждение.Что(результат, Действительно.БольшеЧем(2));

А вот залупа в виде ShouldBe не нужна.
Аноним 29/12/24 Вск 23:00:30 3352598 99
>>3352582
>Утверждение.Что(результат, Действительно.БольшеЧем(2));
Идиотизм от гуманитариев
Почему ты код в самом приложении так не пишешь?
Не торопись, подумай)
Аноним 29/12/24 Вск 23:25:02 3352601 100
>>3352598

> Почему ты код в самом приложении так не пишешь?
Ты дурачок? Не путай мягкое с тёплым.
Аноним 29/12/24 Вск 23:41:57 3352607 101
>>3352601
не путаю. мы говорим про модульные тесты, тело которых пишет и читает программист
Так зачем он изворачивается для гуманитариев?
чтобы гуманитарий мог прочитать Assert?
Простите, а остальная часть, там где получается expected, она тоже написана в стиле "Я.Люблю.Тупо.Выражаться"? или все же там банальный код, который гуманитарий не поймет? А если еще и фикстуру сюда добавить, то вообще у него мозг взорвется

А поэтому вопрос тот же - ЗАЧЕМ ЗАМЕНЯТЬ КОД СЛОВЕСНОЙ ЕБАЛОЙ? и почему у защитника этого говна подорвался пукан когда его спросили "а почему ты везде так не пишешь?"?
Аноним 30/12/24 Пнд 05:03:34 3352661 102
>>3352601
Ты дурачок. Нормальные люди пишут Assert.GreaterThan(result,2) и оставляют комментарий почему 2, если там что-то неочевидно. Долбоебы срут монадами в стиле Утверждение.Что(результат, Действительно.БольшеЧем(2)) ведь это же необычно выглядит мам ну смотри.
Аноним 30/12/24 Пнд 08:11:16 3352708 103
>>3352582
>Концептуально xunit с конструктором и дизпозом выглядит интереснее, но на практике разницы нет.

https://xunit.net/docs/shared-context . Разница на практике огромная. Как в NUnit делать, чтобы у тест-класса не было общего состояния в полях? никак?
Аноним 30/12/24 Пнд 08:21:39 3352709 104
>>3352582
>И если перепутать

нихуя принципиально не сломается

> А так, что в nunit, что в xunit косяков предостаточно

я не понял, какие там косяки, xunit простой как палка, там буквально нечему ломаться

> В чём претензия-то?

ВТом.Утвержедение(говно, Оно.Как.Читается(говно))
Аноним 30/12/24 Пнд 08:26:12 3352710 105
>>3352661
> Нормальные люди
> оставляют комментарий

комментарии надо удалять сразу как видишь и по пальцам палочкой бить дурачкам, которые их пытаются поддерживать
Аноним 30/12/24 Пнд 08:32:45 3352712 106
>>3352661
>Assert.GreaterThan(result,2)

Проверить что 2 больше чем результат или наоборот?

Просто импортируешь статический класс Assert и пишешь:

True(result > 2);
Equal(2, result)


И всё. Два метода по сути нужно, всё остальное - это происки дьявола
Аноним 30/12/24 Пнд 09:00:45 3352723 107
>>3352712
Коллекции как проверить?
Аноним 30/12/24 Пнд 09:28:22 3352744 108
>>3352723

На элегантном английском

Assert.That(collection, It.That.Is().Should(have => have.At(x => x.Least).Single().Equal[item]))
Аноним 30/12/24 Пнд 09:48:46 3352753 109
Аноним 30/12/24 Пнд 10:38:07 3352778 110
Аноним 30/12/24 Пнд 11:36:15 3352802 111
>>3347352 (OP)
Сори за офтоп, но:

Я новенький, не ебите.
Вкатываюсь в айтишечку, в моем городе вакансий очень мало, поэтому если меня развернут то выбора особо не будет.
Поэтому спрашиваю - насколько типичны дистанционные собесы у контор в мск для людей без опыта?

Т.е. во первых насколько распространены дистанционные собесы вообще?

во вторых какие шансы есть у чела без опыта на релокейт в мск?
Аноним 30/12/24 Пнд 11:54:29 3352818 112
>>3352607
Ебать у тебя каша в голове. Доебался до гуманитариев. Основной разговор-то не об этом был.

>>3352708
Разница настолько огромна, что у них примеры из документации не комплируются.
> stack.Dispose();

> нихуя принципиально не сломается
Ты точно в этом уверен? Сходи проверь, а потом пизди.

> ВТом.Утвержедение(говно, Оно.Как.Читается(говно))
Разница в синтаксисе, не более.
Кому-то хуи, а кому-то пики.

>>3352744
Неиронично охуенно выглядит))))
Аноним 30/12/24 Пнд 12:06:37 3352828 113
>>3352818
>Разница в синтаксисе, не более.

В xUnit библиотека ассёртов опциональна. Подключай какую хочешь, хоть nunit.

В NUnit ассёрты встроены. Половина из них задепрекейчана

Вот и вся разница
Аноним 30/12/24 Пнд 12:13:14 3352834 114
>>3352828
> В xUnit библиотека ассёртов опциональна. Подключай какую хочешь, хоть nunit.
Это каким образом? оО

> В NUnit ассёрты встроены. Половина из них задепрекейчана
У них 2 модели: классическая и на основе ограничений. С 3 версии модель ограничений стала основной. Так что не понимаю о чём ты.
https://docs.nunit.org/articles/nunit/writing-tests/assertions/assertions.html
Аноним 30/12/24 Пнд 12:25:38 3352837 115
>>3352818
>Доебался до гуманитариев
а до кого еще.
все эти should be пошли из за того, что кое кто, кто не программист, решил читать красивые английские фразочки в интеграционном тестировании

Так что к НАЗВАНИЯМ тестов не придируюсь. Придираюсь к телу теста, где КОДЕР пишет поэму непонятно нахера
ты так и не ответил ЗАЧЕМ.

>Неиронично охуенно выглядит))))
ааа, все понятно. ебанутая (с)
тогда вопрос снят
Аноним 30/12/24 Пнд 14:47:00 3352928 116
2024123013h41m3[...].png 146Кб, 742x873
742x873
>>3352834
https://xunit.net/docs/nuget-packages

То, что в xUnit библиотека ассертов опциональна - это в документации описано.

Подключить нютиновские ассерты теоретически можно, но придётся затащить весь комбайн. Это никому не нужно, потому что nunit уебанский
Аноним 30/12/24 Пнд 15:04:41 3352938 117
>>3352834
>У них 2 модели: классическая и на основе ограничений. С 3 версии модель ограничений стала основной. Так что не понимаю о чём ты.

У них одна модель. Та, которая называется классической моделью объявлена устаревшей и не поддерживается. Вместе с тем весь пользовательский код (в моём случае 50 000 тестов) так же объявлен устаревшим.

Собственно это и есть основная моча в ебало разработчикам нюнит. Они не спросив пользователей в обязательном порядке перевели всё на новые весьма специфические ассерты наплевав на существующий код.

А МНЕ ОНИ НЕ НРАВЯТСЯ, Я СЧИТАЮ, ЧТО У НИХ СИНТАКСИС ГОВНО
Аноним 30/12/24 Пнд 15:53:21 3352963 118
>>3352802
>Т.е. во первых насколько распространены дистанционные собесы вообще?
Сейчас почти все собесы удаленные. Даже там где работа фултайм офис, скрининг и первый тех.собес проводят удаленно.
Собесы в офисе первый признак говноконторы.

Новичков тоже собесят преимущественно удаленно, для них сложно просто на собес попасть как таковой.

>>3352802
>во вторых какие шансы есть у чела без опыта на релокейт в мск?
Практически никаких. Только удаленка. Хотя в теории ты можешь устроиться сначала удаленно и потом своим ходом двинуть в МСК, но з.п. тебе все равно оставят региональную.
Аноним 30/12/24 Пнд 15:57:36 3352966 119
>>3352837
>все эти should be пошли из за того, что кое кто, кто не программист, решил читать красивые английские фразочки в интеграционном тестировании
У нас бизнес-аналитик постоянно лезет в код и пытается писать по нему спеки. Ему кучу раз говорили, чтобы не маялся хуйней и тупо смотрел в сваггер где есть вся документация и модели, но ему все равно надо повыебываться и показать, как он умеет читать код.
Аноним 30/12/24 Пнд 16:42:38 3353001 120
>>3352966
>бизнес-аналитик
Это же специальный гуманитарий, который описание тасок в джире заполняет, зачем ему вообще лезть в код?
Аноним 30/12/24 Пнд 16:58:24 3353011 121
>>3353001
Очевидно же, что они путают системного и бизнес-аналитика.
Аноним 30/12/24 Пнд 17:50:54 3353043 122
>>3353001
>>3353011
Он типа универсальный и бизнес и системный. Только вот даже системному аналитику нехуй в коде делать.
Аноним 30/12/24 Пнд 22:34:32 3353179 123
>>3352938
Кто вам долбоебам мешал постепенно от них уйти? Каждый раз как код правишь штук 100 быстро передалал.
Я за день 2000 тестов менял.
Аноним 30/12/24 Пнд 22:42:48 3353185 124
>>3353179
>Кто вам долбоебам мешал постепенно от них уйти?

единогласно решили уйти на xUnit. Так дешевле. Никто не выразил желания переписывать тесты на новый мусорный синтаксис
Аноним 31/12/24 Втр 03:23:22 3353238 125
>>3352963
Спасибо, очень полезная инфа.
А насколько охотно берут на удаленку без опыта? Там требования для джуна без опыта будут выше?
Аноним 31/12/24 Втр 04:24:26 3353245 126
>>3353238
Без опыта вообще не берут. Напиши в резюме два года опыта в местном ООО SmartBestWay, никто же не проверит.
Аноним 31/12/24 Втр 05:47:32 3353248 127
>>3353238
>Там требования для джуна без опыта будут выше?
Требования сейчас для всех заоблачные. Даже если ты сам Хейльсберг, то с очень большой вероятностью завалишь собес на .net разраба.

>А насколько охотно берут на удаленку без опыта?
Очень неохотно. Только если прям очень хорошо себя на собесе покажешь, но обычно без опыта до него трудно добраться.

Нарабатывай опыт любыми путями. Если учишься в шараге - корешиьс с преподами и выбивай у них любую практику. Или кооперируйся с сокурсниками и мутите вместе какие-нибудь сервисы (да хоть сраных чат ботов).

Еще могу дать совет помимо джуновских вакансий откликаться на мидловые, особенное если там есть открытое тестовое (естественно его нужно сделать качественно перед откликом). Просто по опыту на такие позиции людей ищут с меньшим количеством выебонов на собесе, т.к. тут нужны просто рабочие лошадки которые будут работать работу. У меня так товарищ с околонулевым опытом залетел (понятно, что зарплата у него по итогу была джуновской, а не той что в вакансии указана для мидла)

Можешь еще завести себе карманную it-херочку, тогда будешь в курсе всех вакансий и возможность, чтобы твое резюме подсунули на них в обход фильтров.
Аноним 31/12/24 Втр 06:16:47 3353251 128
>>3353248
Спасибо.
То есть нужно почти 100% иметь в резюме личные проекты? Я в целом так и думал, но свободного времени у меня полно так что это не проблема.


>it-херочку
Это что?
Аноним 31/12/24 Втр 06:17:28 3353252 129
>>3353245
>>3353248
То есть опыт не обязательно должен быть рабочим и личные проекты это тоже опыт, да?
Аноним 31/12/24 Втр 06:34:33 3353254 130
>>3353252
>То есть опыт не обязательно должен быть рабочим и личные проекты это тоже опыт, да?
Есть, типа, две категории. Просто опыт разработки и опыт коммерческой разработки. Первое это любая разработка хоть чего и хоть как. Вторая подразумевает разработку чего-то, что потом будет продано за деньги или принесет любую другую прибыль. Там уже учитывается работа в комманде, знание различных этапов разработки, понятия сроков, задач, всякой хуйни вроде водопадов, agile, scrum и т.д.

Если в вакансии прямо написано, что-нибдуь вроде "опыт коммерческой разработки N лет", то вероятнее всего там ты со своими личными проектами не проканаешь. Только если это будет, что-то крутое попенсорсное, что хотя бы в своей нише известно.

>>3353251
>Это что?
It-рекрутер.

>>3353251
>То есть нужно почти 100% иметь в резюме личные проекты?
Голое резюме сейчас нафиг никому не нужно, т.к. за время любой учебы можно спокойно сделать пару-тройку проектов, либо поучаствовать в какой-либо практике. Если у тебя такого нет, то значит ты во время учебы хуи пинал и будешь не интересен.
Аноним 31/12/24 Втр 12:13:56 3353347 131
>>3353254
>Вторая подразумевает разработку чего-то, что потом будет продано за деньги или принесет любую другую прибыль.

Могу ли я сказать что у меня есть опыт коммерческой разработки если я писал людям за деньги их софт по заказу?

Регеры, парсеры, тг боты, еще всякая хуйня типо получение писем с почт по imap, парсинг и отправка данных по апи в ии. Твиттор и CRM не писал.
Аноним 31/12/24 Втр 15:40:38 3353502 132
>>3353347
>Твиттор и CRM не писал.

кто CRM не писал, тот красот не видал
Аноним 01/01/25 Срд 07:32:58 3353827 133
Сегодня я точно начну учить бэкенд, и к концу года стану уважаемым бэкендером и забуду про впф как про страшный сон.
Аноним 01/01/25 Срд 08:01:01 3353828 134
>>3353827
Бэкендером быть охуенно. Никакой тебе верстки, никакого js, никакого ебучего xaml-а. Выкинул наружу api и похуй кто там и как с ним трахаться будет. А сам сидишь, спокойно возишься с мидлварями и хостед сервисами и довольно урчишь.
Аноним 01/01/25 Срд 08:12:10 3353830 135
>>3353828
Ты бекендер на Weather forecast? ☁️
Аноним 01/01/25 Срд 08:37:20 3353832 136
>>3353830
За что уплочено, то и наговнокожено.
Аноним 02/01/25 Чтв 19:11:59 3354527 137
Аноним 02/01/25 Чтв 19:14:06 3354529 138
Аноним 02/01/25 Чтв 19:24:10 3354540 139
>>3354527
>contosopizza
Бля, у меня на руках полураспиленный монолит, его обратно собирать или дальше распиливать?
Аноним 02/01/25 Чтв 20:40:24 3354613 140
Вспомнил основные аргументы в пользу использования библиотеки Медиатр. Они долбоёбские и высосаны из глобуса. Мне один челик сказал, что ему стрёмно, что в конструкторе много зависимостей. Другой говорил, что он может бехевиоры делать (читай, валидаторы).
Еще говорили, что не хотят регистрации прописывать в контейнере.

Я сейчас работаю на проекте без медиатра. Пишу команды и квери, всё резолвится само, регистрации через атрибуты. В конструкторах контроллеров до 4-5 зависимостей.

Проблем не вижу. Код получается классный.

Неужели медиатр-бляди не решают никаких конкретных проблем?
Аноним 02/01/25 Чтв 22:28:36 3354666 141
Реквестирую срочный короткий гайд по нет мауи.
Взял проект небольшой, 1 страничное приложение с полем ввода и кнопкой. А я хуй знает маиу хуи я только сосольки и блазор писал.
Нужно за сутки научится.
Аноним 02/01/25 Чтв 22:29:23 3354667 142
Аноним 02/01/25 Чтв 22:32:04 3354668 143
>>3354667
>>3354666
Сорян не уточнил.
Виндовс.
Собственно там манипуляции с текстом проводить. Ниче сложного, но так как я не шарю нихуя в этих все формочках авалониях хуениях и прочем впф нет мауи то для меня немножко сложно.
Аноним 02/01/25 Чтв 22:33:03 3354669 144
>>3354668
я знаю. поэтому повторяю свой совет чтобы увидеть насколько все эти мауи ХРЕНЬ
Аноним 02/01/25 Чтв 22:38:45 3354672 145
>>3354669
Спорить не буду.
Но у меня нет времени.
Надо выбрать что то максимально простое.
На слуху авалония. Мб её?
Аноним 02/01/25 Чтв 22:39:43 3354673 146
>>3354672
Д - ДЛЯ ЧЕГООООООО???????
Аноним 02/01/25 Чтв 22:42:23 3354674 147
>>3354672
Ну тогда бери винформы, проще винформ нет вообще ничего. Ты же ставишь во главу угла простоту, а не удобство, расширяемость, поддерживаемость.
Аноним 02/01/25 Чтв 22:42:26 3354675 148
image.png 13Кб, 552x183
552x183
Во это вот че ваще такое?
Темый лес ппц
Аноним 02/01/25 Чтв 22:43:53 3354678 149
>>3354675
Это то, что учится намного дольше суток.
Аноним 02/01/25 Чтв 22:45:27 3354679 150
>проще винформ
Не ну не так шоб прям на столько проще.
Я все таки из актуальных хочу выбрать чо то
Аноним 02/01/25 Чтв 22:46:11 3354680 151
>>3354674
WPF и то проще лол
сам слез с формсов на впф и как то попробовал на формсах - нихрена не помню и не вижу смысол
Аноним 02/01/25 Чтв 23:28:50 3354709 152
>>3354613
Медиатор бляди выросли из блядей для которых CS это страшно и вообще книги дядюшки Боба они старые, а в ИТ все меняется часто.

Они искрене верят что под зависимостями имеют ввиду именно прямые зависимости поэтому для них медиатор их устраняет. Было у тебя 8 внедрений стало 3, значит устранили 5 зависимостей.
Я пытался объяснить что зависимости просто стали неявные и скрытые от глаз, те 5 классов все ещё влияют на работу текущего, мне даже сказали что понимают это но так КОД ЧИЩЕ.

Это буквально такой новый сорт разрабов, что ужасно от тренни до лидов, им главное что зависимостей нет явно или код выглядит чисто.
Оже самое кстати модные ДДД. Я сижу на архетектурной секции и задаю логичный вопрос. Почему сущность сама управляет сменой статусов модели. На что получаю ответ что это же агрегат. Дальше я наваливаю логичные варианты
1) кто в таком случае должен писать историю смены статуса(в широком смысле вообще вести аудит)
2) если понадобится сделать уведомления. Это тоже будет делать агрегат? Вообще кто должен обслуживать всю попутную логику которая будет сверху?
3) эта хуйня явным образом нарушает S принцип. Entity это класс ответственный за представление данных реляционой базы в объектах предметной области. Возложение на него ответственности за управление статусной моделью сущности это нарушение SOLID.
В результате диспута меня мягко послали нахуй сказав что я просто неверно толкую термин responsibility, а первые два пункта не находятся в скоупе задач на спринт.

Вообще Аджайл раковая опухоль ИТ. Нам необходимо сделать грузовик, все знают что нужен 8 осный грузовик с бочкой для бензина, но мы начинаем не с создания рамы ходовой, а с багги. Так можно сразу показать результаты. Да клиенту нахуй не нужен ни багги, ни кабриолет, ни микроавтобус, ни грузовик с 4 колесами. Ему нужен бензовоз блять с 8 осями и нет не надо ему ничего показывать. Надо чтобы он подписался под ТЗ на бензовоз с 8 осями и если посреди монтажа кузова ему захочется сделать 10 осей мы шлем его нахуй и требуем ещё денег и увеличиваем сроки.
Аноним 03/01/25 Птн 00:00:56 3354735 153
>>3354613
>Неужели медиатр-бляди не решают никаких конкретных проблем?
Не решают. Это просто модьненько и позволяет тонкие контроллеры писать. Ну и да, в пайплайн можно всякое добавить еще вроде валидации. Удобно.

Но ничего такого нового и прямо необходимого медиатр не дает.
Аноним 03/01/25 Птн 00:04:29 3354740 154
>>3354709
>Entity это класс ответственный за представление данных реляционой базы в объектах предметной области.
Ентити это не агрегат. Агрегат это толстая модель. То что там в реальном мире все все путают это не проблема ДДД.
Аноним 03/01/25 Птн 00:32:58 3354757 155
>>3354740
Проблема ддд в том что плюсы НЕ перевешивают бубен вприсядку
Аноним 03/01/25 Птн 01:24:10 3354786 156
>>3354673
Либо волчара напиздевший в резюме. Либо (судя по тому что 3-е января) студент, проебавший сессию и договорившийся с преподом на последний шанс досдать лабы после праздников.
Аноним 03/01/25 Птн 02:08:33 3354795 157
>>3354786
Яж сказал что взял проект на 50$
Аноним 03/01/25 Птн 04:56:11 3354821 158
>>3354795
Ну тогда ты демпингатор/штрейхбрекер хуев.
Это даже хорошо. Вот сейчас обосрешься и на одного заказчика понимающего, что за "дешево и быстро" можно получить только хуй на блюде станет больше.
Аноним 03/01/25 Птн 08:53:29 3354861 159
>>3354740
>То что там в реальном мире все все путают это не проблема ДДД.

Да, блядь, никто не может до конца понять DDD до конца. Это не не то протокол, не то секта. Там ключевых понятий более двадцати, думаешь про одно, 19 в уме надо держать.

Я не видел ни одного разработчика, который до конца бы понимал DDD. А те, кто понимают - не практикуют разработку, а ведут курсы на нереалистичных примерах.

Я, если честно, предпочёл бы калёным железом эти слова выжечь и начать всё с начала.
Аноним 03/01/25 Птн 08:54:53 3354862 160
>>3354669
> немножко сложно.

иди пейфон программируй
Аноним 03/01/25 Птн 09:01:49 3354867 161
>>3354861
Если все не могут правильно понять какую-то штуку, то это не проблема людей, а проблема штуки.
У ДДД есть очевидная проблема. Все эти понятия слишком размытые и зависят от каких-то эфимерных признаков.
Аноним 03/01/25 Птн 09:04:19 3354868 162
>>3354709
>КОД ЧИЩЕ.

Ебать, там такой говнокодище получается, где хуй разберёт где начало, а где конец.

>>3354735
> позволяет тонкие контроллеры писать
а что-то мешает писать тонкие контроллеры без медиатора?

> модненько
нихуя себе модненько, 10 лет назад таким говном занимались, зачем повторять ошибки - хз.
Аноним 03/01/25 Птн 09:06:35 3354871 163
>>3354675
> мычание долбоёба

иди пиши на пиши на пейфоне. Дотнет оставь, это не для таких ебланов как ты
Аноним 03/01/25 Птн 13:01:23 3354993 164
>>3354821
50$ за одностраничное приложение с 2мя полями ввода и 1 кнопкой и логикой на очистку файла это дёшево?
Аноним 03/01/25 Птн 13:46:34 3355017 165
>>3354993
Да. Это 3-4 часа работы или примерно 12 баксов в час. 2100 в месяц
Аноним 03/01/25 Птн 14:24:55 3355038 166
>>3355017
>Это 3-4 часа работы
Ну у меня было бы так если бы это было консолька
А так это 2 дня)
>2100 в месяц
Ну 2к в месяц, мало штоли?
Ну это ты бы взял 150$ но не всего могут выбирать че и за сколько им делать.
Аноним 03/01/25 Птн 15:12:20 3355077 167
>>3355038
Ты просто выбрал неверный путь "работать за деньги"
Аноним 03/01/25 Птн 15:24:07 3355088 168
>>3355077
А какой путь верный? Работать за идею?
Аноним 03/01/25 Птн 16:51:43 3355162 169
>>3355088
нет. просто получать деньги
а код писать для души
Аноним 03/01/25 Птн 16:56:29 3355165 170
>>3355162
>а код писать для души
Я бы рад конечно так делать но для этого надо сначала получать деньги)
Аноним 03/01/25 Птн 20:18:50 3355281 171
>>3355165
дык получай. на заводе вон токарей не хватает.
а фриланс зло
Аноним 03/01/25 Птн 21:30:05 3355318 172
>>3355281
>>3355281
Дак я и получаю но тебя это не устраивает.
Аноним 03/01/25 Птн 22:10:51 3355332 173
>>3355318
Меня? Это ты жалуешься что не просто денежку дают, а и код писать надо
Аноним 03/01/25 Птн 23:58:18 3355365 174
>>3354757
Вообще говоря да - так и есть. В ддд есть интересные концепции, но в целом оно скорее полезно тем, что у тебя должно быть в голове, когда ты пишешь код, а не про сам код.

На деле совсем отдельный домен со всей бизнес логикой нахуй не нужен.
Аноним 04/01/25 Суб 04:28:52 3355445 175
>>3354867
>У ДДД есть очевидная проблема.
Еще одна проблема ДДД, то, что под ней должна быть охуенная аналитика, с четкой и вылизанной спецификацией. Что встречается почти никогда.
Аноним 04/01/25 Суб 04:39:51 3355446 176
>>3354861
>Я, если честно, предпочёл бы калёным железом эти слова выжечь и начать всё с начала.
В 2025 году разработка ушла в облака, там ДДД нахуй не нужен. Пока ты будешь собирать агрегат агрегатов с 20 сервисов шобы было ДДД, конкуренты прокинут джейсончик и зарабортают все деньги. ДДД остался в каких-то древних учетных системах из 90-х, сейчас никто так не пишет.
Аноним 04/01/25 Суб 05:04:56 3355448 177
>>3355446
Ага, выходит, суть облачного подхода в том, чтобы по-быстрому наговнякать приложуху как получится и будь что будет, а учётные системы больше никому не нужны, ведь учитывать надо только количество деняк на карточке.
Аноним 04/01/25 Суб 06:03:49 3355454 178
>>3355448
Суть облачного подхода в распределенных данных и распределенных транзакциях. В ДДД все красиво, пока все данные лежат рядом в одной бесконечной памяти, тогда можно наворачивать агрегаты агрегатов и выделять слои слоев. Как только встает вопрос "кто откатывает транзакцию", ДДД пукает и обмякает.
Аноним 04/01/25 Суб 08:43:17 3355471 179
>>3355446
В рф вообще пользуются местными облаками?
Аноним 04/01/25 Суб 09:27:27 3355481 180
Мда, в шарпохуйне я не могу передать this в базовый конструктор, пиздец...
Аноним 04/01/25 Суб 09:33:14 3355482 181
>>3355471

Яндекс-облаком пользуемся. Его скопипастили с амазона, но у амазона интерфейс делали долбоёбы. После AWS, консоль яндекс кажется каким-то космическим и суперсовременным.
Аноним 04/01/25 Суб 09:37:53 3355484 182
>>3355481
> Мда, в шарпохуйне я не могу передать this в базовый конструктор, пиздец...

Потому что ты долбоёб. Базовый конструктора вызывается раньше чем дочерний. Чего ты там передавать собрался?

Дотнет не для тебя, если ты такие тупые мысли выдаёшь. Иди программируй на пейфоне. Ну или на котлине, если тебе нужен выразительный язык. Но в дотнет не лезь
Аноним 04/01/25 Суб 09:53:12 3355489 183
>>3355481
>передать this в базовый конструктор
Нахуй не нужно.
Ебани protected метод инициализации в базовом классе принимающий нужный объект и сохраняющий его в какойм-нибудь поле. И передавай через него this в конструкторе потомка.
Аноним 04/01/25 Суб 10:17:22 3355496 184
>>3355484
Покажи, где тебя трогали питонисты, а то вижу, что они не дают тебе покоя, весь тред своих протыков вспоминаешь.
Аноним 04/01/25 Суб 11:56:21 3355543 185
>>3355454
>Как только встает вопрос "кто откатывает транзакцию", ДДД пукает и обмякает.
Так в облаках не должно быть транзакции. Необходимо строить систему на основе ассинхроных моделей и сообщений с событиями. Либо иметь единый сервис оркестратор который знает про бизнес процесс и как им управлять.
Аноним 04/01/25 Суб 12:21:15 3355552 186
>>3355543
>Так в облаках не должно быть транзакции. Необходимо строить систему на основе асинхроных моделей и сообщений с событиями.

Это надо угадать как-то или между строк прочитать? А как понять, где заканчивается ДДД и начинаются паттерны микросервисной архитектуры?

> Либо иметь единый сервис оркестратор который знает про бизнес процесс и как им управлять.

Нанять пару архитекторов, чтобы в гамаках лежали и кафку обсуждали.
Аноним 04/01/25 Суб 12:25:00 3355553 187
ДДД ещё очень интересно ложиться на EF который предлагает для оптимизации грузить из БД только внешний ключ, потому что для работы обычно он и нужен.
Аноним 04/01/25 Суб 12:26:37 3355555 188
>>3355552
>Это надо угадать как-то или между строк прочитать? А как понять, где заканчивается ДДД и начинаются паттерны микросервисной архитектуры?
Я вообще противник ДДД и идеи что нужны какие-то агрегаты и объекты которые сами себя меняют.

Моё ИМХО что ДДД вообще противоречит микросервисам.
Аноним 04/01/25 Суб 12:33:48 3355561 189
>>3355555

реально писать микропенисы в функциональном стиле с реббитом и событиями? Я просто пытался много раз понять ДДД - и каждый раз как в первый раз.
Аноним 04/01/25 Суб 12:52:11 3355565 190
>>3355561
Чтобы понять ддд надо внимательно книжку прочитать. ДДД это про взаимодействие архитектора (аналитика) с заказчиком, в целях выработать общее представление о автоматизируемом процессе. Вся суть ддд в универсальном языке, или как в ддд это называется юбиквити лангуаге, который вырабатывается в результате брейншторминга на территории заказчика с его персоналом. Домены это часть этого представления.

Не путай ДДД с луковичными и гексогональными архитетурами. ДДД это не архитектура, которую кодомакак единолично у себя в голове создает. Это средство взаимодействия с заказчиком
Аноним 04/01/25 Суб 12:57:25 3355568 191
Аноним 04/01/25 Суб 13:14:28 3355576 192
>>3355555
Пишу под эпичным постом
Аноним 04/01/25 Суб 14:07:26 3355593 193
>>3355454
>>3355446
Какая-то хуйня.

Суть распределённых транзакций в том, чтобы по максимуму их избегать. Распределённые системы и транзакции нихуя разработку не ускоряют, что за хуйня. Это как раз Вася с монолитом джейсонов накидает быстрее.
Аноним 04/01/25 Суб 14:48:11 3355606 194
>>3355565
Проблема что весь этот язык не работает. Система типов или модулей вообще может не отражать реальные объекты и процессы. Часто бизнес сущности и процессы имеют эмерджентную природу.

Программисты вообще не должны завязываться на модели бизнеса и тем более общаться с заказчиками. В 100% случаев это приведёт к тому что вместо требований получается "скрытое решение" когда заказчик пытается пропихнуть свои идеи реализации.

Задача разработки это моделирование целевых процессов и их автоматизация. При этом то как это происходит может вообще не исходить из бизнеса.
Если делать по ДДД завод машин мы по Комон лэнгвидж и общению с заказчиками будем проектировать антропоморфных работов с развитым ИИ.
Аноним 04/01/25 Суб 16:43:53 3355661 195
>>3355593
Как только у тебя появляется вторая бд, у тебя появляются распределенные транзакции. И ты их никак не избежишь.
Аноним 04/01/25 Суб 17:11:48 3355676 196
в.jpg 11Кб, 466x252
466x252
>>3355565
> Вся суть ддд в...

ну например.

Но смею заметить, что каждый следующий умник рассказывает про DDD что-то своё.

Один пиздит про агрегаты, другой про ограниченные контексты, третиий про события, четвёртый про MediatR и Automapper Да, мне один долбоёб и правда пытался доказать, что DDD это CQRS, который невозможен без медиатра

Может, хватит уже?
Аноним 04/01/25 Суб 17:19:37 3355680 197
>>3355676
Зачем слушать всех если можно эванса открыть и посмотреть. Там в основном вода про менеджмент, а не как писать код
Аноним 04/01/25 Суб 17:20:03 3355681 198
>>3355661
Вообще нет. Не всем бизнес операциям нужна атомарность.
Аноним 04/01/25 Суб 17:37:04 3355687 199
>>3355680
>Зачем слушать всех

Чтобы понимать о чём они говорят. А говорят разное, но слова одни и те же
Аноним 04/01/25 Суб 18:45:09 3355720 200
>>3355661
С чего бы? Наличие необходимости в полной консинстентности данных это проблемы архетуктуры. Ты получается разбил какую-то сущность на разные БД, это ошибка.

Если что-то должно быть сохранено в рамках одной транзакции, то это должно принадлежат одному сервису. Либо ты трясун шизофреник и на самом деле тебе нет нужды производить операцию целиком.
Аноним 04/01/25 Суб 18:45:36 3355721 201
>>3355676
Если что-то можно понять неправильно, значит это хуйня.
Аноним 04/01/25 Суб 20:15:59 3355760 202
>>3355720
О, вы из яндекс маркета!
Аноним 04/01/25 Суб 20:50:16 3355764 203
>>3355760
Чел, ты какую-то хуйню джуновскую пишешь, если ты ещё и автор вот этой хуйни >>3355555 - твоя цена это 70к максимум.
Аноним 04/01/25 Суб 21:03:12 3355766 204
Screenshot20250[...].jpg 84Кб, 1812x941
1812x941
>>3355764
>>3355555 (You) - твоя цена это 70к максимум
Ну поплачь ещё.

ДДД это хуйня из под коня и признак долбоеской организации разработки.
Аноним 04/01/25 Суб 21:48:00 3355788 205
>>3355766
Ну это неудивительно, я видел достаточно таких долбоёбов которых мы увольняли очень быстро.
Аноним 04/01/25 Суб 22:20:03 3355807 206
>>3355788
Тоже не любите ДДД-шников?
Аноним 04/01/25 Суб 22:38:25 3355813 207
Мимопроходил.
Считаю, что ДДД не существует в природе. Каждый понимает под ДДД свое видение разработки, но толком внятно описать его не может. Вообще все эти идеологии, паттерны, методологии, стили и приемы разработки могут называться одинаково, но по факту от проекта к проекту будут представлять из себя разные вещи, а порой и вовсе противоположные по смыслу. Надо приходить на конкретный проект и вникать в него, чтобы понять, что именно там подразумевали под ДДД его авторы. На моем текущем проекте тоже гордо говорят, что у нас ДДД используется, а по сути все ДДД заключается в том, что мы дто, ентити и репозитории кладем не в три папочки, а у каждой сущности есть своя отдельная папочка, где лежат связанные с ней репозитории и ентини. Мне лид затирал, что именно это и есть ДДД по его мнению. А мне в целом похуй, раз это назвали ДДД, то пусть оно и будет так называться у нас на проекте.
Аноним 06/01/25 Пнд 09:52:52 3356430 208
Возможность построить «правильную систему с первого раза» — миф. Вместо этого мы сегодня реализуем текущие потребности, а завтра перерабатываем и расширяем систему для реализации новых потребностей. В этом заключается суть итеративной, пошаговой гибкой разработки. Разработка через тестирование, рефакторинг и полученный в результате их применения чистый код обеспечивают работу этой схемы на уровне кода.

Сижу читаю "Чистый код", охуенная книжка
Аноним 06/01/25 Пнд 10:46:52 3356460 209
>>3356430
Чистый код - это такой сборник разговоров в курилке, где скуфы с 20+ годами опыта обсуждают, как же они заебались. Джунам это непонятно и неактуально.
Аноним 06/01/25 Пнд 14:26:30 3356571 210
>>3356430
>итеративной, пошаговой гибкой разработки
Только это не делает никто.

Задача.
Необходима машина красного цвета.

1) Мы пока сделали МВП в виде велосипеда
2) знаете времени на переделку нет мы взяли два велосипеда и сварили их.
3) долго думали и в итоге вокруг велосипедов сварили каркас кузова
4) вставили двигатель и кпп. Ручка переключения правда находится за спиной водителя поэтому мы сделали тросик и переключение в стиле мотоциклов
5) спустя долгое время мы все же смогли приделать рулевой механизм от настоящего автомобиля
6) доделали кузов приматав его стяжками.

Как это делают нормальные люди.
1)
1.1) вот рама вашего автомобиля и колеса
1.2) вот кузов
2)
2.1) мы установили двигатель, кпп и рулевое управление
2.2) вот кузов уже проходит финальную полировку
2.3) вот отделка салона
3) мы завершили монтаж кузова на раму
4) завершили отделку салона.

В результате итерации не должно быть готово продукта. Невозможно собрать машину чтобы на каждом этапе на ней можно было ездить.
Также невозможно делать качественный код когда от тебя требуется чтобы можно было уже тыкать.

Гибкость это миф. Система всегда будет расчитана на какие-то границы сверх которых выйти нельзя. Всегда будут фичи которые мы будем делать 3 месяца и не можем показать никакой результат кроме "мы работаем".
Если у вас бизнес меняется каждый месяц, то возможно у вас хуевый бизнес и нет никаких тактических и стратегических планов.

И главное. Дураку пол работы не показывают.
Аноним 06/01/25 Пнд 16:16:36 3356735 211
>>3356571
>знаете времени на переделку нет
это у вас нет. А у нормальных людей берется бумажка на увольнение, на ней жирным пишется "технический долг", бумажкой оборачивается кулак и этим кулаком по ебалу тех, у которых что то там горит

А далее либо время появляется, либо бумажка разворачивается на подпись
Аноним 06/01/25 Пнд 16:26:48 3356742 212
>>3356735
Бумажка ВСЕГДА разворачивается на подпись. После подписания нанимают тех, кто не будет отказываться делать задачи по непонятным кабану причинам. Кабану похуй, работа и так и так стоит, деньги платятся непонятно за что.
Аноним 06/01/25 Пнд 16:29:19 3356745 213
>>3356742
> кто не будет отказываться делать задачи по непонятным кабану причинам
тебе то что. ведь не тебе потом трахаться с этим франкенштейном и при этом быть виноватым.
А если причины, как ты говоришь, нипанимат, то и жпо настанет этому проекту (примеров множество), но это же будет не твоя проблема
Аноним 06/01/25 Пнд 16:39:41 3356750 214
>>3356742
если сложная жизненная ситуация, ну тянешь резину до жпо
но попутно ищешь другую работу
но не стоит так доводить себя. Рецепт успеха прост - всегда будь богатым и красивым.

ну а если без шуток, то когда начинается ебала с техническим долгом и никто этого не понимает, то значит настала пора походить за забором
хотя...там всегда полезно бродить. Это ведь только кажется что "да кому я нужен - вон сколько за забором ходят". Ходят конечно, но не все нормальные.
Аноним 06/01/25 Пнд 16:47:42 3356755 215
>>3354709
>Я сижу на архетектурной секции и задаю логичный вопрос. Почему сущность сама управляет сменой статусов модели. На что получаю ответ что это же агрегат

Вас шарпистов на собесах ебут такой хуйней? Это даже хуже литкода, ей-богу. Хорошо, что я укатился в Go и у нас на все эти паттерны-хуяттерны кладется хуй. Но зато многопоточку спрашивают всегда и везде.
Аноним 06/01/25 Пнд 16:59:04 3356763 216
>>3356755
а причем тут вообще шарп к подобным темам.
в любом развитом языке (а не примитиве для написания микросервисов) возникают вопросы архитектуры

По очень простой причине - язык позволяет писать БОЛЬШИЕ проекты.
а удел го - микросервисы.
Аноним 06/01/25 Пнд 17:18:24 3356774 217
>>3356755
> Хорошо, что я укатился в Go
Ну и за какими ссаными тряпками ты приполз в этот тред?
Аноним 06/01/25 Пнд 17:20:31 3356778 218
>>3356755
В сишарпе тоже. Это какой-то шиз навсегда застрял в 1995 году, потерялся среди абстрактных фабрик.
Аноним 06/01/25 Пнд 19:28:12 3356860 219
>>3356571
>Необходима машина красного цвета.
>Мы пока сделали МВП в виде велосипеда

Нахуя? переделывай
Аноним 06/01/25 Пнд 19:38:05 3356877 220
>>3356755
> Вас шарпистов на собесах ебут такой хуйней?

шарпистов - нет. медиатро-автомапперисты ебут друг-дружку тамими вопросами. Это низшая каста опущеных, с ним запрещено даже джунам и юнити-девам разговаривать
Аноним 06/01/25 Пнд 21:51:37 3356943 221
>>3356755
Я не про собеседование. Я сумел убедить людей что нужно проводить секцию планирования архетуктуры. Ажно 3ч выделили.
Аноним 06/01/25 Пнд 22:34:40 3356964 222
>>3356943
Хз о чем ты. Но ты молодец
В чем то убедилт- в менеджеры тебя. И пиздить розгами
Аноним 06/01/25 Пнд 22:50:49 3356966 223
>>3356964
У нас задача проходит этап
1) оценка разрабом. Очень верхнеуровнево.
2) потом все собираемся на планирование и даём оценку. Также пишем небольшие детали.
ВСЁ задача идёт в спринт.

Я смог убедить всех что для некоторых задач необходимо прям 2-3 дня выделить на архитектуру, продумывание как оно потом может развиваться и заложить это. Ну короче страшное нарушение принципа Аджайл "хуяк хуяк и на демо".
Вот в результате таких предложений родился этап когда разрабы обсуждают результаты проектирования.
Аноним 07/01/25 Втр 06:10:54 3357034 224
>>3356966
Иными словами, добавил больше созвонов богу созвонов. Управленец от бога, хуле. Умные люди придумали аджайл, но всегда найдется шиз с окр, которому надо все заранее распланировать на сто лет вперед.
Аноним 07/01/25 Втр 09:47:09 3357082 225
>>3357034
>Умные люди придумали аджайл,
И выкинули такие не нужные вещи как
1) архетуктура проекта
2) проектировачное решение
3) планирование проекта
4) документация
5) чёткие требования на разработку
6) критерии приёмки

Аджаил и гибкость миф. Нахуй не нужно иметь возможность каждые 2 недели менять проект. Если заказчик не может нормально сформулировать цели фичи или описать её это сложная и большая проблема, скорее всего он сам не понимает что ему необходимо и нужно не бежать код писать, а разобраться в его ситуации и предложить решение.

Я не понимаю почему мы не должны заложить в проект фичу из роад мапа на год. То что она будет в ноябре не значит что мы не должны ещё в феврале по другому делать фичи с прицелом что в ноябре мы планируем делать то-то.

С началом практики архетуктуры и проектирования мои коллеги сами говорят что им стало проще понимать наши сервисы, какие изменения вносятся, как это влияет на код. Также оказалось очень удобно иметь полную схему классов и сервисного взаимодействия которые я сделал и актуализировал все бизнес процессы в конфле до актуальных.
По итогам мы завели 30 задач на исправление дефектов. Аналитки нашли ошибки в работе системы при анализе диаграмм и схем процессов. QA говорят мне спасибо за наличие полной документации по взаимодействиям сервисов и даже за диаграммы классов и БД.
Даже скорость разработки немного выросла, стабильно 4СП в спринт. Ведь теперь мы при планирование смотрим схемы и архетуктуру и сразу видим некоторые проблемы.

Аджаил не работает когда тебе нужно долго и методично делать крупный проект. Я вообще не вижу никакой необходимости в гибкости, я вижу проблемы с коммуникациях когда аналитик бежит исполнять любые пуки заказчика не пытаясь выяснить у него реальные необходимости бизнеса.
Аноним 07/01/25 Втр 10:11:19 3357086 226
>>3357082
Вангую у вас попильный госпроект, от которого заказчик не может отказаться. В условиях конкурентного рынка вас бы уже давно сожрали конкуренты с этими вашими согласованиями согласований.
Проблема в том, что заказчик сам толком не знает, что ему надо. Аналитик - это не боженька, он тоже ошибается. Аджайл позволяет подстраиваться под эти условия, ваша дубовая совковая с запахом НИИ методология - нет.
Аноним 09/01/25 Чтв 10:32:40 3358324 227
>>3356571
>> 1) Мы пока сделали МВП в виде велосипеда
С нулеовй хуйню сделали.
Могли бы сделать кресло, руль, педали и рычаг переключения, поставить на телегу, которая на этапе MVP толкается "руками", а дальше весь ручной труд автоматизировать, но это сложно, ведь хочется просто насрать в код
Аноним 09/01/25 Чтв 10:44:54 3358330 228
>>3354709
>> Возложение на него ответственности за управление статусной моделью сущности это нарушение SOLID.

Чисто эпирически, я вывел что класть в сущность статусную модель это путь в ад, если тебе кажется флоу будет примитвным на 3 статуса, тебе пизда, потому что дальше добавятся статусы и еще дохуя условий\прав для смены этих статусов.

Надо сразу пилить флоу-менеджер который берет сущность и сам разруливает ее статус, в нем же и аудит пишется (сервисом аудита)

Для меня ДДД это возможность выделить сущности на этапе проектирования, чтобы не ебаться потом самому сочинять все это.
Аноним 09/01/25 Чтв 12:18:39 3358402 229
17358443715380.jpg 425Кб, 1080x948
1080x948
>>3358330
>флоу-менеджер

Вы встречаете в коде класс GenericEntityInteractionDomainFlowManagerServiceBase

Ваши действия?
Аноним 09/01/25 Чтв 12:25:17 3358411 230
Аноним 09/01/25 Чтв 13:40:47 3358491 231
>>3358402
Переименовываю в AbstractGenericEntityInteractionDomainFlowManagerServiceBaseBean
Добавляю в резюме строку Solution Architect
Аноним 09/01/25 Чтв 16:23:57 3358655 232
>>3358402
Кстати, интересный вопрос, почему существенная часть любителей этой наебки для гоев не смогли усвоить из нее самое важное - что все это дерьмо надо нормально называть?
Аноним 09/01/25 Чтв 21:07:59 3358844 233
133.jpg 34Кб, 512x354
512x354
>>3347352 (OP)
Посоветуйте лучшую книгу по ООП и паттернам с примерами на языке Си-решетка. Чтоб прям преисполниться после изучения. Можно и не книгу, но вряд ли лучше книг что-то есть.
Аноним 09/01/25 Чтв 21:32:53 3358854 234
>>3355766
>пик
Пиздец конечно. Я-то думал что хоть тырпрайзные джавошарписты зарабатывают нормальные деньги, а нет. Даже в этой сфере работают за три куска. А еще кто-то собрался в РФ индусов завозить, какой индус со знанием ингриша пойдет работать за такие копейки.
Аноним 10/01/25 Птн 03:36:59 3358933 235
>>3358844
>книгу по ООП и паттернам
Ты опоздал на 30 лет. В 2025 году IService возвращает лист дтошек, а синглтон - один из вариантов регистрации в DI.
Аноним 10/01/25 Птн 08:30:59 3358992 236
>>3358844
Принципы, паттерны и методики гибкой разработки на языке C#. — Символ-Плюс, 2011.

>>3358933
Пчел, если ты не понимаешь паттерны - это не означает, что их не понимают другие. Нормальный код он всегда немножечко ооп, но без этого блядства и разгула, который раньше делали
Аноним 10/01/25 Птн 08:37:18 3358996 237
>>3358992
>но без этого блядства и разгула, который раньше делали
Так то что ты слишком тупой чтобы понимать зачем так делают твоя проблема.

Невозможно легко сделать сложные вещи.
Аноним 10/01/25 Птн 08:56:57 3359005 238
>>3358996
> Невозможно легко сделать сложные вещи.

а если пару раз подумать - возможно.

Сначала делаешь базу, а остальное всё прикладывается как по волшебству.

Сначала делаешь базу:
Выкидываешь автомаппер - код становится менее хрупким и лучше читается.
Выкидываешь MediatR - код становится устойчивым и однонаправленным.
Выкидываешь все комментарии нахуй, - и как-то просторнее и проще работать становится.

Потом как по волшебству код вокруг начинает писаться проще и быстрее
Аноним 10/01/25 Птн 08:58:56 3359007 239
>>3358996
> понимать зачем так делают

Потом выкидываешь DDD и начинаешь писать "вот как есть". И даже как-то стыдно становится, что 5 лет на хуйню потратил
Аноним 10/01/25 Птн 09:35:03 3359035 240
Аноним 10/01/25 Птн 09:40:36 3359038 241
>>3359035
Какие-то новые паттерны появились с тех пор?
Аноним 10/01/25 Птн 10:02:54 3359058 242
>>3359035
Ебанашка, это книга Дяди Боба, она не стареет
Аноним 10/01/25 Птн 10:05:18 3359060 243
>>3359058
Да, вышла устаревшей, куда уж дальше стареть.
Аноним 10/01/25 Птн 10:24:26 3359075 244
>>3359060

Ну хули, учи новые паттерны. По новой книжке. А лучше в тик-токе
Аноним 10/01/25 Птн 10:51:41 3359091 245
>>3359058
>это книга Дяди Боба
т.е. вдвойне кал.
Аноним 10/01/25 Птн 14:00:49 3359182 246
>>3359091
Есть какие-то причины хейтить книжки дяди боба, или ты ебало завалишь и помолчишь?
Аноним 10/01/25 Птн 14:28:37 3359198 247
Аноним 10/01/25 Птн 15:21:55 3359236 248
>>3359198

Если ты не читал обсуждаемую книгу и сказать тебе нечего - то лучше ебало всё-таки завалить
Аноним 10/01/25 Птн 15:38:35 3359248 249
>>3359198
>хабр
Спасибо мне мнение людей даже без профильного образования по теме нахуй не упало.

Это базовая база. Мнение людей без образования в сфере о которой они пишут вообще не важно. Особенно когда очередной 2летний сенька пытается критиковать профессора университета и просто человека с опытом больше чем эта сопля на свете жила.
Аноним 10/01/25 Птн 18:10:25 3359356 250
>>3359248
У Мартина опыт в инфоцыганстве, в программировании опыта нет. Ты сам себя обоссал, джунишка.
Аноним 10/01/25 Птн 18:25:26 3359367 251
>>3359356
Мартин про себя пишет что 50 лет попыта. Трудовую конечно не показывает..
Аноним 10/01/25 Птн 18:38:08 3359377 252
>>3359198
если долбоебы не понимают что "КАЖДОЙ ЗАДАЧЕ - СВОЙ ИНСТРУМЕНТ", то это проблема долбоебов.
Если в приоритете стоит перфоманс, то только имбецил будет пихать паттерны ради паттернов.
Однако чаще всего во главе угла стоит ясность и расширяемость решения. И там преждевременная оптимизация зло - банально все может быть выброшено или переделано.

твиттер был написан на руби с рельсами. результат все знают.
вк был на похапэ написан. результат все знают

а долбоебы могут сколько угодно писать оптимизированные быстрые решения, но только вот рынку они могут быть уже не нужны ибо "дорога ложка к обеду"
Аноним 10/01/25 Птн 18:40:35 3359380 253
>>3359377
>твиттер был написан на руби с рельсами. результат все знают.
>вк был на похапэ написан. результат все знают
А потом они были с 0 полностью переписаны.
Аноним 10/01/25 Птн 18:52:24 3359396 254
>>3359380
>А потом они были с 0 полностью переписаны.
Ты верно заметил - ПОТОМ!!!!! только сначала оно выстрелило. Получило признание и хайлоад, что понадобилось что то с этим делать.

Конечно всякие там паттерны нужно изучать через призму используемого ЯП, а также не забывать что паттерны это не только организация кода, а намного больше для коммуникации.
Но основные принципы написания расширяемого кода все же следует соблюдать - иначе вместо расширяемости будешь постоянно переписывать. А если еще и оптимизировать заранее, то может внуки проект и допишут....только кому он нужен будет уже хз.
Аноним 10/01/25 Птн 18:56:28 3359404 255
>>3359396
У тебя ошибка восприятия. Были десятки и сотни клонов и других альтернатив. Важнее не быстро выйти на рынок, а убедить людей что пользоваться надо твоей залупой, а не конкурента.

Тем более что ты понятия не имеешь про качество кода этих систем и писали их не говношлепы типо тебя, а как раз гики которые любили дрочить на ассемблерные вставки.
Аноним 10/01/25 Птн 19:03:47 3359411 256
>>3359404
>а убедить людей что пользоваться надо твоей залупой, а не конкурента.
Это уже дела маркетолухов. У программиста же другая задача - БЫСТРО РОЖАТЬ ФИЧИ которые нужны.
потому что ОТСУТСТВИЕ ФИЧИ как то не работает как привлекающий фактор.
и маркетолухам просто нечем убеждать людей "у нас лучше потому что у нас вот".

Так что скорость разработки проекта важнее скорости выполнения кода.

>не имеешь про качество кода этих систем
с этим не спорю, но все же RoR задавал архитектуру, да такую что щас куча фреймворков ее стырили себе (и асп.нет) не исключение.
там не "щас мы набросаем на батниках проект, на крон повесим и пойдем бухать".
Аноним 11/01/25 Суб 02:18:41 3359636 257
scale1200.jpg 158Кб, 1102x1200
1102x1200
Сап двач, ищу друга/наставника/ментора/кумира , который поможет мне в изучение данного языка. Прошу, обьявись :D
кун 22 лвл tg : @linkijis
Аноним 11/01/25 Суб 05:26:40 3359659 258
У вас ошибка в литературе по играм - там одно юнити говно вместо моногейма. Исправьте.
Аноним 11/01/25 Суб 05:27:06 3359660 259
>>3359636
ты же пидор, да? не отрицай, ты пидор
Аноним 11/01/25 Суб 06:47:01 3359670 260
Аноним 11/01/25 Суб 08:39:45 3359682 261
>>3359411
> БЫСТРО РОЖАТЬ ФИЧИ

Справедливости ради, быстро рожать фичи в аду фабрик абстрактных билдеров стратегий тоже сложно.

Но чистый код - это, напоминаю, не про то, чтобы адок создавать, а скорее наоборот
Аноним 11/01/25 Суб 09:21:58 3359704 262
>>3359682
В рельсах нет абстрактных фабрик билдеров. Рельсы с точки зрения аспнетов это один сплошной антипаттерн. Все что в пыхе жаве дотнете считается антипаттерном в рельсах является паттерном и наоборот. Монки патчинг, наследование, названия методов из одного слова, генерация кода в рантайме и пр
Аноним 11/01/25 Суб 10:03:42 3359720 263
>>3359704
С каких пор наследование это антипаттерн?
Аноним 11/01/25 Суб 10:09:31 3359723 264
>>3359720
С тех пор, как стало принято наследоваться не более одного раза от абстрактного класса.
Аноним 11/01/25 Суб 10:37:48 3359742 265
>>3359704
>наследование
>антипаттерн

С появлением Automapper наследование стало ненужно.
Аноним 11/01/25 Суб 11:48:59 3359768 266
>>3356571
Как-бэ эт совсем скорапчены процессы.
Обычно такие вы хотя бы какую-то роадмапу делаете.
И итерации бьются по этой роадмапе.
Так и заказчик, в широком смысле, и команда понимают что ожидается когда.
И выходит таки что-то в духе того что этот >>3358324 анон описал, но при этом - все видят, что процесс идет и если команда не проебывается - доверие есть, т.к. идут по этой роадмапе. А если в процессе - заказчик решает что ему надо чтобы красная машина еще в подводную лодку превращалась - есть возможность свернуть рано, а не: БЛЯ, ИДИТЕ НАХУЙ, МЫ МАШИНУ КРАССНУЮ ДЕЛАЛИ, РЯЯЯЯ, РЯЯЯЯЯЯЯЯЯ. Плюс - если шли нормально - то и вопросов будет мало, почему теперь добавить торпеды и погружение - занимает столько времени.

Бизнесу таки в первую очередь не скорость важна, а предсказуемость. Оба варианта которые ты написал - непредсказуемы нихуя. Не важно сколько они времени занимают и что там по фичам.
Аноним 11/01/25 Суб 12:26:18 3359786 267
>наследование
>антипаттерн
Да вообще все антипаттерн. Что в мозгу вкатунца не умещается, то значит и не нужно. Хуяк хуяк и погнали на продакшн, главное что за спринт успели и показали результаты. Я один хуй через 2 года уволиться планирую, а вы ебитесь потом сами.
Аноним 11/01/25 Суб 12:39:32 3359791 268
>>3359768
>Бизнесу таки в первую очередь не скорость важна, а предсказуемость
Но сектанты гибкой разработки и аджаила свято верят что необходимо как можно быстрее показать результат чтобы бизнес мог внести правки и оценить промежуточные работы.

Все идеи гибкой разработки крутятся вокруг идеи что мы делаем хуй знает что, а проблема что с уровня атомарных фич мы перешли на попытки в таком стиле реализовать целые компоненты системы.
В целом лучше не браться за работу у людей которые не понимают что хотят.

Я вот ремонт делал. Нанял бригаду и дал им 200 страниц планов, схем, чертежей, списки материалов и номера красок, схему электрики и растоновки мебели. И как же было тяжело их отучить звать меня смотреть или спросить что-то, каждый раз я им говорил что видел конечный результат на рендерах, я видел образцы всех красок и материалов. Вот чертежи и схемы, делайте все по ним. Не надо менять звать и спрашивать где ставить розетки, выключатели и какую краску купить.
Аноним 11/01/25 Суб 13:26:48 3359828 269
>>3359720
С тех пор как стало понятно, что наследование - это сложно, и в реальности - тебе чаще нужен только интерфейс, а не вся эта вот фигня с наследованием.
Аноним 11/01/25 Суб 13:32:48 3359835 270
>>3359791
Так в реальности разработчикам никто не дает 200 страниц каких-то схем и прочего.
Тебе говорят: Надо автоматизировать завод.
Че автоматизировать? Да хз, неэффективно чет. Давайте, автоматизируйте.
А продажник такой: Ой, конечно, все сделам, дайте деняк только!
И тут две ветки.
1. В конторе все плохо с процессами. Разработчики по своему разумению что-то там изучают и что-то делают. В результате - результат непредсказуем от слова совсем.
2. Процессы таки есть. Но неясности все еще дохуя. Начинается попытка разобраться, что ж там таки надо автоматизировать. Сначала аудит процессов предприятия. Выявления мест узких. Выяснение с разработчиками - а что в этом мы можем таки сделать. Планирование. И т.д.

В реальности - не бывает практически такого, чтобы заказчик ПО пришел такой: Вот вам все что нужно для работы - работайте. Может быть в военке разве что.
Аноним 11/01/25 Суб 14:48:07 3359899 271
>>3359835
>Так в реальности разработчикам никто не дает 200 страниц каких-то схем и прочего.
>Тебе говорят: Надо автоматизировать завод.
Раньше давали. Раньше прикинь делали документацию по процессам, диаграммы взаимодействия. Потом архитекторы писали кучу схем, документации технического толка, думали какие технологии и ЯЗЫК выбрать. Потом писалалось проектировачное решение, схемы классов, модулей. Потом все это разбивали на задаче и планировали трудозатраты.
И только спустя 1-2 месяца разрабы писали код по уже готовой системе.

Естественно эти процессы могли идти параллельно и пока программисты набирают код, архитекторы пишут новые части системы.
Сейчас за обосаные 300к от тебя надо быть разработчиком, архитектором, техписцом, аналитиком и ещё немножко разбираться в бизнес области. Отсюда и проблемы когда карьерный путь разработчика почему-то идёт в менеджеры, ну просто всех уровней технических специалистов выше старшего разраба просто не существует.
Аноним 11/01/25 Суб 15:54:56 3359943 272
left.jpg 233Кб, 960x1280
960x1280
>>3359828
>С тех пор как стало понятно, что наследование - это сложно

Ты из тех категоричных сеньоров-два-года? Твой способ переиспользовать код ОБЪЕКТИВНО ЛУЧШЕ? Ебать, я угораю с вас, бледей
Аноним 11/01/25 Суб 17:22:33 3360009 273
>>3359943
Переиспользованием "драгоценного" кода озабочены джунишки-короткие-штанишки. Реальная польза от переиспользования есть только в UI компонентах, да и там если логику от представления плохо отделить, то начинается сильно связанный говнокод - aka наследование.
Аноним 11/01/25 Суб 17:38:42 3360018 274
>>3360009

Ну, то есть, ты просто копи-пастишь, а корректный код не осилил и осуждаешь
Аноним 11/01/25 Суб 18:11:15 3360037 275
>>3360009
Причем тут связаность и наследование. Ты вообще понимаешь термины которые пишешь?

Вот тебе христоматийный пример наследования.
У нас есть разные виды отпусков, нам необходимо чтобы в целом их логика была довольно общей, да и структура. Там незначительно отличаются возможные даты, логика вычисления количества дней.

Поэтому мы создаём абстрактный класс отпуска, от него будут наследоваться все сущности разных видов отпусков.
Также создаём абстрактный класс операции который реализует общую логику и через абстрактные методы требует реализовать специфичные вещи.

Теперь опиши мне пожалуйста свою систему.
Аноним 11/01/25 Суб 18:11:58 3360038 276
>>3360018
Коректного говнокода не бывает. Все многоуровневое наследование сводится к микроменеджменту копипасты - результатом чего становится запутывание кода, которое с каждым потомком становится все запутаннее.

Всегда когда дерево наследований, то по нему бегаешь и думаешь как изменение отразится на других элементах этого дерева. А нужно ли, чтобы столько кода было зависимым? У него реально одинаковые причины для изменений? Или ты просто занимаешься бесконечным рефакторингом потому что сам все запутал?

Например для одного потомка тебе стало нужно одно поведение метода базового класса, а для другого другое. Ведь ты же не будешь создавать похожие методы у базового класса при необходимости, а отрефакторишь еще одним слоем наследования?

Если у тебя есть действительно полезный большой кусок логики, то он выностится в сервис и используется через композицию.

Когда у тебя композиция, то ты в любом элементе можешь заменить конкретный сервис на другую реализацию и это никак не отразится на других элементах композиции, которые зависят от того же интерфейса.
Аноним 11/01/25 Суб 18:21:14 3360043 277
>>3360037
>У нас есть разные виды отпусков, нам необходимо чтобы в целом их логика была довольно общей, да и структура. Там незначительно отличаются возможные даты, логика вычисления количества дней.
Делаешь один класс, в него передаешь стратегию расчета. Нахуй тебе наследоваться тут?
Аноним 11/01/25 Суб 18:30:51 3360046 278
>>3360038
>Например для одного потомка тебе стало нужно одно поведение метода базового класса, а для другого другое. Ведь ты же не будешь создавать похожие методы у базового класса при необходимости, а отрефакторишь еще одним слоем наследования?
Даже не совсем так. Тут ты можешь еще поменять реализации этого метода у самих потомков. Но у потомков могут быть свои потомки которые захотят базовую реализацию. или другие методы будут требовать базовую реализацию. метода. Назуя такие головоломки...
Аноним 11/01/25 Суб 18:53:31 3360059 279
>>3360046
Вы оба несёте какую-то хуйню. Не могут потомки требовать разной базовой логики своего предка иначе у тебя в предка протеает специфичная логика.

У меня ощущение что вы просто не понимаете как и для чего используется наследование и как выносят специфичную логику и базовую общую.
Ну или вы те шизофреники из-за которых в С# было решено отказаться от множественного наследования. Я такое видел в С++ когда люди Кошку от Транспорт и Животное наследуют потому что надо логику движения добавить.
Аноним 11/01/25 Суб 19:01:03 3360064 280
>>3360038

Не перебарщивай просто и норм будет. Если тебя заебали с глубоким наследованием - это не причина хейтить наследование в общем случае.

Для каждого инструмента есть своё место (кроме Automapper, это говно из жопы).
Аноним 11/01/25 Суб 19:01:16 3360065 281
>>3360037
>когда настолько боишься скопипастить код, что даже в простых задачах высираешь иерархии насследования
Аноним 11/01/25 Суб 19:02:16 3360067 282
>>3360059
>Я такое видел в С++ когда люди Кошку от Транспорт и Животное наследуют потому что надо логику движения добавить.

Как же вы заебали со своими реалистичными примерами
Аноним 11/01/25 Суб 19:03:20 3360069 283
>>3360065
нахуя тебе иерархии? глубоко не наследуйся и не еби мозги
Аноним 11/01/25 Суб 19:08:37 3360074 284
>>3360069
Спроси это у шиза, который для расчета отпусков собрался писать иерархию наследования.
Аноним 11/01/25 Суб 19:12:15 3360076 285
>>3360069
Ясно. Теперь мы перешли от наследования к наследованию на пол шишечки от абстрактного хуя..
Аноним 11/01/25 Суб 19:15:13 3360078 286
>>3360076
А потом приходит сенька с улицы и спрашивает почему тут final, что за самомнение у писавшего...
Аноним 11/01/25 Суб 19:17:21 3360081 287
Аноним 11/01/25 Суб 19:40:18 3360095 288
>>3360081
по хорошему все должно быть по дефолту sealed
Аноним 11/01/25 Суб 19:46:54 3360104 289
>>3360074
>собрался писать иерархию наследования

Вроде он написал, и у него всё норм. Это ты кривишь ебало от слова наследование без какой-либо мотивации.

Это как если сказать ФУНКЦИИ ГОВНО, ИХ НЕЛЬЗЯ ПИСАТЬ.

Еще раз тебе лупню объясняю. Читай книжки про разные подходы программирования, бери самое адекватное из них.

Хабр не читай, там инфоцыгане категоричные срут своими "ПОЧЕМУ ООП БЕЗНАЖЁЖНО УСТАРЕЛО И НУЖНО ПЕРЕХОДИТЬ НА АОП"
Аноним 11/01/25 Суб 20:43:52 3360144 290
>>3360104
Так а ты-то можешь кейс привести, кроме UI-элементов для библиотеки GUI, где глубокое наследование не будет говном-то?

Я вот могу привести кучу случаев когда обосрамсы из-за этого или говнодизайн. Потому что я сам в бытность джуном-мидлом ну очень сильно любил наследование.
Аноним 11/01/25 Суб 21:04:33 3360152 291
>>3360144
>кроме UI-элементов для библиотеки GUI
так а чего ты сразу то так.
видимо мой урок в прошлых тредах усвоили
так ответ тот же - КАЖДОЙ ЗАДАЧЕ СВОЙ ИНСТРУМЕНТ (подход)

причем этот гуи может быть и компонентный подход к асп.нет (примерная аналогия виджеты)
Аноним 11/01/25 Суб 21:09:43 3360155 292
>>3360095
По хорошему за sealed в коде надо увольнять
Аноним 11/01/25 Суб 21:16:39 3360160 293
>>3360155
Смотря что пишем. Если его можно убрать, то вполне себе. Даже полезно потому что заставляет задуматься, а почему кто-то решил что его нельзя наследовать.
Но вот за такую хуйню без чёткой необходимости в библиотеке надо бить по голове.
Аноним 11/01/25 Суб 21:19:53 3360161 294
>>3360144

> Потому что я сам в бытность джуном-мидлом ну очень сильно любил наследование.

то есть, ты сам долбоёб, и на своём примере всех осуждаешь. А как ты понял, что бы перестал быть джуном-мидлом?

Сам так решил или тебя короновали?
Аноним 11/01/25 Суб 22:14:54 3360181 295
>>3360152
Так я и не спорю что есть таки места, где наследование ОК.
А есть места, где и все статик-классами все ебануть ОК.
А где-то и синлтон классический не хуже будет чем DI'ешный.
А еще ансейфом шлифануть иногда тоже бывает неплохо.
А когда-то и лучше будет ручками SQL запрос написать, вместо того чтобы на ОРМ полагаться.
Иногда и воскрешать объекты - не такая плохая практика.
А если дальше - переписать все на си или фортран - тоже может быть хорошей идеей иногда, срсли.

Только вот как-бэ. Если мы говорим про кейсы как тут >>3360037 оно там нахуй не уперлось.
А дальше начинается уже включаться реальная практика. И мы видим, что в обычном крудостроении и формошлепстве, которым 99,(9)% сидящих тута занимаются - оно нахуй не уперлось, а проблем от него в конечном итоге будет больше, чем сразу без него.
Не, ну я понимаю, кому-то надо чтобы понять - собрать самому все грабли.

>>3360161
Твою маму спросил, няша.
Аноним 11/01/25 Суб 23:18:41 3360196 296
>>3360160
> Даже полезно потому что заставляет задуматься, а почему кто-то решил что его нельзя наследовать.

В "своём" коде нет технических причин, почему класс нельзя наследовать. В библиотечном - другое дело, там это нужно чтобы пользователи инкапсуляцию не поломали.

я все классы помечаю как sealed, так код читается быстрее.
Аноним 11/01/25 Суб 23:42:28 3360200 297
>>3359720
Лет 20 уже. Наследование часто сильно всё усложняет, когда у тебя куски реализации одного и того же раскиданы по куче мест, а из-за переопределений далеко не всегда очевидно, какой конкретно метод вызывается.
Рекомендуется вместо наследования использовать композицию.
Аноним 11/01/25 Суб 23:47:18 3360202 298
>>3359742
Аутомаппер зло и не нужен. Лучше лишний раз написать маппинги руками, чем огребать из-за всей этой неочевидной магии.
Всё начинается просто, когда у тебя почти одинаковые классы друг на друга замапленны. Потом ты из нескольких объектов один собираешь. Затем правила всё усложняются, а в итоге у тебя прямо в конфигурации маппингов куча бизнес-логики, обращение к микросервису и запрос в БД.
Аноним 12/01/25 Вск 00:08:11 3360206 299
Препод ебет мозги, что с# это панацея от всего
Аноним 12/01/25 Вск 00:11:02 3360207 300
>>3360200
>куски реализации одного и того же раскиданы по куче мест,
Ещё раз. То что ты не можешь нормально спроектровать систему твоя проблема.

Композиция не может быть заменой наследования потому что они выражают абсолютно разные понятия. Ты бы это знал если бы хотя бы пытался получить нормальное образование по ИТ.

Композиция это "состоит из"
Наследование это "является этим"
Ты не можешь заметить одно другим.
Аноним 12/01/25 Вск 01:22:44 3360221 301
>>3360207
>еще раз
Дохуя Высотский? Эх раз да и еще раз..

Сам ты не разбираешься. Сейчас же время дивесити. Хочешь быть уткой - просто крякай. Например голенг тот самый диверсити язык. А жабошарпы с номинальной типизацией это устаревщие традици с генеалогическими древами, где вырожденцы хвалятся тем, что они потомки князей, а по факту бухают и ебутся со шлюхами как простые работяги. Только бухло подороже и шлюхи послаще...
Аноним 12/01/25 Вск 01:38:23 3360222 302
>>3360221
Если ты не понял то нихуя уже не очевидно что многоуровневое наследование нужно для написания сложных вещей. Кубер написан без этих наследований.

Наледование просто притащили вместе с номинальной типизацией как инородную хуйню в программирование, а как с толком использовать это инфу не придумали.

Пролезать в интерфейсы можно без наследования и явной имплементации. Делегировать поведение можно без наследования, через композицию.
Аноним 12/01/25 Вск 01:43:58 3360224 303
Аноним 12/01/25 Вск 03:04:28 3360234 304
>>3360207
>>куски реализации одного и того же раскиданы по куче мест,
>Ещё раз. То что ты не можешь нормально спроектровать систему твоя проблема.
Я могу нормально спроектировать систему без наследования. Занимаюсь этим уже много лет, кучу всего написал.
>Композиция не может быть заменой наследования потому что они выражают абсолютно разные понятия. Ты бы это знал если бы хотя бы пытался получить нормальное образование по ИТ.
У меня степень магистра, чувак. Я в универе успел пописать языках на 15, и ни в одном из них отказ от использования наследования (там, где оно есть) ничего не усложняет.
>Композиция это "состоит из"
>Наследование это "является этим"
>Ты не можешь заметить одно другим.
Является -- это реализация интерфейса. В случае наследования это зачастую совсем не работает. Как пример -- напиши мне иерархию из параллелограмма, прямоугольника, ромба и квадрата с конструкторами с заданием сторон/углов и, к примеру, свойством возвращающим площадь. И ты сразу поймёшь, что наследование -- это совсем не "является".
Аноним 12/01/25 Вск 08:16:49 3360263 305
>>3360222
>Делегировать поведение можно без наследования, через композицию
Причём тут делегирование поведения и наследование. Что за хуйню ты блять несешь.
Аноним 12/01/25 Вск 08:57:09 3360266 306
>>3360202
>Аутомаппер зло и не нужен.

По сути, ручное присваивание это смердящий ЗАПАХ КОДА и оно должно быть запрещено, так же как вызов NEW.

По сути, согласно правилу бинарных зависимостей, в конструкторе должно быть только 2 зависимости, IMapper и IMediator.
Аноним 12/01/25 Вск 09:24:45 3360269 307
Аноним 12/01/25 Вск 09:50:43 3360275 308
>>3360266
>IMediator
Мы вам перезвоним.
Аноним 12/01/25 Вск 09:56:51 3360276 309
{A46DB27E-C0F5-[...].png 138Кб, 931x960
931x960
>>3360207
Окей.
Ты можешь спроектировать.
Давай, объясняй на пальцах, от кого я должен наследоваться?
Аноним 12/01/25 Вск 10:01:15 3360278 310
Аноним 12/01/25 Вск 11:23:12 3360298 311
Хоть и оффтоп, но как же меня заебали такие аргументы уровня: "20 лет пишу на C#/.NET и ни разу не понадобилось X". Это способ сказать что без X можно жить или способ задавить авторитетом? Постоянно такие высеры вижу в комментах на Reddit в r/csharp и r/dotnet.

>>3360234
>Я в универе успел пописать языках на 15
Это не аргумент. Хоть я сейчас пишу в основном только на C#, я тоже могу насчитать ещё 5 языков на которых я писал, но это не значит что я их знаю. Вон как я выше написал, кто-то и по 20 лет пишет на C# никогда не использовать некоторые его фичи, а потом используют это как аргумент своей правоте.

мимо бомбануло ещё с комментов вчерашнего поста на Reddit
Аноним 12/01/25 Вск 13:32:59 3360330 312
>>3359899
>Сейчас за обосаные 300к от тебя надо быть разработчиком, архитектором, техписцом, аналитиком и ещё немножко разбираться в бизнес области
Буквально суть моей работы. У нас и тестеры немного системные аналитики и разбираются в бизнесе, короче весело живем.
Аноним 12/01/25 Вск 13:44:53 3360331 313
>>3360266
На днях мидл пришел, тоже говорил что медиатр говно, не ответил нормально почти ни на один вопрос, это ты был?

Кстати почему медитр говно? Ты же буквально в один файл кладешь запрос+хэндлер. А в вызове явно указан запрос и все это ищется использованием по ссылкам.

Немного сложнее становится только когда речь про нотификации заходит, но такие фичи никто не юзает почти.
Аноним 12/01/25 Вск 13:53:14 3360334 314
>>3360276
Даже если не использовать ECS в реальном проекте будут компоненты использоваться, в один класс Unit будут добавлены 2-3 компонента - Attack, Cast и возможно HP.

То есть опять композиция вместо наследования. Игры кстати посложнее крадошлепства в плане логики, и как раз там не используют такие сложные иерархии.
Аноним 12/01/25 Вск 13:53:15 3360335 315
>>3360298
А кто такой "фичей" как наследование не пользовался в языке никогда? Наоборот этого в каждом легасном проекте как говна за баней.
Аноним 12/01/25 Вск 14:48:41 3360357 316
>>3360276
> от кого я должен наследоваться

От NPC, ясен хуй, ты же предыдущих двоих NPC от NPC унаследовал
Аноним 12/01/25 Вск 15:14:16 3360371 317
>>3360331
>Кстати почему медитр говно?

Потому что он никаких проблем не решает

> Ты же буквально в один файл кладешь запрос+хэндлер

А какая проблема-то была?
Аноним 12/01/25 Вск 15:27:37 3360381 318
>>3360331
Почему не инжектят IServiceProvider?
Почему не кладут интерфейс и реализацию в один файл?

Я в частности не люблю медиатр, потому что с дженериками заебался. И навигация по коду как в болоте
Аноним 12/01/25 Вск 15:34:35 3360385 319
>>3360381
> Почему не инжектят IServiceProvider?
Почему? Я инжекчу в фабрики
Аноним 12/01/25 Вск 15:56:46 3360398 320
>>3360381
>Почему не кладут интерфейс и реализацию в один файл?
Я кладу. Я бы и без интерфейсов обошелся если честно, они же тоже никакую проблему не решают, если у тебя только один класс который его реализует (и в 90% так и есть)

Так что и медиатр не нужен, и интерфейсы не нужны. Кайфово. Автомаппер все проблемы решает.
Аноним 12/01/25 Вск 16:10:54 3360408 321
>>3360398
как твой автомаппер решит проблему тестирования если ты уберешь интерфейсы?
Аноним 12/01/25 Вск 16:36:22 3360425 322
>>3360385
>Почему? Я инжекчу в фабрики
Ну логично. Но я к тому, что инжектить медиатр в контроллеры или сервисы это примерно такое же самое, что и инжектить туда IServiceProvider.

Это значит терять контроль над зависимостями, а это ну такое себе.
Аноним 12/01/25 Вск 17:30:32 3360469 323
>>3360357
Но мы ж получим дублирование логики...
Аноним 12/01/25 Вск 17:51:14 3360484 324
>>3360408
Предприятий слинялая пожуйте задаривает пятерочною
Аноним 12/01/25 Вск 17:51:30 3360485 325
>>3360469
Не слушай долбоёбов. У тебя проблема в том, что ты написал псевдокод и нельзя сказать решение в общем случае. Если у тебя есть общий интерфейс для всех NPC, реализация которого возможна под все типы NPC, то добавляй уровень абстракции и делай так, чтобы путём композиции можно было объединить ваириора и мага.
Аноним 12/01/25 Вск 19:22:16 3360531 326
>>3360408
А зачем мне для тестов ложить интерфейс и реализацию в разные файлы? То-то же.
Аноним 12/01/25 Вск 20:10:22 3360545 327
>>3360531
>А зачем мне для тестов ложить интерфейс и реализацию в разные файлы?

Ну ты же файл тестируешь
Аноним 12/01/25 Вск 21:40:35 3360572 328
>>3360298
Я это не пытаюсь авторитетом задавить, я это сказал исключительно на попытку выставить меня новичком.

В принципе ты прав, но не в данном случае. Меня в том же универе учили ООП, вся эта поебень с "является", "уточнение", "подмножество" и вымученными примерами сущностей человек - студент, человек - препод с методами прочитатьЛекцию() и сдатьЗачёт(). Я вполне могу и с наследованием систему спроектировать, но сознательно выбираю проектировать без наследования.
Я ещё и стараюсь, чтобы классы с логикой не имели состояния, чтобы не ебаться с лайфскоупом и тред сэйфти.
Аноним 12/01/25 Вск 21:46:44 3360575 329
>>3360531
Вопрос был не про класс и интерфейс в одном файле, а про наличие интерфейсов вообще.
Как ты класс в юнит тесте мокать будешь? Там вызовы методов можно замокать только если они виртуальные, а это большая редкость.
Аноним 12/01/25 Вск 21:55:57 3360576 330
>>3360572
>поебень с "является", "уточнение", "подмножество" и вымученными примерами сущностей человек - студент, человек - препод с методами прочитатьЛекцию() и сдатьЗачёт().
Ну значит ты просто тупой. Это не вымученые примеры, ожидается чтобы даже дебил понял, но ты вот не смог.

СдатьЗачет методом класса быть не может это сложный процесс. Метод класса Студент это ДатьЗачетку(), ПолучитьУчебник().

Ты не понимаешь просто что твои попытки не использовать наследование приводят к говно коду который невозможно будет рефакторить. А не можешь понять потому что тупой и не осилил понять и осознать зачем и когда применяется тот или иной подход. Тебе нравится делать что-то, ты и делаешь это везде и похуй что ты гвозди отверткой забиваешь.

.NET целиком построен на сложном и развесистом наследование, использование интерфейсов это наследование(интерфейсы это абстрактные классы с точки зрения приложения), любой стандартный класс это потом 3-5 классов. Весь LINQ и система коллекций это наследование и правильное использование нужных типов.
Абсолютно все крупные приложения что ты можешь вообразить содержать огромные схемы классов и имеют глубину наследования вплоть до 10 уровней.
Даже банальная авторегистрация зависимостей или их вызов основаны на наследование и получение потомков.
Аноним 12/01/25 Вск 22:52:00 3360592 331
>>3360576
>имеют глубину наследования вплоть до 10 уровней.

А некоторые и по 3 конфигурации автомаппера!
Аноним 12/01/25 Вск 23:19:28 3360601 332
Такой вопрос.
Когда последний раз вы использовали goto?
Аноним 12/01/25 Вск 23:35:39 3360610 333
Аноним 13/01/25 Пнд 00:48:40 3360638 334
>>3360576
Ты прямо как Петрович с завода, считающий что никто кроме тебя не понимает как гайки крутить. Ух все тупые..

Да. Наследование и композиция это два разных инструмента. Но тут в треде усираются что наследование нужно для переиспользования кода. Как раз для переиспользования наследование не нужно, а нужна композиция. Все паттерны про это.
Наследование остается для работы полиморфизма. Просто так жабошарпы да и много другие языки работают, что нужно наследоваться чтобы работал полиморфизм для сабкласов.
Аноним 13/01/25 Пнд 00:58:35 3360642 335
>>3360638
А там где в паттернах используется наследование, оно там не для переиспользования кода, а именно для того чтобы принцип подстановки Лисков работал. Например простой паттерн декоратор.
Аноним 13/01/25 Пнд 00:59:17 3360643 336
>>3360601
В пет проекте, 16.12.2024. Ебало в норме, мать жива.

Вообще я заметил что я пользовался им раз 20, зачастую для скипа какого-то кода (где из разных мест метода нужно прыгнуть в его конец где нужно выполнить ещё какой-то код (что-то типа early exit, но только в следующую часть метода)). Где-то можно было обойтись (например, на методы разделить и т.д.). Я нейтрально отношусь к goto, так что, хочу - использую, хочу - не использую (единственное "правило" - прыжки только вперед метода).
Аноним 13/01/25 Пнд 03:33:48 3360680 337
>>3360643
Единственное правило - с ним лучше чем без него
И плевать куда прыгать
Аноним 13/01/25 Пнд 08:08:28 3360747 338
>>3360610
Goto добавляет выразительности. Стараюсь использовать его как можно чаще.
Аноним 13/01/25 Пнд 08:46:31 3360757 339
>>3360601
В 2020-м. Но там язык был такой, что ветвление или циклы можно было организовать только в виде IF <cond> GOTO <label> и никак иначе.
В шарпе только один раз в switch-е и то по приколу, чтобы товарища подъебнуть.
Аноним 13/01/25 Пнд 22:47:24 3361544 340
17367901432000.jpg 453Кб, 1080x1080
1080x1080
Программировал весь день на C#.

Всё охуенно
Аноним 13/01/25 Пнд 23:08:55 3361547 341
>>3361544
Программировать любой дурак может
Ты попробуй деньги заработать
Аноним 14/01/25 Втр 00:02:35 3361573 342
>>3360576
>.NET целиком построен на сложном и развесистом наследование, использование интерфейсов это наследование(интерфейсы это абстрактные классы с точки зрения приложения),
Нет. У интерфейсов нет реализаций, это ключевое отличие.

>любой стандартный класс это потом 3-5 классов. Весь LINQ и система коллекций это наследование и правильное использование нужных типов.
Linq - это методы расширения, повешенные на IEnumerable<T>, никакого наследования там нет.

>Даже банальная авторегистрация зависимостей или их вызов основаны на наследование и получение потомков.
Реализация наследованием не является.

Итак, где иерархия из параллелограмма, прямоугольника, ромба и квадрата?
Не можешь в множественное наследование? Ну давай хотя бы квадрат и прямоугольник.
Аноним 14/01/25 Втр 00:45:24 3361591 343
>>3361573
>Нет. У интерфейсов нет реализаций, это ключевое отличие.
Default interface members?

>Linq - это методы расширения, повешенные на IEnumerable<T>, никакого наследования там нет.
Мне кажется, что он говорит про внутренности реализации.

>Реализация наследованием не является.
А я бы сказал что это ограниченная форма наследования.
Аноним 14/01/25 Втр 00:59:51 3361596 344
>>3361573
>Нет. У интерфейсов нет реализаций, это ключевое отличие
Во-первых, есть. Во-вторых, интерфейс это не изобретение С# а паттерн такой. В других языках он буквально делается через абстрактные классы.

Конкретно в С# это сахар и реализации философии множественого наследования только для поведения, а не структуры. Они выделены отдельно чтобы запретить множественое наследование классов. В IL коде нет никакой разницы нследовал ты абстрактный класс или интерфейс.
Аноним 14/01/25 Втр 03:16:43 3361628 345
>>3361591
>Default interface members?
Это не наследование. Можешь рефлексией проверить, там у объекта не будет этого метода.

>А я бы сказал что это ограниченная форма наследования.
Моя конкретная претензия к наследованию заключается в возможности переопределения методов и свойств, что ещё ухудшается тем, что в шарпе они бывают виртуальные и нет.

>>3361596
>Во-вторых, интерфейс это не изобретение С# а паттерн такой. В других языках он буквально делается через абстрактные классы.
В других это в каких? В крестах, лол? Это не пример для подражания.

>Конкретно в С# это сахар и реализации философии множественого наследования только для поведения, а не структуры.
См. выше мою претензию к наследованию.
Аноним 14/01/25 Втр 04:25:00 3361632 346
0MHc4PhK-Hc.jpg 169Кб, 1431x955
1431x955
Q! Хочу написать десктопную программку для Windows компов. Опыта в C# особо не имею, сделал на dotnet 9.0 winforms, скинул на соседний комп для проверки, а он требует установки windowsdesktop-runtime-9. Можно ли сделать так, чтобы программа использовала только установленный фреймворк? На всех компах точно есть 3.5 и 4.0.
Аноним 14/01/25 Втр 08:40:00 3361667 347
изображение.png 391Кб, 1998x1880
1998x1880
>>3361632

Ты писал приложение на современном кроссплатформенном дотнет-коре, а требуется запускать его на дотнет-фреймворке-для-винды пятнадцатиледней давности.

3.5 фреймворк поддерживается до 2029 года. В принципе, ты можешь попробовать под него переписать, но будет скорее всего сложно, что-то сравнимое с попытками работать на windows-xp.

Так же рассмотри вариант обновить фреймворк до 4.8 на целевых машинах. Сама разработка будет значительно проще. Или у тебя ограничения?

https://en.wikipedia.org/wiki/.NET_Framework_version_history
Аноним 14/01/25 Втр 08:42:21 3361668 348
горделивая поза[...].jpg 103Кб, 453x604
453x604
>>3361628
>См. выше мою претензию к наследованию.
Аноним 14/01/25 Втр 09:43:24 3361714 349
>>3361667
Нет, никаких ограничений. Просто хотел, чтобы программка запускалась везде без дополнительных танцев с установками. До версии 4.8 обновить без проблем.
Аноним 14/01/25 Втр 11:25:50 3361764 350
>>3361632
Возможно, тебе подойдет self-contained публикация приложения - тогда совсем не будешь зависеть от установленных на целевой машине фреймворков.
Но вырастет размер приложения, так как в релиз будут включены все зависимости и исполняемая среда.
Аноним 14/01/25 Втр 11:38:29 3361772 351
>>3361764
Понял, не судьба значит. Я тогда уж на питончике наваяю с pyinstaller. Плюсом кроссплатформенность появится.
Аноним 14/01/25 Втр 12:29:09 3361811 352
>>3361772
Че ты как баба со своими окошками. Делай CLI и не еби мозг.
Аноним 14/01/25 Втр 12:37:51 3361823 353
>>3361772
>pyinstaller

Пробовал я этот ваш pyinstaller, заебался, так ничего и не заработало
Аноним 14/01/25 Втр 16:22:05 3362046 354
>>3361772
>Плюсом кроссплатформенность появится.
ты как то определись для винды или кросс
а то прыгаешь со стула на стул.

знаешь питон - ваяй на питоне. какая разница то
в обоих случаях это будет self-contained
Аноним 14/01/25 Втр 19:54:45 3362254 355
Аноним 14/01/25 Втр 20:32:03 3362282 356
>>3362254
Как меня бесит опенсор, как я ненавижу контрибьюторов, сука, просто пиздец. Особенно контрибьтеров в опенсорс, охуеть вообще. Сука. Коммитят тут, радуются. Скоро за каждый юзинг платить будете, бляди!
Аноним 14/01/25 Втр 20:39:21 3362288 357
>>3362254
Ура, больше не будут везде тащить эту шизу для гуманитариев.
Аноним 15/01/25 Срд 02:12:23 3362433 358
>>3362254
Похуй, я этим говном не пользуюсь. Это вообще шиза, вместо простого assert(x>2) писать ебаное сочинение "как я провел тесты".
Аноним 15/01/25 Срд 03:42:07 3362445 359
>>3362046
Для винды, но я думал сделать штатными средствами, чтобы без установки всяких допов было.
Аноним 15/01/25 Срд 08:37:49 3362503 360
>>3362254
Ждём, когда автомаппер платный станет
Аноним 15/01/25 Срд 09:18:19 3362525 361
>>3362254

FluentAssertions очень спорное, пользуюсь им только потому что хотел своих разрабов привлечь к написанию тестов потому что они дуреют с прикормки билдеров и синтаксисов.

Сам таким говном никогда бы не стал пользоваться. Потому что xUnit идеален:

True(expected);
Аноним 15/01/25 Срд 09:46:36 3362558 362
17366136569900.jpg 241Кб, 680x680
680x680
>>3360331
>Кстати почему медитр говно?

Вся идея Медиатра разваливается нахуй на первом POST запросе с query-параметром и телом. Начинаешь хуярить слои и копировать одинаковые классы.

Я с этой хуйнёй проебался несколько лет, потом понял, что MediatR что это буквально охуенный способ запретить себе писать обычные методы с названиями и параметрами и нахуярить семислойную матрёшку, где у тебя 3-5 абсолютно одинаковых типов только для того, чтобы что оправдать бестолковость использования автомаппера?

или нахуя?
Аноним 15/01/25 Срд 09:48:33 3362562 363
>>3362503
>Ждём, когда автомаппер платный станет

Automapper.Generators платный вышел, так же как Automapper.Async
Аноним 15/01/25 Срд 10:51:20 3362608 364
>>3362445
>но я думал сделать штатными средствами
ну так делай
self-contained для дотнета куда более штатный чем pyinstaller для питона
а делают то же самое.
Аноним 15/01/25 Срд 12:19:09 3362693 365
>>3362608
Я нашел, что можно компилировать csc.exe из папки с фреймворком. Попробую в один файл загнать и интерфейс, и логику во славу Нерзула.
Аноним 15/01/25 Срд 14:17:58 3362796 366
>>3362558
Вообще никаких проблем не замечал. Медиатр хорошо структуру задает, особенно учитывая что никто в треде не знает ни ддд, ни гексы, ни чистую.

Я хз как вы код пишете. Вернее почему хз, я видел как вы пишете, от медиатора точно хуже не станет.
Аноним 15/01/25 Срд 14:47:54 3362816 367
>>3362796
>я видел как вы пишете
неа. не видел.

>от медиатора точно хуже не станет
добавит лишний уровень косвенности там где и без нее норм.

вот я не пишу на асп. но вот читаем на мсдн
"контроллер ASP.NET Core отправляет команду в конвейер команд MediatR, чтобы они попали в соответствующий обработчик."

а этот "соответствующий обработчик" совсем никак нельзя просто прямо вызвать что ли?
Ах да, тогда ведь нельзя будет навесить всякие там бехавиорсы, которые быстро создадут "хрен пойми что где куда и зачем вызывается" и понадобится особо кое что делать вприсядку чтобы во всем этом был хоть какой то порядок.
Аноним 15/01/25 Срд 18:55:56 3363080 368
>>3362796
>Медиатр хорошо структуру задает

Только если используется не более чем в одном слое приложения и если это приложение архитектурно заточено под собственный протокол.
Во всех остальных случаях медиатр - мусор.

> особенно учитывая что никто в треде не знает ни ддд, ни гексы, ни чистую.

Каким боком Медиатр относится к ДДД, восьмиугольнику или чистой архитектуре? Боллее того, Медиатр ломает чистую архитектуру потому что все команды приходится складывать в один слой, который пухнет

>Я хз как вы код пишете. Вернее почему хз, я видел как вы пишете, от медиатора точно хуже не станет.

Чел, я был свидетелем того, как один хуй с помощью медиатра из сервиса на 5000 строк раздул недифференцируемый Уроборос без начала и конца.

Оставьте пожалуйста это говно в 2016 году
Аноним 15/01/25 Срд 19:10:50 3363099 369
>>3362796
> особенно учитывая что никто в треде не знает ни ддд, ни гексы, ни чистую.
Из всего этого только чистая реальная тема.
ДДД это чистое инфоцыганство. Гексогоналка вообще хуй пойми что, никто не знает о чем это только могут нести хуйню из промо буклетов для говноедов.
Аноним 16/01/25 Чтв 17:38:26 3363853 370
У кого нибудь есть слив boosty.to/ithomester курсов по sql/ef?
Аноним 16/01/25 Чтв 17:58:12 3363871 371
>>3362816
>а этот "соответствующий обработчик" совсем никак нельзя просто прямо вызвать что ли?
Гуманитарии попали в программирование. Они пишут код, как книги по философии: из простой идее высирают 20 томов графомании. Медиатр, автомапер, Should().Be().Equal().To().Value().Of(2) вместо assert(x==2) - это все признаки гуманитарных долбоебов.
Аноним 16/01/25 Чтв 18:59:42 3363982 372
>>3363871
> Should().Be().Equal().To().Value().Of(2)
🤩🤩🤩
Обожаю Fluent синтксис. Когда пишу так, как будто на родном английском говорю. И всё сразу понятно!
Аноним 16/01/25 Чтв 19:05:34 3363994 373
17367901432000.jpg 453Кб, 1080x1080
1080x1080
>>3363871
>Медиатр, автомапер

Говорят, в Asp.NET core 10 включат свою версию Автомаппера. Джеймс Монтемагно пишет, что это добавит выразительности и необходимо для новой встроенное реализации медиатра.
Аноним 16/01/25 Чтв 19:26:08 3364009 374
>>3363982
код ВНЕ тестов тоже так пишешь?
Нет? а что же ты такой двуличный, пишешь непонятные закорючки вместо англотекста?
Аноним 16/01/25 Чтв 21:22:18 3364110 375
Что почитать джуну чтобы преисполниться? Без пережовывания синтаксиса в сотый раз
Аноним 16/01/25 Чтв 21:29:02 3364114 376
>>3364110
код чужих проектов и либ. пытаясь разобраться в устройстве
код стандартной библиотеки (открой хоть хешсет исходник и познавай) - там тоже много разного

кодить не надо. просто чужие приемы и такой "аааа, круто придумано".
Аноним 16/01/25 Чтв 21:29:45 3364115 377
>>3364110
Таненбаум Архетуктура ЭВМ.
Аноним 16/01/25 Чтв 21:30:44 3364116 378
>>3364115
>Таненбаум
чему ученый генетик из биошока сможет его научить
Аноним 16/01/25 Чтв 21:55:43 3364130 379
>>3364110
Код надо писать, а не дрочить очередей талмуд. Придумай себе какой-нибудь проект и пили.
Аноним 16/01/25 Чтв 22:05:46 3364141 380
>>3364130
а вот и нет. код нужно ЧИТАТЬ. не порти ньюфага своими глупостями
Аноним 16/01/25 Чтв 22:08:12 3364145 381
>>3364141
Читать чужой код надо только корпоративным рабам, а свободным господам стартаперам код надо писать.
Аноним 16/01/25 Чтв 22:48:37 3364171 382
>>3364145
>код надо писать.
ГОВНОкод разве что.
ну да, можно. заказчки код не читают. сам потом жрешь свое говно
Аноним 16/01/25 Чтв 23:31:40 3364188 383
>>3364009
>код ВНЕ тестов тоже так пишешь?

Да, чтобы коллегам легче читать было на флуенте. Так выразительней. У нас все это экспрешшен. Есть правило, не более чем одна точка с запятой на метод.
Аноним 16/01/25 Чтв 23:47:29 3364197 384
>>3364188
Да ты пиз.... брешешь
Аноним 17/01/25 Птн 00:19:51 3364211 385
>>3364171
Надо читать чужой говнокод.
Аноним 17/01/25 Птн 00:47:14 3364222 386
>>3364211
выходит что стандартная библиотека говнокод?
код асп.нет говнокод?
кот того же медиатра говнокод?

хули ты тогда шарпист, если в шарпе только говнокод?
Аноним 17/01/25 Птн 00:54:09 3364223 387
>>3364211
Любой чужой код - говнокод, смирись
Аноним 17/01/25 Птн 01:57:39 3364233 388
>>3364223
у тебя синдром утенка
ты увидел свой код и подумал что он идеал

тебе уже ничем не помочь.
Аноним 17/01/25 Птн 06:57:15 3364265 389
>>3364222
>кот того же медиатра говнокод?

Да, там 300 строк по идее должно быть, но он раздут до каких-то невменяемых размеров.
Аноним 17/01/25 Птн 13:21:42 3364528 390
>>3364265
по какой идее
велосипед? ну велосипед может да. а если делать "по красоте", то строчечки размножаются
Аноним 17/01/25 Птн 13:46:53 3364538 391
>>3364528

Какая нахуй красота в медиатре? Ты ёбнулся?
Аноним 17/01/25 Птн 13:56:05 3364549 392
>>3364538
а ну озвучь претензии к коду медиатра.
а мы посмотрим.
Аноним 17/01/25 Птн 15:05:01 3364622 393
left.jpg 233Кб, 960x1280
960x1280
>>3364549
>а ну озвучь претензии к коду медиатра

Его наличие
Аноним 17/01/25 Птн 15:41:49 3364659 394
>>3364622
чем тебе не угодило наличие котика.
впрочем, никто не заставляет пользоваться ни медиатром ни котиком
Аноним 17/01/25 Птн 19:54:46 3365044 395
>>3364659
> не заставляет пользоваться медиатром

Помню, как я первый раз после своего джунства после трёх лет ебли с автомаппер+медиатр попал на проект, где ребята не грели себе мозг, а просто писали код на C#.

Я до этого думал, что занимаюсь DDD, чистой архитектурой и cqrs, и что вокруг меня умные люди, а оказалось, что занимался я говном, а вокруг меня были долбоёбы с синдромом архитектора.

Спустя время узнал, что челики, от которых я ушёл просто перестали справляться и их проект развалился к хуям. Туда им и дорога
Аноним 17/01/25 Птн 20:00:23 3365053 396
>>3365044
Единственная проблема автомаппера это рефлексия. В остальном это чистое спасение.
У тебя похоже никогда не было необходимо поддерживать статические классы на 8000 строк с описанием мапингов системы. Я ебал рот бля, это учитывая что у одной сущности могло быть до 10 ДТО.
Аноним 17/01/25 Птн 20:28:46 3365097 397
>>3365053
есть решения которые генерят маппинги в компил тайм
в результате получается код который можно пощупать
что тебе автомаппер этот.
Аноним 17/01/25 Птн 21:22:08 3365168 398
изображение.png 241Кб, 477x410
477x410
>>3365053
>У тебя похоже никогда не было необходимо поддерживать статические классы на 8000 строк с описанием мапингов системы.

Автомаппер как-то решает эту проблему?
Аноним 17/01/25 Птн 21:27:54 3365173 399
изображение.png 10Кб, 469x185
469x185
Напоминаю, что xUnit охуенен
Аноним 18/01/25 Суб 18:45:30 3365781 400
В какое-же говно скатывается MVVM когда реально используется парадигма - один пишет логику, второй - представление.

Типа - вот сделал я модельку. Чел такой - ой, а я у себя сделаю модельку модельки уже для представления. А потом свой сервис для работы со своими модельками. А сверху - сделаю уже вью-модельку.
В результате, моделька базовая - реактивная, но ее вокруг оборачивает другая реактивная моделька, которая просто прокидывает что-то в обе стороны. Сверху это в сервис оборачивается. Потом - уже вью-модель берет сервис...
А где-то через год - у вас баг с тем что что-то задублировалось и ебись как хочешь - ищи где хочешь. На каком уровне обосрамс - хуй знает, потому что писать же руками проперти - зашквар, пусть будет кодогенерация через MVVM-тулкит) Я ебал в сраку того кто придумал что это удобно. Надеюсь он сдохнет и его так же никто не найдет потом, как невозможно что-то найти с этим говном автосгенерированным Я шучу конечно, ебал я в сраку себя, за то что такой беспозвоночный и не смог отстоять ненужность этой хуйни

Короче. Пришел к выводу, что лучший подход - это идти по тому же пути что и клиент-сервер. Ядро системы - сорт оф сервер. Никакого состояния не хранит, просто принимает команды, запросы - отдает по "протоколу". То что на визуале - нихай складывает себе в какой хочет стейт и как хочет ебется.
Аноним 18/01/25 Суб 19:16:29 3365809 401
Аноним 18/01/25 Суб 19:33:41 3365822 402
>>3365781
Ну тут проблема очевидно в том, что деление ответственности должно быть не по слоям, а по фичам.
Аноним 18/01/25 Суб 20:17:26 3365847 403
>>3365781
Без реального сервера ты просто создашь себе проблем и через год придешь переписывать обратно
Потому что это всегда сорта стульев
Аноним 18/01/25 Суб 20:31:02 3365854 404
>>3365847
Та блин. В чем стулья? Я просто хочу чтобы не возникало 2-3-10 мест где разные состояния и надо их синхронизировать.
Отлаживать это - пизда. Тут юзера изменили. Там он еще не синхронизирвался. Тут - уже, что-то произошло, потекло говно по трубам.
Аноним 18/01/25 Суб 20:44:18 3365862 405
>>3365854
Что значит синхронизировался. Ты пишешь десктоп софт или что?
Аноним 18/01/25 Суб 20:59:44 3365880 406
>>3365862
> Ты пишешь десктоп софт или что
А что еще пишут с MVVM?

> Что значит синхронизировался
Ну. Вот у тебя есть где-то в слое приложения ApplicationState.
В нем CurrentUser.
Этот стейт - реактивный. При этом - синглтрон.

Далее на уровне представления - у тебя есть вью-модель. CurrentUserAvtarPanelViewModel.
Разработчик этой части - решил что ему не хочется просто стейт брать, он хочет сделать свой CurrentUserVisualModel и свой CurrentUserVisualService. И уже сервис такой - берет из стейта, перекладывает CurrentUser'а в свой CurrentUserVisual.
Теперь. Какой говняк происходит. На уровне приложения - говняк, надо разлогиниться. Визуальной части надо получить изменение. И уже у себя изменить. Далее, если визуальная часть изменяется - она должна опять через всю цепочку дать знать ApplicationState что там юзера переименовали или картинку ему поменяли.

Это через год превращается в ебаный цирк.
Аноним 18/01/25 Суб 21:15:08 3365891 407
>>3365880
>синглтрон
Ускоритель одиночек
Аноним 18/01/25 Суб 21:22:20 3365896 408
>>3365880
>А что еще пишут с MVVM?
кто знает. вон Razor Pages например
может блазороведы блазорят блазорки по эмвивиэмному

>На уровне приложения - говняк, надо разлогиниться. Визуальной части надо получить изменение. И уже у себя изменить. Далее, если визуальная часть изменяется - она должна опять через всю цепочку дать знать ApplicationState что там юзера переименовали или картинку ему поменяли.
не уловил сути проблемы. то есть я понимаю задачу, но не твою проблему
Аноним 18/01/25 Суб 21:44:53 3365917 409
>>3365896
> не уловил сути проблемы
Проблема в том, что нет центрального источника истины.
Так понятно?

В обычном жс-фронте, у тебя обычно есть какой-то единый стейт. Он - твой альфа и омега. Все остальные компоненты - лезут в него, смотрят что там. Далее в зависимости от технологии - как-то могут модифицировать, напрямую, через хуки-хуюки, через команды, да поебать. Суть в том что реальный стейт - один. Если тебе надо посмотреть что происходит - ты берешь компонент, берешь стейт. Сравниваешь. Обычно связь такая: Компонент - стейт. Все. Изолировать какую-то пробему - просто.

В ситуации же которую я описал - у тебя стейтов несколько на нескольких слоях. Какой правильный - хуй его знает.
Особнно охуенно, когда визуальный стейт - взял, и обновил себя заранее, не дожидаясь что на уровне приложения, а приложение кинуло ValidationException которое улетело в пустоту, и типа - вот кнопку нажал, что-то загорелось, должен следующую нажать, нихуя не происходит. Иди ищи. А приложение-то не кинет изменения состояния, чтобы визуальный стейт синхронизировался теперь, ведь изменения не произошло. Вот теперь у вас два состояния, одно визуальное, одно на уровне ниже.

И единственное решение которое я вижу - все состояние должно уехать на "визуальный" уровень. А то что ниже - только выполнять команды и в базу писать. Все.
Аноним 18/01/25 Суб 22:12:06 3365920 410
>>3365917
>взял, и обновил себя заранее
что обновил заранее? зачем ты обновляешь заранее? сначала ты выделяешь дополнительный "локальный" стейт чтобы через него работать как то его синхронизируя, а потом жалуешься что оно дескать может быть не синхронно.

>у тебя стейтов несколько на нескольких слоях
у тебя
ты плодишь стейты, хотя они и так есть.
модель - стейт
вьюмодели - визуальный стейт.
Ты либо модифицируешь визуальный стейт, либо, если это касается модели - уже передаешь задачу модели
Каждый отвечает за свою часть - какая еще синхронизация нужна

теперь попробуем понять что ты там понаписал
>И уже сервис такой - берет из стейта, перекладывает CurrentUser'а в свой CurrentUserVisual
ммм. ну обычное дело. чай визуальная модель и модель часто не совпадают.
>Визуальной части надо получить изменение. И уже у себя изменить
ну получила и изменила. чем это отличается от твоего жс фронта где подписаны на какой то там стейт, реагируют меняются, но еще одного "сабстейта" не плодят
>Далее, если визуальная часть изменяется - она должна опять через всю цепочку дать знать ApplicationState что там юзера переименовали или картинку ему поменяли.
так устроен MVVM, но опять хз в чем проблема кроме того что вьюмодель посередине между GUI и моделью стоит?

реально не понимаю твою проблему

>возникало 2-3-10 мест где разные состояния и надо их синхронизировать
ключевое СИНХРОНИЗИРОВАТЬ. Непонятно что такое "синхронизировать".

>Тут юзера изменили. Там он еще не синхронизирвался
непонятно где "там".
ты банальное "эй юзерсервис сохрани юзера" заменяешь на " я положу в список, а далее механизм синхронизации уведомит кого то в модели и засинкает изменения"?

в общем я нипанимат что ты хочешь наворотить и зачем.
Аноним 18/01/25 Суб 22:13:32 3365921 411
>>3365917
А ты чего не сделаешь единое состояние, которое переживает все вью-модельки? А вью-модельки создадутся поверх него и подпишутся на его события?

Выглядит как будто у тебя основная логика уехала на вью-модельный уровень, а уровень репозиториев у тебя слабый.

Ещё вопрос. А чего вы на экране рисуете? Что-то сложное?
Аноним 18/01/25 Суб 22:13:40 3365922 412
image.png 69Кб, 1149x606
1149x606
Скоро 6 лет опыта разработки на .Net.
Хочу вкатиться в мышиное обучение. Без змеи никак?
Аноним 18/01/25 Суб 22:16:02 3365924 413
>>3365922
Питон уже почти не используется в машинном обучении, это стереотип
Аноним 18/01/25 Суб 22:19:55 3365926 414
>>3365924
Окей, но ML.Net не развивается.
Тогда что же?
Аноним 18/01/25 Суб 22:25:57 3365930 415
Аноним 18/01/25 Суб 22:39:56 3365936 416
>>3365922
Я вообще в финтехе работаю.
Вот думаю, в свободное время может начать участвовать в ML.Net сообществе? Заодно и погрузиться в мышинное обучение без отрыва от основной работы/стека, и может стать частью опуенсорсного сообщества ML.NET? Может, мои коммиты примут со временем, какие-нибудь там статьи напишу, всё такое.

Питонистов, например, сейчас много. А спецов по ML.NET, наверное, меньше. Может и спрос на них на каком-то этапе больше.

https://www.linkedin.com/pulse/embracing-future-machine-learning-comprehensive-guide-bansal--niwzc/
Аноним 18/01/25 Суб 22:53:34 3365939 417
>>3365920
>что обновил заранее? зачем ты обновляешь заранее? сначала ты выделяешь дополнительный "локальный" стейт чтобы через него работать как то его синхронизируя, а потом жалуешься что оно дескать может быть не синхронно.
Я не обновляю заранее. Обновляет заранее тот кто пишет визуальную часть и кто решил что ему надо еще своих стейтов.

> непонятно где "там".
Я ж расписал...
Ну ладно. Еще раз.
Вот у меня приложение для заметок.
Есть NoteModel - определен в App.Domain
Есть NoteService - определен в App.Application
Далее - есть NoteVisualModel - определен в App.UI
Есть NoteVisualService - тоже определен в App.UI
Сбоку есть NoteViewModel - пользуется NoteVisualModel.
NoteViewModel - дергает NoteVisualService
NoteVisualService - дергает NoteService
NoteService - лезет в БД, пытается что-то сделать, обновляет в случае чего NoteModel

Так вот. Теперь у нас включается человеческая криворукость.
Кто-то берет и обновляет стейт NoteVisualModel в обход всего этого дела. В результате - мы имеем неконсистентное состояние. И оно теперь никак не синхронизируется.

> в общем я нипанимат что ты хочешь наворотить и зачем.
Я хочу чтобы добиться неконституционного состояния было нельзя...

>>3365921
А я изначально так и хотел. Чтобы у нас был на уровне приложения определен стейт. И из него просто брали, и пытались модифицировать. Но по ряду причин, в виде 3 сеньеров, которые каждый сам с усам - получилось что получилось.

> Выглядит как будто у тебя основная логика уехала на вью-модельный уровень, а уровень репозиториев у тебя слабый.
Именно прикладная логика - на уровне приложения. Полностью.
Просто там дюже много красявостей, типа тут что-то изменилось., там должно заморгать, при наведении мышки - перестать моргать, там заблокироваться, тут прогрессбар с процентами... Ну короче, там из-за того что дизайнеры надизайнили красявостей таки получилось так, что вот эти красявости много логики и на визуале в плане этих самых красявостей требуют.
При этом - не хочется чтобы эти требования к красявостям проникали на уровень ниже.

> Ещё вопрос. А чего вы на экране рисуете? Что-то сложное?
Ну. Не то чтобы прям сложное. Просто типа вот нажали кнопку на этой панельке, там должно заблокироваться, тут - заморгать индикатор, это подсвечиваться.
Плюс - возможность пользователю все перенастроить, скрыть, перетащить куда надо, ресайзить и вот это вот все.
Раньше было заебись - берешь DevExpress и погнали. Щас DevExpress нельзя, приходится искать что-то более-менее годное или руками делать.
Аноним 18/01/25 Суб 23:02:30 3365941 418
>>3365939
>неконституционного
неконсистентного
фикс
Аноним 18/01/25 Суб 23:28:08 3365953 419
>>3365939
>При этом - не хочется чтобы эти требования к красявостям проникали на уровень ниже.

А у тебя выбора другого нет. Если одни элементы визуально связаны с другими - ты хоть разбейся, но придётся это выносить на более глубокий общий слой.

От тебя по ходу требуют писать красивое приложение с анимациями и прочей поеботой, но ты сопротивляешься. А у тебя домен по ходу это рюшечки и моргающие кнопки
Аноним 18/01/25 Суб 23:33:28 3365956 420
>>3365953
Нууууу. Я это обошел через шину.
Что-то происходит на уровне домена - визул реагирует. Домену похуй на взаимосвязь визуальную.
А так - да. Требуют рюшей.
Но я уже не раз был в ситуации, когда сначала требуют красявостей, чтобы показать. А через неделю пользования - прилетает от конечного пользователя - дайте возможность все красявости нахуй вырубить и вот такенный список уже нормальных требований по функционалу. Потому - не дам этой хуйне место в домене.
Аноним 18/01/25 Суб 23:33:37 3365957 421
>>3365939
решение твоей проблемы просто - ВЫПИСЫВАНИЕ ПИЗДЮЛЕЙ тому, кто пишет херню и нарушает правила.
потому что можно из вида и напрямую в бд залезть и в космос и вообще в другую реальность. Вот только это будет уже нарушение паттерна

насчет NoteVisualModel
смотря что ты под ним понимаешь.
вот для меня есть пара стульев
1 каждая вьюмодель держит в себе свой стейт и общается с другими вьюмоделями какими то событиями заставляя их менять свой визуальный стейт. Все размазано, особенно беда с командами и антипаттер god object много где
2 делаем единый стейт который помесь медиатора с вьюмоделью/презентнорм. Всё меняется в нем и вьюмодели слушают уже его изменения используют напрямую. И команды в нем - он в модель и ходит. Далее изменяет свой стейт и вьюмодели обновляют себя.

и оба варианта говно.
Аноним 19/01/25 Вск 00:24:40 3365982 422
>>3365957
Ему просто нужна такая древняя магия дидов как потребитель-производитель ака событийная модель взаимодействия.
Очевидно он пытается сделать так чтобы разные части приложения реагировали на какие-то действия в других частях. Единственный правильный способ сделать такое это создать сквозной слой шины событий.

Если событийная модель приводит к разделению атомарной операции на части, то ты неверно провел границы модулей или неправильно понимаешь границу атомарности операции.
Аноним 19/01/25 Вск 01:48:34 3366018 423
Аноним 19/01/25 Вск 04:25:38 3366045 424
Аноним 19/01/25 Вск 08:51:47 3366133 425
Есть проект на авалонии, в котором используется directx11 (а точнее Direct2D) для графики. Хочу сделать его кроссплатформенным, и есть два стула, либо мигрировать с Direct2d на skia, либо попробовать использовать dxvk. Насколько реалистичен второй вариант?
Аноним 19/01/25 Вск 09:32:24 3366155 426
>>3365957
Вьюмодели придумали пидарасы из микрософта, когда надо было впарить новую вижуал студию. Получилось хуево, как обычно у мелкомягких, и теперь джуны путаются снова и снова.
Есть классическая схема работы десктопных приложений: UI, контроллер, сервис. Контроллер получает данные от UI и передает в сервис. Или получает данные из сервиса и передает в UI. Есть шина событий, на которую подписан контроллер. Данные поменялись, контроллер получил уведомление, запросил данные у сервиса, сказал UI, что надо перерисовать тектбокс. Все просто, не надо никаких медиаторов-хуяторов.
Аноним 19/01/25 Вск 09:59:00 3366174 427
>>3366155
Ты наркоман. VeiwModel нужна для дестктопа. Тебе нужно где-то хранить состояние UI.
Аноним 19/01/25 Вск 10:34:44 3366183 428
>>3366174
Нет, ты. Как, по-твоему, работают программы на других фреймворках или вообще без фреймворков? Рак под названием MVVM есть только в дотнете, и даже там существует код на винформсах.
Аноним 19/01/25 Вск 11:46:12 3366214 429
>>3366155
> То, на что ты тратишь по абзацу текста обычно называют сокращением, чтобы не ебать мозги окружающим. Пойди, почитай про MVC, MVP, MVU, MVVM, и прочее
Аноним 19/01/25 Вск 14:34:07 3366411 430
>>3366183
Vue и Angular так-то под MVVM...
Просто там как я уже говорил - стейт обычно не множется. Есть какой-нибудь Vuex, Pina, NgRx и т.д.
Ты загрузил с сервера куда тебе надо состояние. Все. Пока не перезагрузишь - оно такое и будет. Все компоненты - какими-нибудь геттерами подвязались к этому стейту и радуются.

Если нужно чтобы сервер как-то сообщал: вебсокеты и теми же механизмами в тот же самый стейт.

А вот в десктопе какая-то фигня получается(
Аноним 19/01/25 Вск 14:34:55 3366414 431
>>3366155
>сказал UI, что надо перерисовать тектбокс.
во-первых, чистый MVC неудобен для десктопа
его вариант типа MVP был возможен для формсов ибо там не было (а может и щас нет) вменяемых биндингов

MVVM используется там где есть БИНДИНГИ
и это не только дотнет. в андроид тоже MVVM и БИНДИНГИ
Аноним 19/01/25 Вск 14:46:56 3366423 432
n4LoL.jpg 143Кб, 800x679
800x679
>>3366411
>А вот в десктопе какая-то фигня получается(
в десктопе дается общий механизм MVVM
и без наличия других правил каждый терзается по своему
вот обычные MVVM фреймворки похожи, есть сложные типа PRISM
но они больше решают вопросы навигации, разделения на блоки, но как то обходят вопросы "а как лучше поделить на вьюмодели, что в них хранить, а куда команды то..."
Некоторые изобретают MVVMC фреймворки (и носятся с этой диаграммой на пике)...каждый по своему понимая что тут есть контроллер.
У меня вот MVVMP подход

слишком много свободы и, как обычно, подводные камни обходятся молчанием.
Аноним 19/01/25 Вск 15:24:37 3366455 433
>>3366423
>А вот в десктопе какая-то фигня получается(

ты заебал
Аноним 19/01/25 Вск 20:08:22 3366727 434
>>3366423
У тебя подход насрать в одну кучу. Вью и контроллер - это один слой. Бизнес-логика - это следующий слой. Контроллеру не надо знать про recognition engine, его задача - в нужный момент вызвать IRecognitionService.PerformRecognition(string filePath), получить List<RecognitionResultDTO> и дальше скормить этот лист во вью.
Аноним 19/01/25 Вск 21:08:54 3366782 435
>>3366727
основной жалобщик в этом треде не я. Я сам написал кучу WPF фреймворков так что у меня свой франкенштейн с контроллерами и лайфтаймами, и прочими причудами что не канон

но высказаться я могу....
это как раз у MVVM подход "насрать все в кучу" (он и стейт вида обрабатывает и команды в нем же), что и делает его GodObject. Попытки разгрузить вьюмодели и приводит некоторых ко всяким контроллерам (тут уже каждый по своему понимает что он должен делать.)

А этот пик просто бродит по инету и я хз чего это они какой то там Engine отделили от модели.

>Контроллеру не надо знать про recognition engine, его задача - в нужный момент вызвать IRecognitionService.PerformRecognition(string filePath)
ты же сам понимаешь что этот твой коммент лишен смысла? но это ладно. какая разница то.
Аноним 19/01/25 Вск 23:19:52 3366837 436
>>3366423
>recognition engine,

Почему так дохуя всего на схеме? На каком уровне медиатр подключен? Это DDD?
Аноним 19/01/25 Вск 23:56:12 3366858 437
>>3366837
пациент, вернитесь в палату
Аноним 20/01/25 Пнд 00:32:45 3366870 438
>>3366837
Это троллинг такой?
Аноним 20/01/25 Пнд 08:28:26 3366987 439
image.png 501Кб, 1888x913
1888x913
Ищу картинку про методологии тестирования, чтобы по нормальному именовать проекты.

Возникает вопрос. Они там чего, блядь, ебанулись все? Почему буквально каждая следующая "тестовая пирамида" отличается от предыдущей?

Особенно доставляет, что есть даже одна перевёрнутая с ног на голову.
Аноним 20/01/25 Пнд 08:44:03 3366988 440
>>3366987
Потому что гуманитарии пытаются косить под инженеров и примазаться к айтишной тусовке ради бабла, но свою суть им никогда не изменить.
Аноним 20/01/25 Пнд 15:35:46 3367222 441
.NET MAUI конечно хорошо но нет ли способа попроще сделать приложение на андройд?
Приложение просто 1 раз запустить без гуя, и что бы оно работало в фоне.
Аноним 20/01/25 Пнд 15:43:06 3367230 442
Пишу на C++, но у вас тред живее и вопрос однохуйственен.

Почему Visual Studio временами перестает компилировать код, я ебу мозга, но при банальном перезаходе или перезагрузке он компилируется?

Иногда не компилируется даже после перезагрузки, но банальное создание нового проекта и перепечатка всех прежних внешних файлов без изменений снова делает компиляцию корректной?

Это уже рождает параною. Я не понимаю, не компилируется из-за ошибки какой конкретной, или это неведомой хуйни ебовеной и поможет перезапуск.
Аноним 20/01/25 Пнд 15:49:23 3367238 443
>>3367230
Да хуй знает.
На редите читал что проблема давняя.
Может ебануть ошибок кучу, а при пересборке ошибки пропадут.
У меня иногда теряет точку входа Main, а при перезапуске находит её и все норм.
Ну такова что бы при пересборке или после перезапуска что то с нихуя не компилировалась такова небыло.
Аноним 20/01/25 Пнд 15:58:28 3367248 444
>>3367238
Я одно поле из private в public перевел для одного теста, эта залупа минуту одупляла до этого, чтобы без ошибок скомпилировать. Тупая манда блядь.
Аноним 20/01/25 Пнд 16:01:56 3367253 445
>>3367248
Какая версия студии у тебя?

Алсо поотключай в настройках все лишние анализаторы и фоновые активности.
Аноним 20/01/25 Пнд 16:02:28 3367255 446
>>3367230
Оператива/не хватает пространства на диске.
Аноним 20/01/25 Пнд 16:37:40 3367310 447
>>3367222
Просто обёртки возьми. То, что раньше называлось xamarin native
Аноним 20/01/25 Пнд 17:19:37 3367342 448
>>3367230
Я не пишу на сипипи. Но на сипипи же хуева гора сборочных систем, мейк всякий, и так далее. Выкидывай нахуй всё нестандартное и пересоздай проект из шаблона в студии, а туда свой код перенёси.

Непонятная хуета пропадёт и либо оно начнёт нормально собираться, либо ты всё нахуй сломаешь.

Либо по началу как бы соберётся, но это пиздёжь и самом деле ты упустишь какую-то мелкую деталь и у тебя будет стрелять исключение где-нибудь в ночь на крещение в 2027 году.

Ты никогда не узнаешь если не попробуешь.
Аноним 20/01/25 Пнд 18:27:53 3367445 449
>>3367342
>Но на сипипи же хуева гора сборочных систем, мейк всякий, и так далее.
Вот, кстати, одна из причин, почему я и забил в свою время на плюсы. Любой, сука, проект будет совершенно по разному собираться. И к каждому нужно еще кучу всяких тулзов и прочей хуйни найти и понаставить, чтобы это просто собралось, не говоря уже про запустилось.
Аноним 21/01/25 Втр 08:19:27 3367810 450
>>3367445

Ну что сказать, у нас кросс-платформенный csproj, в котором пара настроек и dotnet build
Аноним 21/01/25 Втр 21:09:06 3368490 451
>>3360331
> Кстати почему медитр говно

А есть какая-то проблема, которую он решает? Мне так никто и не объяснил, нахуя он нужен.
Аноним 21/01/25 Втр 22:17:15 3368529 452
изображение.png 44Кб, 1271x575
1271x575
Наконец-то я дочитал книжку до главы ВЫРАЗИТЕЛЬНОСТЬ. Теперь, я узнаю, почему котлин такой выразительный!
Аноним 21/01/25 Втр 22:55:15 3368545 453
>>3368529
потому что его писали с упором на выразительность и создания DSL
поэтому всякий шум типа ; new ()=> и прочего там просто нет.
и есть штуки типа настоящие инлайн функции, функции без классов, скоупы, а также делегирование (когда в шарпе в очередной раз пишу руками класс враппер, то особо об этом вспоминаю не очень добрым, но весьма матерным словом)
Аноним 21/01/25 Втр 23:59:45 3368574 454
>>3368545
>функции без классов
Зумеры изобрели процедурную парадигму. В С вообще все так написано, классов нет только куча ебаных функций.
Аноним 22/01/25 Срд 00:12:34 3368576 455
>>3368574
>Зумеры изобрели процедурную парадигму.
не изобрели, а не стали говорить "нинужна" понимания что штука весьма весьма пользительная.
Аноним 22/01/25 Срд 02:32:56 3368596 456
>>3368574
Там и структуры заново изобрели. Называют их дата-классами.
Аноним 22/01/25 Срд 05:16:45 3368618 457
Писать ботов для игр это к какому программированию относится?
Аноним 22/01/25 Срд 09:06:19 3368701 458
>>3368576
А кто-то говорил что не нужно? Статические классы в любом ООП языке это процедурный стиль.
Вообще я почти уверен что мне даже еба сениоры с трудом ответят на простой вопрос "процедура и функция это одно и тоже?"
Аноним 22/01/25 Срд 09:15:25 3368717 459
>>3368701
> процедура и функция это одно и тоже?

Попробую ответить, хоть и не еба сениор
Функция - всегда возвращает результат и в большинстве случаев должна не иметь сайд-эффектов.
Процедура - имеет сайд эффекты и может не возвращать результат.
Помнится в паскале для них даже отдельные ключевые слова были.
Аноним 22/01/25 Срд 09:21:49 3368724 460
изображение.png 50Кб, 901x360
901x360
изображение.png 84Кб, 901x360
901x360
Нахера они продублировали одинаковый энам, я хуй знает
Аноним 22/01/25 Срд 09:28:03 3368731 461
>>3368545
>потому что его писали с упором на выразительность и создания DSL

Спасибо! Теперь понятно, почему котлин такой выразительный.
Аноним 22/01/25 Срд 09:54:59 3368749 462
>>3368717
Все отличие в том что процедуры не возвращают значения.
Аноним 22/01/25 Срд 09:55:54 3368751 463
>>3368724
Потому что ты не отличаешь enum от класса.
Аноним 22/01/25 Срд 10:42:10 3368789 464
>>3368596
не изобрели, а взяли концепцию кортежа. Ты не изобрел колесо, хули ездишь на транспорте.

>>3368701
>А кто-то говорил что не нужно?
не могу в шарпе создать функцию без необходимости запихать ее в какой либо класс. минимал апи то вообще не то.

>>3368731
вот. все именно так и произошло. шарп тупо копировали "сделаем свою жаву" и потому в основе это калька с жавы и только потом уже стали сахар накидывать, а в котлин сразу закладывалось DSL
Аноним 22/01/25 Срд 12:52:59 3368887 465
>>3368751
Не заметил, спасибо. Но всё равно выглядит как хуйня из жопы
Аноним 22/01/25 Срд 12:55:22 3368888 466
>>3368751
что не отвечает на вопрос НАХРЕНА
Аноним 22/01/25 Срд 12:55:46 3368889 467
>>3368789
>только

Короче, можешь ещё раз повторить, что такое ВЫРАЗИТЕЛЬНОСТЬ?

Я нихуя не понял, для меня это как пиздануть что-то гуманитарное наподобие "Котлин лучше c# потому что он более РЕФЛЕКСИВНЫЙ и ИМАДЖИНИРУЮЩИЙ".
Аноним 22/01/25 Срд 12:59:45 3368897 468
>>3368889
ну значит и не поймешь. какой смысл
Аноним 22/01/25 Срд 14:12:07 3368988 469
>>3368889
>Короче, можешь ещё раз повторить, что такое ВЫРАЗИТЕЛЬНОСТЬ?
Весь прошлый тред это обсуждали и все уперлось в то, что это просто когда сахарок в одном языке якобы лучше чем сахарок в другом. Причем критерий "лучшести" - это либо следствие синдрома утенка, либо просто представления о прекрасном конкретного кнопкодава.
Аноним 22/01/25 Срд 15:03:56 3369022 470
>>3368988
>когда сахарок в одном языке якобы лучше чем сахарок в другом
не якобы, а лучше.
ты не пишешь на жаве, а на шарпе потому что шарп сильно слаще жавы. или это якобы?

>просто представления о прекрасном конкретного кнопкодава.
гм. а чего это шарп такой перетащил primary constructors, backing field, если это же просто чужой сахар который ЯКОБЫ лучше?
загадка природы.
Аноним 22/01/25 Срд 16:04:49 3369053 471
>>3369022
> не якобы, а лучше.

Что лучше?

> ты не пишешь на жаве, а на шарпе потому что шарп сильно слаще жавы. или это якобы?

я не пишу на сишарпе, я пишу на дотнете. Нахуй мне всрался ваш синтаксический сахарок, который неебически выразительный если надо ебаться с градлом, который сам сломался - сам починился на следующий день?
Аноним 22/01/25 Срд 16:40:36 3369076 472
image.png 9Кб, 630x179
630x179
image.png 51Кб, 996x516
996x516
Ребяты, почему все в дроп уходит? Что не так делаю?
Мб в RabbitMQ надо создать очередь?
Аноним 22/01/25 Срд 16:48:45 3369082 473
>>3369076
Хз, никогда через обёртки типо масс-транзита не работал. Всегда вручную
Аноним 22/01/25 Срд 17:11:22 3369107 474
>>3369082
через RabbitMQ Client всё норм получилось(
Аноним 22/01/25 Срд 17:54:49 3369143 475
>>3369107
>получилось
и иди нахуй со своим ебучим масс транзитом пиши DDD поеботу, не забудь в медиатр затолкать
Аноним 22/01/25 Срд 18:13:11 3369163 476
>>3369143
>и иди нахуй со своим ебучим масс транзитом пиши DDD поеботу, не забудь в медиатр затолкать
Ну бля че в гугле первое выдало то и изучаю)
Аноним 22/01/25 Срд 19:19:06 3369250 477
>>3369053
>Что лучше?
сахар ))
вон даже шарп к себе некоторое тащит. Правда кривовато по сравнению с оригиналом, но тащит.

>если надо ебаться с градлом
принимается. сам в шоке как там все непонятно (если не читать мануалов, а я конечно их не читал ни одного по градлу), но....котлин то тут причем. можешь не юзать градл.
Аноним 22/01/25 Срд 19:28:53 3369260 478
>>3368888
Ну не знать чем енам лучше чем поля статического класса это уже клиника. Стажер лвл.
Аноним 22/01/25 Срд 19:37:18 3369280 479
>>3369260
то есть ты хочешь сказать что имеется енам И статический класс потому что делал стажер, который не понимал разницы? или что ты хотел сказать?
Аноним 22/01/25 Срд 20:06:59 3369317 480
Коллеги, вы как считаете что правильно.
Валидация DTO входной или entity?
Аноним 22/01/25 Срд 20:22:04 3369327 481
>>3369317
а как ты собираешься из DTO собирать entity если в dto половины нужных данных может просто не быть?
Аноним 22/01/25 Срд 20:24:40 3369328 482
>>3369327
Круче. Уже собирается и проверяется именно entity. DDD епта, нам важно следить за доменом.
Аноним 22/01/25 Срд 20:52:11 3369352 483
>>3369317
>Коллеги, вы как считаете что правильно.
Как написано в ТЗ и заложено в архитектуре.
Аноним 22/01/25 Срд 21:02:13 3369361 484
>>3369317
Энтити, очевидно. Как вообще валидировать DTO? Тащить бизнес-логику в контроллеры, которые должны быть тонкими? Или передавать DTO в сервисы, которые не должны зависеть от транспорта? Оба варианта выглядят так себе.
Аноним 22/01/25 Срд 21:05:58 3369363 485
>>3369260
Буквально ни чем?
Уж точно не шарповские.

Енамы нужны хорошие. Не эта хрень из времен сей;

В духе:

public enum Color
{

puiblic readonly byte R;
puiblic readonly byte G;
puiblic readonly byte B;

Color(byte r, byte g, byte b){
R = r;
G = g;
B = b;
}

RED(255, 0, 0);
GREEN(0, 255, 0);
BLUE(0, 0, 255);

}

И чтобы с коробки нормально можно было для них форичи делать. Чтобы можно было запечатать его и нельзя было привести что-то к нему просто так.

Те енумы что в шарпе есть - это говно из жопы и в принципе от статического класса не отличается ничем.
Аноним 22/01/25 Срд 21:09:19 3369365 486
>>3369361
>Энтити, очевидно.
то есть сущности могут быть в невалидном состоянии? ну ок ок )))
Это точно DDD?
Аноним 22/01/25 Срд 21:09:48 3369366 487
>>3369250
>сахар ))

Чем что лучше? У меня вот в сишарпе 4-5 сахаров над интерполяцией строк:
@$"""{a}"""
$@"{{a}}"
"""This is a "raw string literal". It can contain characters like \, ' and "."""
$"|{"Left",-7}|{"Right",7}|"

2 синтаксиса для инициализации словарей
Dictionary<string, int> d = new () { {"", 1}};
Dictionary<string, int> d2 = new Dictionary<string, int> { [""]= 1};

2-3 сахара над инициализацией коллекций

3-4 сахара над паттерн-манчкином

заебёшься считать, сколько сахаров над свойствами

я ебал эти ваши сахары новые. Я иногда даже думаю свалить на менее ВЫРАЗИТЕЛЬНЫЙ GO, там вроде нихуя нет. но если я свалю на ГО, то в нём решат добавить ВЫРАЗИТЕЛЬНОСТИ, ООП и опять всё по новой.
Аноним 22/01/25 Срд 21:10:33 3369367 488
>>3369363
>в принципе от статического класса не отличается ничем.
отличаются все же, просто поборник энама не может ответить "а нах.... тогда статический класс еще вообще существует"
Аноним 22/01/25 Срд 21:14:00 3369369 489
>>3369363

> Те енумы что в шарпе есть - это говно из жопы и в принципе от статического класса не отличается ничем.

энумы это буквально числа. Если тебе нужны объекты - просто пользуйся объектами
Аноним 22/01/25 Срд 21:17:27 3369372 490
>>3369365
Ну да, это правильно. Пока не вызвал валидацию, сущность не валидна.
Аноним 22/01/25 Срд 21:17:57 3369373 491
>>3369366
ну это ты сахарную пудру какую то притащил
этим как раз шарп страдает.
в котлине такой херни нет

просто там ИСКАРОПКИ много чего что в шарпе "каждый делает как хочет и ЕСЛИ МОЖЕТ"

Котлин позволяет создать jetpack compose (который просто шикарен в плане своей выразительности описания ui и при этом полноценный код, а не хамлы всякие), на шарпе же будет уродство, потому что нет ни инлайн методов, ни скоупов, ни делегации, ни даже extension property, ни расширения статического класса, ни аналога object, ни автореализации интерфейсов

Зато есть куча синтаксического мусора в виде new, ;, ()=>, принадлежности к классам

То есть шарп не способен в принципе создать такое.
Аноним 22/01/25 Срд 21:18:32 3369374 492
>>3369361
>Как вообще валидировать DTO?
Атрибуты например навесить. Типа [Required], [Compare], [Range], etc или вообще свои создать. Тогда оно будет отсеиватся еще до попадания в контроллер и он у тебя таким же тонким и останется.
А бывает вообще валидация на стороне клиента еще до отправки запроса.
Аноним 22/01/25 Срд 21:18:48 3369376 493
>>3369372
хреновая это сущность если ее можно ввести в невалидное состояние.

небось из бд эти сущности иногда читаете частично, да?
Аноним 22/01/25 Срд 21:22:58 3369378 494
158685101500011[...].jpg 83Кб, 1280x720
1280x720
>>3369363
>public enum Color
>{
>
>puiblic readonly byte R;
>puiblic readonly byte G;
>puiblic readonly byte B;
>
>Color(byte r, byte g, byte b){
>R = r;
>G = g;
>B = b;
>}
>}
Аноним 22/01/25 Срд 21:24:08 3369379 495
>>3369373
>в котлине такой херни нет
хуя у тебя синдром утёнка. котлин это буквально квинтэссенция сахара
Аноним 22/01/25 Срд 21:26:19 3369381 496
>>3369374
А есть атрибут, который проверяет, что поле с id по внешнему ключу есть в БД и что статус соответствующей записи разрешает на неё ссылаться?
Аноним 22/01/25 Срд 21:29:53 3369387 497
>>3369373
>Котлин позволяет
Да поебись ты уже со своим котлином и успокойся.
Если у тебя на него такой стояк, то что-ты в .net треде делаешь?
Аноним 22/01/25 Срд 21:31:24 3369388 498
>>3369379
на шарпе я пишу с его рождения. нужно пояснять, что это задолго до котлина?

>котлин это буквально квинтэссенция сахара
верно. сахар есть сахар - с ним просто ПРОЩЕ жить
но не по 10 вариантов одного сахара в разном виде.
ты же на это жалуешься

Потому что одно дело иметь доп синтаксис инициализации массива/словаря

и совсем другое дело иметь фичу уровня делегации свойств.

конечно и в шарпе есть такое - тот же Linq он как раз про выразительность. И Expression.
Такого в котлине нет и с этим плохо по понятным причинам.

>>3369387
>то что-ты в .net треде делаешь?
я шарпист. мой основной хлеб это шарп. на котлине я пишу только под андроид, когда натрахавшись с замарином просто выучил другой язык. И оценил его выразительную мощь

А шарп я заслуженно!!! критикую. Шарп хорош, но в нем хватает говна.
Аноним 22/01/25 Срд 21:35:04 3369394 499
>>3369317
DTO - это anemic OOP. Используется в современных клаудах.
Entity - это rich OOP, используется в некро копро легаси для десктопа.
Аноним 22/01/25 Срд 21:39:21 3369402 500
Аноним 22/01/25 Срд 21:40:01 3369404 501
>>3369381
Если тебе делать нехуй, то можно и такой собрать.
Поинт был в том, что валидация может хоть какой быть. На уровне ДТО, или сущности. Может вообще на стороне клиента пройти. А может и где-нибудь посередине бизнес-процесса, когда сущность обогатится.
В большинестве проектов она размазанная по всем этим способам, а утверждать, что только твой вариант верный - долбоебизм.
Аноним 22/01/25 Срд 21:40:15 3369405 502
>>3369373
> выразительности
смотри там, не обдрочись
Аноним 22/01/25 Срд 21:44:05 3369408 503
>>3369361
Открою тебе страшную тайну. Крч умные люди встраивают валидацию на уровне мидлвари ещё до попадания кода в контроллер.
Логика валидации при этом находится в АПИ слое. Нужные зависимости прокинуты через DI. Реализации лежат на слое приложения. Но это очень кривая система если тебе надо дохуя контекста для валидации.
Аноним 22/01/25 Срд 21:45:44 3369409 504
>>3369388
>но не по 10 вариантов одного сахара в разном виде.
Ну хуй знает. Если например с той же интерполяцией, то я предпочту кучу вариантов шарпа, чем например её огрызки в джаве.

>>3369388
>конечно и в шарпе есть такое - тот же Linq он как раз про выразительность. И Expression.
>Такого в котлине нет и с этим плохо по понятным причинам.
Ну так о том и разговор. Опять приходим к тому же: "Выразительность" языка - это просто когда кто-то предпочитает один сахар другому. При том, что когда в типа "невыразительном" языке есть сахар лучше, он почему-то все равно не становится "выразительным"
Аноним 22/01/25 Срд 21:51:44 3369411 505
Ладно, так и запишем, лол:
DDD - ЭТО ДОЛБОЕБИЗМ
Аноним 22/01/25 Срд 21:55:29 3369413 506
>>3369394
>DTO - это anemic OOP. Используется в современных клаудах.
>Entity - это rich OOP, используется в некро копро легаси для десктопа

Хуя себе умник! Давай ка подробнее, чего ты там вычитал в своих статьях на медиуме?
Аноним 22/01/25 Срд 22:01:36 3369416 507
>>3369405
>смотри там, не обдрочись
почему это. в шарпе мне такое не предлагают. там предлагают сраный хамл.
поэтому дрочил, дрочу и буду дрочить на шикарные вещи.
А вот на хамл не буду. Дрочить на говно как то....ну может кому и норм, а мне нет.

>>3369409
>Выразительность" языка - это просто когда кто-то предпочитает один сахар другому.
выразительность это способность реализовать функционал кратно и читабельно, то есть выразительно
Знаешь про Fluent синтаксис. Вот это как раз из этой оперы про выразительность.
А теперь посмотри на инциализацию ktor и сравни где приятнее
но это ты можешь сказать "На вкус и цвет есть два стула..."
но это означает что ты любишь есть хоть говно.

про primary constructor и backing field наглядные примеры
если ты не будешь ими пользоваться, ну значит ты неприхотлив, но вот если будешь....
Аноним 22/01/25 Срд 22:04:44 3369417 508
>>3369369
Мне в приложении нужен список ролей. Он заранее известен и понятен.
Но что я должен делать с охуенными енамами что есть сейчас?
Я делаю енам, который просто циферка, потом я делаю таки класс Role, и начинаю пляски с бубном чтобы не давать никому создавать что-то неправильное.

А далее появляются еще разрешения, которые тоже заранее известны в рамках обозначенных ролей. И опять. Я делаю енам. А потом делаю класс такой же.

Короче. Жопа происходит.

А объекты. Я не могу просто так взять и, например, перебрать их. Не могу удобно сравнить их. Не могу в свич засунуть

switch(role)
case ADMIN: // todo handle admin


Сверху. Какая-то доменная логика - УДОБНО чтобы она была в этом енаме. Но что я должен делать? Я должен писать экстеншн метод. НАХУЯ? Почему из коробки нельзя просто:

if(role.HasAccess(some))
?


Типа. Ну серьезно. Ну серьезно....

Я все сказал. Меня вы не переубедите. Текущие енамы - говно. Нужны более мощные.
Аноним 22/01/25 Срд 22:07:19 3369419 509
>>3369417
Текущие это просто алиас для интов (или байт)
Аноним 22/01/25 Срд 22:21:09 3369435 510
Рагамаффин-768x[...].jpg 53Кб, 768x492
768x492
>>3369317
Единственно правильная валидация - доменная валидация в бехевиоре MediatR.

На серьёзных проектах как правило заменяют устаревший DI контейнер на MediatR+FluentValidation полностью - это позволит тебе написать один общий валидатор на все валидируемые объекты: хендлеры команд, события, сущности, агрегаты, репозитории. Таким образом, в DDD всё - это валидируемый объект.

Таким образом, пишешь валидатор один раз, а валидируются все объекты, попадающие в CQRS пайплайн.
Аноним 22/01/25 Срд 22:24:48 3369439 511
>>3369416
>Знаешь про Fluent синтаксис. Вот это как раз из этой оперы про выразительность.

Рот я ебал того мудака, который придумал через точечку писать и назвал это гордым именем ФЛУЕНТ. Я думал, мода на это говно прошла в 2018 году.

Там же не отладишь нихуя
Аноним 22/01/25 Срд 22:26:43 3369441 512
>>3369435
>MediatR
Сразу мимо. Это говно надо огнём выжигать.
Аноним 22/01/25 Срд 22:30:12 3369446 513
>>3369417
> Я делаю енам, который просто циферка, потом я делаю таки класс Role, и начинаю пляски с бубном чтобы не давать никому создавать что-то неправильное.

> А далее появляются еще разрешения, которые тоже заранее известны в рамках обозначенных ролей. И опять. Я делаю енам. А потом делаю класс такой же.

Нахуя ты систему ролей сам пишешь? возьми станартную

> А объекты. Я не могу просто так взять и, например, перебрать их. Не могу удобно сравнить их. Не могу в свич засунуть

> Я все сказал. Меня вы не переубедите.

А тебя никто и не пытался переубедить, иди на хуй от сюда
Аноним 22/01/25 Срд 22:32:36 3369447 514
>>3369441
>> MediatR
> Сразу мимо. Это говно надо огнём выжигать.

Есть еще вариант писать валидаторы через Automapper.

Маппишь условно либо на сущность, либо на ошибку в зависимости от логики. Валидаторы описываешь в декларативной форме прямо в конфигурации
Аноним 22/01/25 Срд 22:37:47 3369452 515
>>3369417
Ну во первых, я могу понять когда ты пермишены прибиваешь к коду, но роли то нахуя в енамы пихать? Роли это буквально набор пермишенов и весь их прикол, что они динамические и могут создаваться и менятся на лету.
А во вторых, ты по сути хочешь от простого перечисления полного функционала класса. Ну так и пользуйся классами.

>А объекты. Я не могу просто так взять и, например, перебрать их. Не могу удобно сравнить их. Не могу в свич засунуть
А ты не торопись, подумай и поймешь, что можно.
Аноним 22/01/25 Срд 22:56:18 3369466 516
>>3369435
>Единственно правильная валидация - доменная валидация в бехевиоре MediatR.

Сразу нахуй. За обычное использование MediatR-а (реквестов и хендлеров) в нормальных местах тебя сходу обоссут, а за использование его behaviour-ов так и по кругу опустят. Они очень легко превращают код в маленький филиал ада, с регистрацией 100-ни бехейвиоров в Startup.cs с припиской капсом "НЕ МЕНЯТЬ ПОРЯДОК РЕГИСТРАЦИИ". Потом это дерьмо хрен отладишь, особенно если до тебя ещё успел поработать сверхразум, любивший дергать медиатор из его же хендлеров и бехейвиоров (в том числе из правил FluentValidator'а, который в одном из них вызывался).
Аноним 22/01/25 Срд 23:07:04 3369475 517
>>3369466
Кстати стандартные штуки fluentvalidation не работают с минимал апи и тд.
Есть какой-то интересный способ встроить его в мидлвари запросов самому и чтобы кайф ловить?
Аноним 22/01/25 Срд 23:09:47 3369478 518
>>3369466
Но доменная валидация невозможна без медиатра.
Аноним 22/01/25 Срд 23:16:24 3369483 519
>>3369466
>Потом это дерьмо хрен отладишь, особенно если до тебя ещё успел поработать сверхразум, любивший дергать медиатор из его же хендлеров и бехейвиоров (в том числе из правил FluentValidator'а, который в одном из них вызывался).

Всегда так делаем. В любом нормальном DDD репозитории без бехевиоров невозможно. Как ты иначе будешь делать асинхронные запросы без доказательства последовательного исполнения? Чел, ты вообще про СQRS хоть читал? А про аоп?

Любая доменная валидация должна сама понимать, что ей пора отработать, и не важно, из какого пайплайна её триггернули, из раббита или из ЮД
Аноним 22/01/25 Срд 23:21:08 3369485 520
>>3369478
Жирно.
>>3369483
Либо ты жирнишь, либо непрофпригоден. Если второе, то напиши название шараги, где работаешь. Буду ее стороной обходить, когда в следующий раз работу искать буду.
Аноним 22/01/25 Срд 23:23:24 3369486 521
>>3369452
1. Таки я просто как пример привел. Когда нам нужно перечисление, но это перечеисление должно не только ограничиваться циферкой какой-то.

2. Приложения разные бывают. Вот допустим многим нужно чтобы был просто админ и неадмин. Адимн - все может. Неадмин - базовый функционал. Ну или типа демоюзер-полноценный, аналогично. Если про десктоп-то говорим. Мне не нужна особо охуенная система ролей.

3. Ну как я так просто запихну в свич класс-то?
Да. Сейчас я могу наследоваться, и паттернамтчингом хуйнуть. Но тогда - у меня либо самому следить за тем чтобы объект этого типа был только один в приложении, либо хуярить ненужные объектики. Опять же - чтобы теперь просто сравнить роль - я должен буду переопределять метод для сравнения.
Если бы енамы которые я хочу были частью языка - можно было бы создать по экземпляру и радоваться...
А так - ну да. Костылями и всякими исхищрениями можно.
Но это не отменяет того что базовый енам который сейчас, это все равно что обычный enum а не enum class в плюсах.
Аноним 22/01/25 Срд 23:27:36 3369487 522
>>3369483
У тебя не должно быть никакой доменой валидации. Мы валидируем входную ДТО, че там дальше это проблемы бизнес логики.
Аноним 22/01/25 Срд 23:28:09 3369489 523
>>3369486
Ты допросишься однажды, тебе сделают

struct record enum

И ебись с ним
Аноним 22/01/25 Срд 23:31:32 3369491 524
>>3369487
В ДДД это так делается. Общая сквозная доменная валидация на всех нужных уровнях пайплайна.

А валидаторы сами решают, что им валидировать, а что нет. Это очень просто
Аноним 22/01/25 Срд 23:33:01 3369493 525
>>3369487
Только так, иначе как ты будешь валидировать вызовы медиатра из репозиториев?
Аноним 22/01/25 Срд 23:37:17 3369496 526
>>3369466
Тоже познал эту же боль с медиатором. Только у нас ещё хуже было. У нас все внешние вызовы в вызовы медиатора оборачивались.
Т.е. если тебе нужно было сходить в какой-то сервис, то ты подтягивал себе его proto-файл (у нас GRPC) был. Для каждой нужной тебе ручки из протника добавлял новые Request, Response и доп. модельки, если они в протнике есть. Потом добавлял конфиг автомаппера для маппинга всего этого и отдельный хендлер, который маппил Request на модельку GRPC-запроса, дёргал GRPC-ручку, а потом маппил результат на Response и возвращал его. Ну и вместе использования ты просто отправлял модельку запроса в MediatR.
Также была реализована работа с кафкой и S3.
В какой-то момент всех достало руками добавлять реквесты, конфиги автомаппера и хендлеры. Тогда запилили сорс-генератор, который по одному классу с кучей атрибутов это все генерировал. Но с отладкой стало ещё хуже. Так как теперь, если ты ошибся в конфиге, и указал что-то не то, то сорс-генератор либо падал без внятной ошибки, либо генерировал какую-то дичь, из-за которой все падало уже в рантайме.
Аноним 22/01/25 Срд 23:43:02 3369499 527
>>3369496
Щас бы g-rpc обернуть в залупу какую-то.
Аноним 22/01/25 Срд 23:46:30 3369501 528
>>3369489
Лучше просто дать возможность перегружать оператор is в классе, хотя бы ограниченно, без шаблонов, просто с значение определенного типа в качестве правого аргумента.
Тогда бы можно было реализовывать свои enum-object'ы и нормально с их значениями работать. А то сейчас не хватает возможности их в switch'е использовать.
Аноним 23/01/25 Чтв 00:01:10 3369503 529
>>3369496
В GRPC есть Interceptor'ы. Можно запилить валидацию ещё и в них. Как вам?
Аноним 23/01/25 Чтв 00:49:30 3369514 530
>>3369413
Чего ты рвешься? DDD можно использовать, пока у вас 10 rpc и один сервер. Или когда ты футстек мартышка из стартапа и твой код никогда не попадет в прод. Выйдешь в большой интернет с такой архитектурой - утонешь нахуй.
Аноним 23/01/25 Чтв 00:55:46 3369515 531
>>3369408
Так делают дебилы. В мидлваре валидируют входной джейсон, что юзер айди - это действительно число, а не бизнес требования.

>Логика валидации при этом находится в АПИ слое.
О, вы из епама!
Аноним 23/01/25 Чтв 01:21:54 3369524 532
>>3369486
>А так - ну да. Костылями и всякими исхищрениями можно.
По моему как раз то, что ты хочешь получить от енама и есть какой-то дикий костыль, который нужен только тебе одному, просто потому что ты придумал, что тебе именно так удобнее.
Ты хочешь какую-то залупу, которая бы имела свойства класса, её можно было бы пихать в свитч (я х.з. кстати почему ты просто не можешь одно из свойств объекта для этого использовать) плюс еще и своствами синглтона обладала с уникальностью.
А потом что? Еще захочешь какой-нибудь ConcurentEnum, чтобы еще и в многопотоке конфликтов не было?
Хуйней какой-то страдаешь, имхо.
Аноним 23/01/25 Чтв 06:17:42 3369610 533
>>3369524
Я просто жавовски enum описал, няша...

Единственный аргумент который мог бы быть в сторону шарповских - это быстродействие. Так ведь нехрена. Если ты чуть больше чем просто список чисел с именами их используешь - шарповский енум в любом другом случае медленный что пиздец, потому что на каждый чих под капотом дохуище рефлексии. Просто сделать ToString - тебе сама студия скажет - чел, если тебе надо, лучше напиши свой метод расширения, а то наш енам будет медленно тута. Хочешь обойти все значения перечисления - та же залупа. Хочешь добиться чтобы нельзя было просто так любую циферку скастовать к enum'у - ну ты эт, много хочешь, проверяй каждый раз через ту же рефлексию что эта циферка не принадлежит перечислению.

Ну серьезно.
Даже в контексте кодов ошибок.

public enum HttpErrorCode {
BAD_REQUEST(400, "Bad Request"),
UNAUTHORIZED(401, "Unauthorized"),
FORBIDDEN(403, "Forbidden"),
NOT_FOUND(404, "Not Found"),
INTERNAL_SERVER_ERROR(500, "Internal Server Error");

public final int code;
public final String message;

HttpErrorCode(int code, String message) {
this.code = code;
this.message = message;
}
}

При этом - я имею возможность в современной жаве - это в switch засунуть и как-то использовать.

Скажи сейчас что это пиздец какой редкий кейс и никому не надо.
Да много где эт надо. Хотя бы базу засеять какими-то хуйнями из домена.
Но да, лучше же до конца стоять на том что не нужно. В шарпе вообще ниче не нужно. До момента пока сами мелкомягкие не впихнут это в язык, потом, конечно, ом-ном-ном, как удобно. Я помню что и рекорды когда я в этом треде описывал их - грили - нахуй надо, пили сам свой иммутабельный класс и каждый раз переопределяй сравнение, чтобы работать с ними как со значениями, а как завезли-то так сразу - ой, а че бы рекорды не использовать для таких случаев.
Аноним 23/01/25 Чтв 06:45:02 3369620 534
Да.
Сейчас - все конечно можно обойти.
Я при желании могу вот так сделать:

public enum HttpErrorCode {

[HttpErrorCodeMessage("Bad Request")]
BAD_REQUEST = 400,


[HttpErrorCodeMessage("Unauthorized")]
UNAUTHORIZED = 401,

}

public static class EnumExtension{

public string GetMessage(this HttpErrorCode code){
// реализацию через проверку аттрибута
}

}

Но эт же откровенно неудобно. Это откровенно ошибкоопасно. Сверху - эт жутко медленно.

Блин. Может быть таки взяться и наконец написать сорсгенератор для всей этой залупистики. Посмотрю реально ли я шиз или таки люди хотели бы такое иметь в языке.
Аноним 23/01/25 Чтв 08:24:43 3369656 535
изображение.png 20Кб, 422x203
422x203
>>3369501
> Лучше просто дать возможность перегружать оператор is в классе

перегружать синтаксический сахар? Такое возможно только в действительно ВЫРАЗИТЕЛЬНОМ языке программирования

> А то сейчас не хватает возможности их в switch'е использовать.

вот, использую энам в свитче. У тебя не работает так?
Аноним 23/01/25 Чтв 08:25:20 3369657 536
>>3369496
>ручки
дальше не читал
Аноним 23/01/25 Чтв 08:42:58 3369665 537
>>3369620

Можно экстеншен-метод сделать

public string GetMessage(this HttpErrorCode code){}

и на него тест написать, что GetMessage покрывает все возможные варианты HttpErrorCode. Делов на 10 минут
Аноним 23/01/25 Чтв 08:44:27 3369668 538
>>3369620
> сорсгенератор для всей этой залупистики

Бля, я писал аналог даппера через сорсогенератор, это такая поебота, что пиздец. А если в нугет заворачивать - то пиздец, никто не поможет, заебёшься
Аноним 23/01/25 Чтв 12:21:12 3369914 539
>>3369439
не путай с LINQ
если ты пишешь конфигурацию в fluent синтаксисе, то тебе отлаживать её и не нужно.
кстати насчет отладки. Это проблема студии же - это она не умеет отлаживать.

могли бы давно у себя реализовать плюшки ozcode, но хрен вам.
после ozcode на стандартный дебаггер без слез не взглянешь.
Аноним 23/01/25 Чтв 12:26:30 3369923 540
изображение.png 19Кб, 547x318
547x318
>>3369656
>вот, использую энам в свитче. У тебя не работает так?
я мимокрок, но имею ту же претензию к шарпу

это ты используешь НЕ энам объекты, а просто енам, которые суть числа.

вот тебе пик пример чего хотелось бы.
Аноним 23/01/25 Чтв 12:28:59 3369925 541
>>3369923
Дебилы блять. dateValue.ToString("dddd")
Аноним 23/01/25 Чтв 12:32:25 3369929 542
>>3369925
это просто пример. Там может быть абсолютно ЛЮБАЯ информация.
Да и тратить время на вычисление в рантайме. Атата.
Аноним 23/01/25 Чтв 12:36:00 3369933 543
>>3369925
ну и подумай как ты этот свой тустринг будешь запихивать в match в том же шарпе.
Аноним 23/01/25 Чтв 12:36:41 3369934 544
pepewithgun.jpg 19Кб, 403x392
403x392
Начинаю делать новый проект по ДДД с медиатром. Через полгода напишу, так ли все плохо, как вы тут написали, или же вы просто не осилили бест практисес с клин аркитекчур.
Аноним 23/01/25 Чтв 12:37:25 3369936 545
>>3369934
за полгода ты еще его не напишешь.
Аноним 23/01/25 Чтв 12:43:14 3369944 546
>>3369936
Будет уже батл тестед.
Аноним 23/01/25 Чтв 13:23:46 3369980 547
>>3369934
> ДДД с медиатром.

Для полного погружения:
- обязательно подключи автомаппер. Развяжи сущности по слоям
- регистрируй объекты в DI только дженериковым путём. Инжекти только общие классы (IService<T>, IRepository<T>, IMapper и IMediator).
- Сделай базовые обобщённые хендлеры и команды, IEntityCommand<T, TResult>, IEntityDtoCommand<TEntity, TDto>
- Сделай базовые Behavior на логирование, обработку ошибок, валидацию, отправку доменных событий.
Аноним 23/01/25 Чтв 13:45:08 3370000 548
>>3369980
>обязательно подключи автомаппер
ах ты ж садист
Аноним 23/01/25 Чтв 14:10:06 3370048 549
>>3369934
Так ДДД противоречит всем мыслимым практикам. Особенно богатые модели.

Смотри у тебя модель отвечает за
1) представление данных из БД. Их хранение, мапинг на БД и тд.
2) за валидацию данных и их изменения
3) за управление событиями

В ДДД документ сперва сам себе меняет подписанта, потом сам себе меняет статус, потом сам себя подписывает, потом сам себе пишет аудит этих действий, потом сам документ порождает событие "документ подписан".

Проблема долбоебов с ДДД в том что мы моделируем БИЗНЕС ПРОЦЕССЫ а не домен. Действия над документом производит актор который знает как правильно эти действия производить, другой актор знает как проверить документ, у события же актора вообще нет это побочный результат выполнения операции подписания.
По такой схеме у тебя должно в коде в конкретном месте лежать логика подписания документа в неком DocumentSignCommand от которой наследуются все специфичные команды разных видов документов где описана спкцифичная для них бизнес логика. Эта команда вызывает некий IValidator и просит проверить документ на соответствие правилам. После завершения работы документ сохраняет в БД через вызов SaveChanges() и с помощью IEventService мы порождаем событие.
Заметил фишку? Теперь весь этот процесс реально выглядит как-будто я описал реальный процесс подписания документов где документ передаётся разным людям и они с ним что-то делают, а не просят документ что-то сделать.

У людей неверное понимание что в ООП выражет метод.
document.Sign() это буквально просьба для документа подписаться. Более правильно тогда уже user.Sign(document).
Аноним 23/01/25 Чтв 21:17:59 3370451 550
>>3369665
Про локализацию не забудь, ага. А то потом приходится сраной метлой вычищать сраный декларативный код от сраных гуманитариев.
Аноним 23/01/25 Чтв 22:32:08 3370502 551
>>3370451
ты вообще мне отвечал? что тебе мешает взять строку из ресурсов?
Аноним 24/01/25 Птн 14:44:39 3370909 552
Какой % разработчиков занимается разработкой высоко нагруженных систем? Так примерно можете почувствовать?
Поебень которая занимает 4gb ram в вкладке браузера не считается
Аноним 24/01/25 Птн 15:06:53 3370936 553
>>3370909
>почувствовать

почувствовал
Аноним 24/01/25 Птн 15:36:15 3370986 554
>>3370909
100% бэкендеров.
Ведь на самом деле никто не знает, что такое хайлоад.
Аноним 24/01/25 Птн 15:39:43 3370992 555
>>3370909
Дотнет - это не про хайлоад и хайперфоманс, за этим в го. Дотнет - это мартышка фулстек в стартапе пукнул ангуляром в кафку, чики-брики медиатр автомапер орм, мышкой задеплоили в ажур через админку и сидим урчим.
Аноним 24/01/25 Птн 16:00:14 3371017 556
>>3370992
80к RPS делают бурбур
Аноним 24/01/25 Птн 16:00:54 3371018 557
>>3370909
Тут вопрос, что считать хайлодом. Постоянные 100 rps на сервис уже хайлод? А 500? А 5000? Где эта грань?
У меня в команде есть один (микро-)сервис с средним RPS-ом в 2k, который держит 5k при нагрузочных тестах. Хотя может и больше, если больше подов поднять. Можно уже всем на собесах говорить, что хайлодом занимался?
Аноним 24/01/25 Птн 17:29:54 3371118 558
>>3371018
>Можно уже всем на собесах говорить, что хайлодом занимался?
нет конечно. ведь когда все накроется пи....тазиком, то виноватым будешь ты.
а так ты "а я причем".
Аноним 24/01/25 Птн 19:28:10 3371246 559
>>3371118
>нет конечно. ведь когда все накроется пи....тазиком, то виноватым будешь ты. а так ты "а я причем".

ну по крайней мере его возьмут. В следующей компании будет говорить, что решал проблемы связанные с хайлоадом
Аноним 24/01/25 Птн 21:39:47 3371378 560
Искал сегодня информацию про новый тип Lock.

Я не нашёл достаточного обоснования, почему это значительно лучше чем синхронизироваться на object. Единственное логичное объяснение - это попытка выкинуть из заголовка объекта несколько байт, но такой информации я не нашёл.

Дайте пояснение по этому поводу? Что считает ваша мама?

Иначе со стороны выглядит как будто к бесконечной куче примитивов синхронизации добавился один
Аноним 24/01/25 Птн 22:33:11 3371403 561
>>3371378
Похуй, все равно пользуюсь в основном семафорами. Локов, хорошо если раз в несколько лет касаюсь.
Аноним 24/01/25 Птн 23:19:54 3371433 562
Че там чистая архитектура говорит по поводу того как правильно UI'ные приложения делать?

Ну. Вот я на авалонии. Стандартный такой - хуяк, 3 слоя. UI, Инфра, и приложение. Все в отдельных сборках.
Вот у меня на уровне приложения - надо положить объектик в коллекцию, ну, чтобы не мудрствовать - сделали сразу observable, фиг ли нет. Чет в фоне произошло чтобы - хренак - обновилось.
На уровне UI - подписаны на изменение коллекции биндингами и должны обновить UI при изменнии.
ХУЯК, а ОПЕРАЦИЯ-ТО АСИНХРОННАЯ, МОЖЕТ И В ДРУГОМ ПОТОКЕ ЗАВЕРШИТЬСЯ. А ОКНО НЕЛЬЗЯ ОБНОВЛЯТЬ В ДРУГОМ ПОТОКЕ. В результате - хурма, у тебя из-за такой
И типа ну фигли. Ну реально.
Иду с лицом жабы делать статический класс, который из всех уровней будет давать доступ к UI-потоку.
Че еще делать-то остается?
Я реально не хотел. Но с другой стороны - делать чтобы на уровне приложения я просто срал событиями, и потом уже на уровне выше - я буду ловить их и уже в UI запихивать - я не хочу еще больше.
Аноним 24/01/25 Птн 23:26:40 3371436 563
>>3371433
>Че там чистая архитектура говорит по поводу того как правильно UI'ные
Чистая архитектура заканчивается там где бэк упирается в API. Все что происходит за API, всякие фронты, UI-хуи и т.д. с чистой архитектурой не совмещаются. Там даже обычное ООП не применимо.
Аноним 24/01/25 Птн 23:34:58 3371441 564
>>3371433
Внезапно вспомнил про такую хурму как IObservable, лол. Уже отупел с этими вебами.
В общем. Да. Решение что вижу - модель таки IObservable, а не чистое ObservableCollection'ы и прочую муру.
UI - это слушает, свои вещи таки в UI-потоке обновляет.
Нормас короче думаю.
Аноним 25/01/25 Суб 00:00:55 3371453 565
>>3371378
Имитация бурной деятельности, когда очень надо выкатить новую фичу, но все идеи давно закончились. С ними все ясно после охуительного нововведения "индекс с конца массива".
Алсо, в 2025 году все пишут асинки, локи остались где-то в древнем легаси с конкаренси.
Аноним 25/01/25 Суб 00:04:40 3371454 566
>>3371453
А причем тут многопоточка и конкретно управление общим состоянием потоков и асинки?
Аноним 25/01/25 Суб 00:18:19 3371466 567
>>3371433
>статический класс
Не статический класс, а IContext, который является синглтоном и инициализируется после создания главного окна. Передаешь туда Dispatcher из окна. Можно разделить на IContext и IContextInitializer, первый ридонли, второй для чисто инициализации. Физически они мапятся на один и тот же объект.
Дальше через DI прокидываешь контекст во вьюмодели-контроллеры. У контекста есть метод Execute(Action<>), который запускает экшен в UI потоке. В контроллере ты получаешь ивент "юзернейм изменился" и делаешь ctx.Execute(() => this.UserName = newName)
Аноним 25/01/25 Суб 00:20:58 3371468 568
>>3371454
В асинках свой планировщик и своя синхронизация через слимы. Локи - это про классическую конкаренси на уровне ядра.
Аноним 25/01/25 Суб 03:02:35 3371531 569
Form.png 63Кб, 1178x710
1178x710
Первый раз связался с шиндовс формами.
В общем есть табличка, ячейки таблички могут быть текстовыми, могут быть с галочкой, с выпадающим списком, с кнопкой, ещё какие-то.
А мне надо чтобы в ячейке был прогрессбар. Но через гуи такого выбора нет.
Как решить такую задачу?
Аноним 25/01/25 Суб 03:15:06 3371542 570
Аноним 25/01/25 Суб 04:30:43 3371577 571
>>3371531
В дизайнере форм ты этого не сделаешь, но можешь сделать из кода. Наследуешься от DataGridViewCell, в конструкторе создаёшь экземпляр прогрессбара, переопределяешь метод Paint(), в нём рендеришь прогрессбар в Graphics. Затем создаёшь DataGridViewColumn и ему устанавливаешь CellTemplate.
Пример с мсдн: https://learn.microsoft.com/en-us/dotnet/desktop/winforms/controls/customize-cells-and-columns-in-the-datagrid-by-extending-behavior?view=netframeworkdesktop-4.8
Аноним 25/01/25 Суб 09:12:35 3371650 572
>>3371433

>Стандартный такой - хуяк, 3 слоя. UI, Инфра, и приложение.

хуйня. Во первых, "стандартных" слоёв нет. Во вторых, производительное UI приложение потребует гораздо больше слоёв на стыке с пользовательским интерфейсом, чем три. "чистая архитектура" все эти моменты игнорирует, но именно там будет основная часть проблем.

>ОКНО НЕЛЬЗЯ ОБНОВЛЯТЬ В ДРУГОМ ПОТОКЕ. В результате - хурма, у тебя из-за такой

Можно работать в 2 потока, поток интерфейса и поток основного приложения. А границу разделения поставить в биндингах MVVM.

Таким образом, если произошло обновление поля ввода на интерфейсе, то во вью-модель оно попадёт через проброс в правильный поток. И наоборот

Но это ебота страшная, уровень вхождения сеньёр-долбоёб-нахуй-я-устроился-в-эту-помойку-работать.

> МОЖЕТ И В ДРУГОМ ПОТОКЕ ЗАВЕРШИТЬСЯ.

На этот случай пишутся диспатчеры потоков, которые определённую фунцию запускают в требуемом потоке.

Просто так и пишешь: ThreadDispatcher.ExecuteInUiThread(x => UpdateCheckbox(x)) . Но опять же, это надо делать по правильному и с первого раза.

> Иду с лицом жабы делать статический класс, который из всех уровней будет давать доступ к UI-потоку.

Примерно так, да. Только не статический, а положи его в DI

Всё вышеизложенное я лицезрел на одном проекте, который работал как в одном потоке, так и в двух. Сейчас с нуля такой писать я бы заебался.

И да, кстати, медиатр говно
Аноним 25/01/25 Суб 09:29:09 3371656 573
>>3371378
>Я не нашёл достаточного обоснования
А достаточного и нет:
https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-9/#threading
>You can absolutely still just use object, and you’ll still need to do so in certain situations, like if you’re using the “condition variable” aspects of Monitor (such as Signal and Wait), and you’ll still want to in others (such as if you’re trying to reduce managed allocation and you have another existing object that can serve double-duty as the monitor). But locking a Lock can be a more efficient answer. It can also help to be self-documenting, making the code cleaner and more maintainable.
Но Lock теперь предпочтительнее использовать, потому что:
>Lock, however, will generally be a tad cheaper (and in the future, as most locking shifts to use the new type, we may be able to make most objects lighter weight by not optimizing for direct locking on arbitrary objects)

>Единственное логичное объяснение - это попытка выкинуть из заголовка объекта несколько байт, но такой информации я не нашёл.
Заголовок используется не только для синхронизации:
https://devblogs.microsoft.com/premier-developer/managed-object-internals-part-2-object-header-layout-and-the-cost-of-locking/

Ещё в поисках обоснований можно почитать issue на 200+ комментов:
https://github.com/dotnet/runtime/issues/34812
Аноним 25/01/25 Суб 09:53:50 3371664 574
>>3371656
> clearer

За слова "чище" надо без раздумий в ебало с ноги бить.
Аноним 25/01/25 Суб 10:04:00 3371671 575
>>3371656
вангую, что вот такая строчка не скомпилируется:

Lock lock = new Lock();

и надо будет писать @lock ?

Вижу, что решением было бы удаление старой конструкции и перевод всего на using. Но, если они бинарную сериализацию выкидывали несколько лет, то с этим не справятся и за... хотя не буду мандеть
Аноним 25/01/25 Суб 12:04:20 3371759 576
Аноним 25/01/25 Суб 12:13:49 3371765 577
image.png 49Кб, 1251x511
1251x511
Какое из двух говен лучше в качестве словаря, принимающего null как ключ?

Первый проще и легче, но там where TKey : notnull и надо будет всё облепить аттрибутами и вообще всё ложь и пиздёж.
Аноним 25/01/25 Суб 13:27:21 3371812 578
Платиновый вопрос - как продолжить выполнение после catch блока?
У меня есть некий while(!_cancellationTokenSource.IsCancellationRequested) который сверху обернут в try catch. В catch попадают ошибки подключения, но я бы хотел чтобы на определенных hResult логика внутри цикла продолжала исполняться (реконектись каждые 10 сек к примеру).
У меня на уме как это реализовать только через goto.
Или есть какая-то нормальная реализация?
Аноним 25/01/25 Суб 13:36:31 3371815 579
>>3371765
А зачем тебе это? Любой словарь в С# и так уже умеет принимать null.
Аноним 25/01/25 Суб 13:38:22 3371816 580
>>3371812
Просто подави исключение и все. Код прерывается после throw. Просто сделай логирование и не кидай ничего.
Аноним 25/01/25 Суб 13:41:07 3371822 581
>>3371816
А, то есть сделать try catch внутри while и один сверху?
Аноним 25/01/25 Суб 14:11:03 3371848 582
image.png 21Кб, 936x86
936x86
Аноним 25/01/25 Суб 23:45:56 3372263 583
>>3371812
У тебя try/catch снаружи блока while, а должен быть внутри. А возможно, и там, и там
Аноним 25/01/25 Суб 23:52:05 3372266 584
>>3371765
Допустим, ты добавляешь новое значение по ключу null.

Будет ли высчитывать словарь хеш код у null?
Если да, что произойдет если вызвать null.gethashcode() ?
Аноним 26/01/25 Вск 04:10:52 3372320 585
МЕДИАТОР
@
АВТОМАППЕР
@
FLUENT ASSERTIONS
Аноним 26/01/25 Вск 09:41:53 3372456 586
image.png 188Кб, 1142x733
1142x733
Продолжаю читать единственно правильную книгу "Чистый код". Считаю, что её очень важно прочитать хотя бы один раз для понимания связки MediatR-Automapper-c#.

Наткнулся на метод ГЕТ ПЕНИС



Аноним 26/01/25 Вск 10:04:40 3372473 587
>>3372266
В левом варианте нет - для всех действий будет проверка is null и два варианта; в правом варианте да, у surprise'а будет ссылка на нужный IEqualityComparer<T>.
На пике код максимально кратко, чтобы смысл был понятен - побоялся, что простыню никто не захочет смотреть, а описывать словами... ну такое.

Мне кажется правый вариант лучше - очевиднее и "честнее" для использования, что ли, но сложнее, и будет медленнее и тяжелее.
Аноним 26/01/25 Вск 10:20:06 3372495 588
>>3372473
> В левом варианте нет - для всех действий будет проверка is null и два варианта; в правом варианте да, у surprise'а будет ссылка на нужный IEqualityComparer<T>.

На мой взгляд, ты делаешь странновато. Скорее всего у тебя есть возможность вообще не работать с нулями в словаре.

Рассмотри возможность использовать обычный словарь с помощью Automapper.
Аноним 26/01/25 Вск 22:02:54 3373181 589
>>3371765
Если тебе надо использовать объект как ключ, то ты уже где-то сделал ошибку.
Аноним 26/01/25 Вск 22:11:33 3373183 590
>>3373181
схрена ли. обычное дело.
главное не использовать рекорды
Аноним 26/01/25 Вск 23:42:38 3373224 591
>>3373183
А в чем суть использования объекта как ключа?
Аноним 27/01/25 Пнд 00:35:28 3373262 592
>>3373224
Сделать словарь объект - что то связвнное с объектом
Ваш кэп
Аноним 27/01/25 Пнд 08:33:22 3373362 593
>>3373224
>А в чем суть использования объекта как ключа?

Это буквально база ООП в В C#. ВСЁ можно использовать как ключ в словаре и сконвертировать в строку.

Другой базы ООП для вас нет
Аноним 27/01/25 Пнд 10:37:10 3373426 594
Аноним 27/01/25 Пнд 18:55:19 3373926 595
>>3371577
>в нём рендеришь прогрессбар в Graphics
И вот как это сделать?
Также изучал пример по твоей ссылке. Там к таблице добавляется новый столбец и он модифицируется. А вот как изменить уже существующий столбец я так и не понял. И даже мне надо не весь столбец, а конкретную ячейку.

>>3371542
>WPF
Создал посмотреть тестовый проект. По моему тоже яйцо только в профиль.
Аноним 27/01/25 Пнд 19:06:42 3373933 596
>>3373926
>Создал посмотреть тестовый проект. По моему тоже яйцо только в профиль.

верно.
яйцо в анфас на винформсе ты уже видел.
а вот яйцо в профиль это банальное
<DataTemplate><ProgressBar /></DataTemplate>
а в случае если надо редактируемую ячейку то там есть CellEditingTemplate (или как то так, влом гуглить)

ну в общем то да - абсолютно одинаковое
на самом деле небо и земля, даже учитывая что это мерзкий хамл, а писать в винформс стиле можно и на впф, правда это тупо
Аноним 27/01/25 Пнд 19:21:27 3373945 597
>>3373933
Нельзя на впф писать в стиле винформ, многие конструкции поддерживаются только в замле
Аноним 27/01/25 Пнд 19:29:03 3373949 598
>>3373945
хамл вообще это просто хмл-ое выражения кода. так что любой хамл можно выразить в коде.

Но кэп говорит что впф-онли конструкции как бы по определению не могут быть в формсах

А писать в стиле "пихаем в code-behind обработчики, напрямую работает с контролами и какие такие биндинги" - эт можно
Аноним 28/01/25 Втр 00:18:31 3374173 599
>>3373933
>>3373949
Я ньюфажина и не особо понимаю что вы мне тут пишите. Лучше бы мне конкретное решение подсказали.
Аноним 28/01/25 Втр 01:15:20 3374189 600
изображение.png 26Кб, 363x468
363x468
Запрашиваю список сетевых адаптеров с целью узнать их МАС-адреса

using System.Net.NetworkInformation;
var adapters = NetworkInterface.GetAllNetworkInterfaces();

Прикол в том что, если снять галку с TCP/IPv4, сетевуха пропадает из списка, и следовательно МАС уже не посмотреть.

Кто виноват и что делать?
Аноним 28/01/25 Втр 09:22:44 3374365 601
>>3374173
>Лучше бы мне конкретное решение подсказали.

Бери связку MediatR+Automapper, вадидацию делай через FluentValidation. Используй DDD и CQRS
Аноним 28/01/25 Втр 09:33:22 3374368 602
>>3374365
А чё по гексогональной и чистой архитектуре?
Аноним 28/01/25 Втр 10:47:35 3374403 603
>>3374173
я и подсказал - бери WPF
на нем блекджеки и шлюхи вращающиеся в кнопке которая в прогрессбаре которая в ячейке таблицы, которая сама в шлюхе
делаются куда проще.

в формсах ты либо берешь готовое, либо с помощью такой то матери впихуешь невпихуемое
в WPF изначально lookless, то есть сразу задумано что внешний вид отделен от функционала и может быть заменен.

конечно есть проблемы с фокусом, захватом мыши и прочим, но переопределить внешний вид чего угодно это основной функционал.

плата за это больше нагрузка на систему по сравнению с формс, ведь WPF сам рисует контролы
ну и конечно внешний вид не системный, ведь WPF сам рисует и хреново подстраивается под внешний вид оси
Аноним 28/01/25 Втр 11:14:11 3374425 604
>>3374403
>WPF изначально lookless

Как раз наоборот, луковая архитектура скорее вредит WPF. Предпочтительно брать паттерн "чистая архитектура" через CQRS. Таким образом, в WPF приложении всё это либо команда, либо доменное событие. Идеально брать медиатр в качестве реализации команд, а интерфейс обновлять по событиям, вбрасываемым из медиатра же.

Всё остальное реализуется через "поведения" медиатра. Захотел валидацию - делаешь делаешь общее валидирующее поведение. Работаешь с коллекциями - добавляешь пайплайн, который разделяет все запросы на асинхронные вызовы того же медиатра.

Это называется паттерт MWPF
Аноним 28/01/25 Втр 11:16:50 3374428 605
>>3374425
тебя в детстве лук заставляли есть каждый день?
у тебя триггер на слово лук без учета значения этого слова)
Аноним 28/01/25 Втр 11:20:34 3374432 606
>>3374428
В контексте WTF у этого слова только одно значение.
Аноним 28/01/25 Втр 11:23:10 3374434 607
>>3374432
у тебя WTF от медиатра
это распространенное психическое заболевание
в будущем его будут в учебниках по психиатрии описывать.
Аноним 28/01/25 Втр 11:26:51 3374437 608
>>3374434
>у тебя WTF от медиатра

Нахуй ты это говно сюда опять притащил?
Аноним 28/01/25 Втр 11:32:03 3374441 609
>>3374437
Ну а таких опишут в той книге по психиатрии, но в другом разделе
Аноним 28/01/25 Втр 12:40:33 3374478 610
>>3374441
>Ну а таких опишут в той книге по психиатрии, но в другом разделе

Ты ебанутый? Зачем о мощных DDD-CQRS фреймворках писать в психиатрии?
Аноним 28/01/25 Втр 12:42:43 3374479 611
>>3374478
>медиатр
>фреймворк

Ответ очевиден
Аноним 28/01/25 Втр 12:52:19 3374488 612
>>3374479
>>медиатр
>>фреймворк

лучшее, что есть на сегодня для организации WPF+MVVM.
Аноним 28/01/25 Втр 12:58:48 3374492 613
Аноним 28/01/25 Втр 18:14:11 3374888 614
Аноним 28/01/25 Втр 18:16:12 3374892 615
Аноним 28/01/25 Втр 20:00:03 3374985 616
>>3374892
Мне надо в отдельновзятой ячейке прогрессбар разместить. Вот тут говорил >>3371531 .
Аноним 28/01/25 Втр 20:41:45 3375013 617
>>3374985
ТАК РАЗМЕЩАЙ (С) Иоанн Грозный айтишник
Аноним 28/01/25 Втр 22:35:02 3375094 618
Что за дурка блядь, тут вообще кто-нибудь программировать умеет?
Аноним 28/01/25 Втр 22:37:17 3375095 619
Аноним 28/01/25 Втр 23:00:46 3375104 620
>>3375094
Конечно! Целых три языка знаем:
1. Ubiquitous Language.
2. XAML: <DataTemplate><ProgressBar /></DataTemplate>
3. Английский: Assert.That(collection, It.That.Is().Should(have => have.At(x => x.Least).Single().Equal[item]))
Аноним 29/01/25 Срд 02:00:37 3375141 621
Аноним 29/01/25 Срд 13:34:42 3375381 622
image.png 33Кб, 691x379
691x379
Подскажите, есть ли генератор, который вот такие фабрики геренирует?
Аноним 29/01/25 Срд 13:35:09 3375382 623
image.png 33Кб, 691x379
691x379
Подскажите, есть ли генератор, который вот такие фабрики генерирует?
Аноним 29/01/25 Срд 20:21:19 3375837 624
>>3374189
>>3375141
Ну что, професси_аналы? В лужу пукнули от бессилия когда серьёзный вопрос встал?
Аноним 29/01/25 Срд 20:28:52 3375850 625
6 лет работаю шарпеем.
Хочу в мышинное обучение и датасатанизм, но там везде Змея.
Изучаю синтаксис змеи и мне хочется плакать.
На Реддите советуют совмещать Змею и ML.Net

Чтобы сделать крутое резюме в мышинном обучении и не потерять свой шарпейский опыт, хочу стать в свободное время контрибутором в репозитории ML.Net и SharpTorch.

Какие подводные у такого плана?
Аноним 29/01/25 Срд 20:32:31 3375854 626
>>3375850
>Изучаю синтаксис змеи и мне хочется плакать.
какой ты неженка. вполне нормальный синтаксис. Лаконичнее шарпа между прочим.
Аноним 29/01/25 Срд 20:35:14 3375860 627
>>3375837
нет. у нас просто такая же нога. но не болит.
Аноним 29/01/25 Срд 22:06:22 3375922 628
>>3375854
Синтаксис может и нормальный, а вот идея сделать отступы частью синтаксиса - полное говно. Я даже не знаю какие еще проебы в дизайне ЯП можно было бы поставить на один уровень с этим.
Аноним 29/01/25 Срд 22:25:35 3375933 629
>>3375922
>а вот идея сделать отступы частью синтаксиса - полное говно
наоборот это киллерфича. код в едином стиле, а не каждый извращается как хочет.
Аноним 29/01/25 Срд 23:13:45 3375970 630
Знаю что вопрос наверное в этом треде неправильно спрашивать.
НО.
Как сделать в авалонии респонсив верстку?
Типа просто в бравзере - эт делается буквально на изичах, даже без всяких там сторонних хреновин, медиаквери и погнали.
А вот в авалонии - ну, чет нормального адекватного решения - не нашел.
Типа можно конечно забиндиться на размер и при изменении размера окна - стиль нужный проставлять. Но опять - эт не выглядит как нормальное решение.
Аноним 29/01/25 Срд 23:18:31 3375973 631
{83EC1F73-6675-[...].png 28Кб, 834x639
834x639
>>3375933
Неистово двачую. Пока пишешь один и по гайдлайнам - кажется ну, проблема преувеличина.
А потом прикриплейд у чела. И на все недовольства - МНЕ ТАК УДОБНЕЕ.
Еще и твой код будет в такую хуйню форматировать, потому что МНЕ ТАК УДОБНЕЕ.
Аноним 29/01/25 Срд 23:43:18 3375986 632
>>3375973
Ну увольте его и все. Или пусть установит себе на решарпер набор ваших правил кодостайла или нахуй идёт.

Еще киллер фичу могу вам рассказать. Берете пишете хуки на автоформат и стайлчек, заодно ещё туда прогон тестов можно добавить (ведь абсолютно любой коммит должен быть полностью рабочей системой)
Аноним 29/01/25 Срд 23:49:15 3375988 633
>>3375986
классная фича
особенно помогает когда просто чужой код на гитхабе (или просто чужой) смотришь.
или ой - не помогает.
Аноним 30/01/25 Чтв 01:08:35 3376025 634
>>3375988
Так ты общался с челом или нет? Если это его личный проект для удовольствия может там хоть не русском писать, хоть на фарси в одну строку.

У тебя то можно что-то говорить, то это уже стал код рандом чела из гитхаба. Определись в своих маневрах блять.
Аноним 30/01/25 Чтв 03:36:53 3376047 635
>>3375860
Какая нога? Что несёт? Вообще пиздец.
Аноним 30/01/25 Чтв 07:24:51 3376110 636
>>3375986
>Ну увольте его и все
Да. Ведь все кто недовольны кодом коллег имеют возможность взять и уволить всех неугодных.

> Берете пишете хуки на автоформат и стайлчек
И чел берет и хук выпиливает, потому что ему МЕШАЕТ. Возвращаешь - идет к руководству и говорит что ты саботируешь процесс разработки, он-то фичу сделал, и вообще, помните, 20 лет назад я героически спас прошлый проект в ситуации когда остальные поувольнялись, а тут какие-то щеглы фи-фи делают на мой волшебный и во всем хороший код.

Ну срсли.
Аноним 30/01/25 Чтв 08:46:05 3376165 637
Снимок экрана о[...].png 338Кб, 521x394
521x394
>>3376047
> стайлчек

Давай стайлкоп откапывать и ронять сборку в самый неподходящий момент.

> хуки

хуки - всегда плохая идея. Особенно если использовать какой-нибудь Husky, который работает секунд 20, и ломается раз в 2 недели

Когда в товарищах согласья нет, На лад их дело не пойдёт, И выйдет из него не дело, только мука
Аноним 30/01/25 Чтв 08:56:18 3376174 638
>>3376110
>И чел берет и хук выпиливает, потому что ему МЕШАЕТ. Возвращаешь - идет к руководству и говорит что ты саботируешь процесс разработки,

Поздравляю, у вас 2 проблемы на проекте, МУДАК и НЫТИК
Аноним 30/01/25 Чтв 10:19:40 3376246 639
>>3376165
>Давай стайлкоп откапывать и ронять сборку в самый неподходящий момент.
Стайлкоп это анализатор, он на этапе компиляции/сборки работает. Если ты заливаешь код ни разу не проверив собирается ли он вообще - ну земля тебе пухом. А если у вас есть возможность создать и слить ПР от несобраной фича-ветки в dev/master/release - ну тогда земля пухом всей вашей конторе.
Аноним 30/01/25 Чтв 10:22:54 3376251 640
>>3376110
>И чел берет и хук выпиливает, потому что ему МЕШАЕТ. Возвращаешь - идет к руководству
Ну так тут дело не в языке и возможности его код по разному форматировать, а в мудаке и его тараканах. Ты же понимаешь, что он и в пайтоне сможет сделать по своему, например штук по 15 пробелов на отступы и говорить, что ему так удобнее или еще, что придумает.
Аноним 30/01/25 Чтв 10:39:52 3376264 641
>>3376047
это значит у меня что твой код и выключение ip4 не ломает его, а значит виноват ты и страдай
Аноним 30/01/25 Чтв 10:56:40 3376280 642
>>3376251
>что ему так удобнее или еще, что придумает.

Шизик скорее всего. Они как правило не решают задачи на проекте, а борются с форматированием или ещё какой хуетой

Если вообще встаёт вопрос форматирования, - то скорее всего шизик на месте. Он блюдит за тобой
Аноним 30/01/25 Чтв 12:46:51 3376381 643
>>3376280
Ну у нормальных людей просто есть согласие по стилю кода выраженное в файле настроек. Поставил файлик и все.
Аноним 30/01/25 Чтв 13:30:36 3376414 644
>>3376381
Делать блин нечего
Питон везде - в огромных проектах и в миллионах разных скриптов которые правишь в блокноте
Какой в жопу файлик
Аноним 30/01/25 Чтв 14:08:44 3376441 645
>>3376414
>Питон везде

нах он нужен, питон мусор
Аноним 30/01/25 Чтв 14:18:33 3376453 646
>>3376441
ну люди обожают мусор
судя по индексу того же тиобе
Аноним 30/01/25 Чтв 14:23:26 3376456 647
>>3376453
> тиобе
Бейсик люди тоже обожают? Что-то про него ни одного слова доброго не слышно, а он как-то на 6 место вылез в этом недорейтинге.
Аноним 30/01/25 Чтв 14:43:14 3376470 648
>>3376456
>Бейсик люди тоже обожают?
конечно. вполне заслужено вылез.
Аноним 30/01/25 Чтв 18:48:49 3376648 649
>>3376414
Я белый человек с IDE и решарпером которые следят за код стайлом, именами разной хуйни, спелчекер на 2 языках и даже сонар подключен чтобы сразу показывать проблемы.
Тоже самое для фронта в VS code вагон плагинов и прочей залупы.

Ваши холопские дауничи с нотпадом нахуй пусть идут.
Аноним 30/01/25 Чтв 19:02:02 3376651 650
>>3376264
Кто кого ломает? Что ты там себе нафантазировал?
У меня конечная цель снять все эти галки из кода, чтобы винда не срала ненужными мне пакетами в сеть. Как это сделать я пока не знаю.
Если знаешь - скажи, буду признателен.
Сейчас, в качестве временного решения, перед запуском софтины, снимаю эти галки вручную. А без галки айпи4 мак-адрес не посмотреть.
Аноним 30/01/25 Чтв 19:29:35 3376667 651
>>3376174
А кто из нас кто?
Я просто типа давно смирился. Просто не пускаю в свой код его, и не лезу в его.
Но погореть в интернете - бог велел. Типа ну реально. Ну реально. Пока просто пишешь себе - забываешь что код другие люди пишут, и они иногда СВОЕОБРАЗНЫ.
Аноним 30/01/25 Чтв 19:46:41 3376675 652
>>3376648
дык у бота спроси
зайди в duckduckgo https://duckduckgo.com/?q=DuckDuckGo+AI+Chat&ia=chat&duckai=1
а там тебе и решение на повершеле и на шарпе выдаст
правда через netsh и не знаю работает ли
ему и поясняй проблему про свою ногу
Аноним 30/01/25 Чтв 20:51:38 3376709 653
>>3376667
ну ты не мудак потому что совета спрашиваешь, как быть с таким.

Если у твоего зазеканца очень своеобразный стиль, то просто утрируй проблему,
Ебани
[pre]
в
стиле
Маяковского
Залупой
по губам
КОД
[/pre]

У него жопа взорвётся, он страдать начнёт и маму звать
Аноним 30/01/25 Чтв 21:02:26 3376712 654
>>3376667
>Типа ну реально. Ну реально.
Смотри у тебя есть несколько вариантов.
1. Оставить все как есть и продолжать в этом вариться. Словить через какое-то время депресняк и выгорание и потом долго от этого восстанавливаться.
2. Просто съебать. Поменять работу и забыть. Минусы понятны, из плюсов - ты охуеешь насколько яркий и нормальный мир за пределами твоего болота.
3. Поиграть в крысиного короля. Стань сам злоебучим мудаком. Представь, что ты отыгрываешь в ролевухе какого-нибудь хаотик-эвил-ассасина. Устраивай ему проебы, подставляй перед начальством, подстраивай сбои на проде по его части, искажай информацию идущую от него другим людям. На любые претензии все отрицать до самого конца - ты не при делах и не ебет. Из минусов - можно попастся. Из плюсов - тонны веселья и здоровая (отиносительно) психика.
Аноним 30/01/25 Чтв 22:03:39 3376754 655
image.png 216Кб, 1677x956
1677x956
>>3375382
Пидорасы вы, суки, хуй от вас чего дождёшься, сам напишу.
Аноним 30/01/25 Чтв 22:07:07 3376756 656
>>3376754
не спеши. я готовлю тебе развернутый ответ. погодь
Аноним 30/01/25 Чтв 22:11:24 3376759 657
17382615493690.webp 237Кб, 1920x1154
1920x1154
>>3376756
Так а хули там, StrongInject брать, который забросили или в автофаке эта ебала встроена, бери и пользуйся.

Но в рот я ебал автофак. Люблю его, конечно, хороший контейнер, но всё-таки ебал я его в рот и на хую вертел.

Через рефлексию охуенно получается, работает очень быстро, самого кода писать - 20 строчек. Но для петуханов эта рефлексия ваша. Души в ней нет
Аноним 01/02/25 Суб 00:45:59 3377668 658
>>3376759
А я тебе говорю
Не спеши
Дождись моего пояснения
Аноним 01/02/25 Суб 02:57:50 3377711 659
Как работают указатели в этих ваших шарпах?
Почему я обязательно должен делать присвоение?

int Z = 10;
AAA(out Z);

private byte AAA( out int X)
{
byte D = 8;
if(5 == 10)
X = 20;
return D;
}

>ОшибкаCS0177До передачи управления из текущего метода параметру, помеченному ключевым словом out, "X" должно быть присвоено значение.
Аноним 01/02/25 Суб 05:02:55 3377731 660
>>3377711
Ну и где здесь указатели?
Аноним 01/02/25 Суб 07:50:34 3377813 661
>>3377731
Не душни. Лучше скажи почему так?
Аноним 01/02/25 Суб 08:16:47 3377817 662
>>3377711

используй за место out ref
Аноним 01/02/25 Суб 09:27:26 3377836 663
>>3377711
Потому что если if у тебя не обработается, то значение x не поставится. И при вызове методе мы всегда можем запросить out int x.
Аноним 01/02/25 Суб 13:12:46 3378068 664
1.png 19Кб, 1291x339
1291x339
22.png 17Кб, 1425x243
1425x243
Вопрос к знатокам.
Почему у меня возникает ошибка при использовании тернарного оператора как на первом пике? Там же логическое выражение до вопросика, всё как положено.

Если создать bool переменную c, то ошибки нет. Чё за какалово?
Аноним 01/02/25 Суб 16:06:49 3378221 665
image.png 8Кб, 309x95
309x95
>>3378068
> знатокам

Первый раз вижу чтобы так использовали ?: Обычно используют как на пике

То, что между точками-с-запятой - это стейтменты (я хз, как по русски), а у тебя выражение.Попробуй, например, напиши

2*3; // то же самое будет.

Конпелятор подумает, что ты забыл выражение присвоить куда-то. Тут так же, тернарная поебота это выражение, оно не самостоятельно
Аноним 01/02/25 Суб 16:12:08 3378229 666
>>3378068
>Вопрос к знатокам.

пиздец, задаёшь вопросы уровня первая неделя изучения языка. У тебя в голове скорее всего вообще ещё пусто если такие странные куски кода пытаешься конпелировать.

Но и для долбоёбов в дотнете есть выход! Не горюй, не задерживайся на дотнете, поищи что-то что тебе подходит по уровню, например, python или js. там быть долбоёбом, спрашивающим, почему у него значок равно не конпелируется - норма, тебя за своего примут
Аноним 01/02/25 Суб 17:41:24 3378348 667
>>3377817
Так и сделал.

>>3377836
>то значение x не поставится
Ну не поставится и не поставится. Проблема то в чём?

>при вызове методе мы всегда можем запросить out int x
Тут тебя не понял.
Аноним 01/02/25 Суб 17:53:37 3378365 668
image.png 1Кб, 217x29
217x29
>>3378068
В твоем случае нужно делать как на пике
Тогда будет работать.

Но делать так не надо. На любом код ревью тебя обоссут за такой код.
Аноним 01/02/25 Суб 21:27:10 3378592 669
Насколько сейчас сложно сменить работу с учётом опыта 2.5 года в области бэкенд-разработки (военика нет, компания отмазывает)? Есть ощущение, что сейчас полный спад на рынке и вакансий практически нет, поэтому лучше не рыпаться и ждать продвижения карьеры здесь и ждать тридцатника.
Аноним 01/02/25 Суб 22:16:03 3378611 670
>>3378221
>>3378365
Спасибо

>>3378229
>вопросы уровня первая неделя изучения языка
Так оно и есть, пошёл нахуй.
Аноним 02/02/25 Вск 18:32:27 3379138 671
Есть некий YobaClass<T> where T : notnull.

У этого класса есть:
- поле Dictionary<T, int> dictionary
- публичный метод PublicAdd(T t) { ... }, при обращении вызывающий приватный метод PrivateAdd(T t), в свою очередь вызывающий dictionary.TryGetValue(t, out _).

Стоит ли сделать проверку на null и выброс исключения до того, как произойдёт обращение к dictionary.TryGetValue? Или поймать исключение в PrivateAdd / PublicAdd и перевыбросить? Или пусть исключение поднимается из словаря "наружу"?
Аноним 02/02/25 Вск 19:43:39 3379189 672
>>3379138
>Стоит ли сделать проверку
В случае если ты все-таки передашь туда null, то получишь не ошибку, а всего лишь предупреждение и можешь это прощешлкать, если у сборщика не стоит установка падать на ворнингах, ни или вообще где-нибудь в коде директивно отменишь nullable.
Аноним 02/02/25 Вск 20:33:51 3379212 673
>>3379138
Да, лучше в твой первый публичный метод PublicAdd первой строкой всунуть ArgumentNullException.ThrowIfNull(t). В публичных методах лучше всего валидацию аргументов делать как можно раньше. Это правило хорошего тона. Плюс так банально будет проще и быстрее по стектрейсу понять, где и что пошло не так.
Аноним 02/02/25 Вск 20:45:00 3379218 674
image.png 748Кб, 673x615
673x615
Аноним 02/02/25 Вск 21:04:52 3379231 675
>>3379138
>Стоит ли сделать проверку на null и выброс исключения до того, как произойдёт обращение к dictionary.TryGetValue?

Если ты пишешь публичную библиотеку - да.

Если код локальный - забей хуй. Ты же сам себе доверяешь и не выключаешь nullable

Если код локальный, но ты сам себе не доверяешь - схавай эчпочмак, запей бутылочкой добрый-кола и всё равно забей хуй.
Аноним 02/02/25 Вск 21:10:04 3379241 676
>>3379218
ну ты же видишь что выходные были. потерпи блин.

я пока на первом этапе - пытаюсь понять нафига оно тебе вообще.
Аноним 03/02/25 Пнд 00:31:50 3379316 677
>>3379138
Пиши код в той парадигме какую ожидал. Если ты объявил что принимаешь notnull, то это проблема долбоеба снаружи.
Аноним 03/02/25 Пнд 00:46:18 3379320 678
>>3379218
>Я уже нугет запилил
Ну и нахуя? Будто без тебя там говна в версиях 0.0.x не хватает.
Аноним 03/02/25 Пнд 06:46:25 3379389 679
>>3379189
Не понял.
Dictionary.TryGetValue выбрасывает ArgumentNullException, если передать ему null.
Аноним 03/02/25 Пнд 06:47:58 3379392 680
>>3379212
На множественную проверку похер?
Аноним 03/02/25 Пнд 07:00:51 3379401 681
>>3379231
>Если код локальный, но ты сам себе не доверяешь - схавай эчпочмак, запей бутылочкой добрый-кола и всё равно забей хуй.
Так я не научусь нихуя.
Иначе, наверно, тоже, но это хотя бы шанс.

>>3379316
>это проблема долбоеба снаружи.
Я пока что навсегда и есть этот долбоеб снаружи.
Аноним 03/02/25 Пнд 08:03:58 3379408 682
>>3379320
>Ну и нахуя? Будто без тебя там говна в версиях 0.0.x не хватает.

Чтобы можно было использовать через нугет в рабочих проектах и чтобы осталось мне принадлежать
Аноним 03/02/25 Пнд 10:19:44 3379464 683
>>3379401
>Я пока что навсегда и есть этот долбоеб снаружи
Тогда в чем проблема? Ты же читал про SOLID и чистую архетуктуру? Ну вот так и делай, есть внешний АПИ класса и если кто-то суёт nullable типы в явное объявление notnull, то он тупой или невнимательный.
Я на своих проектах включаю строгую проверку чтобы любые попытки передавать nullable типы где они не ожидаются приводили к ошибке.
Аноним 03/02/25 Пнд 10:59:42 3379484 684
>>3379401
>Я пока что навсегда и есть этот долбоеб снаружи.

Тогда нах тебе это не нужно, у тебя в любом случае исключение выпадет очевидное, просто стектрейс будет на две-три строчки короче или длиннее
Аноним 03/02/25 Пнд 12:49:02 3379581 685
>>3379408
>использовать через нугет в рабочих проектах
Для этого не обязательно тащить свое говно в общий репозиторий. Нюгеты можно и локально использовать.
Ну или подключать проекты библиотек как сабмодули.
Аноним 03/02/25 Пнд 13:06:22 3379603 686
>>3379581
>Для этого не обязательно тащить свое говно в общий репозиторий.

не используй
Аноним 03/02/25 Пнд 13:28:27 3379622 687
>>3379581
Очевидно же, что это для повышения ЧСВ, а не потому что есть реальная необходимость.
Аноним 03/02/25 Пнд 15:16:19 3379741 688
>>3379464
> Я на своих проектах включаю строгую проверку чтобы любые попытки передавать nullable типы где они не ожидаются приводили к ошибке.
Производительность даже не имаджинирую
Аноним 03/02/25 Пнд 15:46:38 3379769 689
>>3379741
>Производительность даже не имаджинирую
Это compile time фича, каким хером она на итоговую производительность будет влиять?
Аноним 03/02/25 Пнд 17:44:25 3379887 690
>>3379769
твое заявление можно трактовать двояко
так что все правильно он не имаджинирует
Аноним 03/02/25 Пнд 19:29:11 3379930 691
>>3379887
>трактовать двояко
хуяко
Аноним 03/02/25 Пнд 19:39:49 3379934 692
>>3379930
Производительность станет как у питона из-за проверок на nullable.
Аноним 03/02/25 Пнд 19:43:46 3379936 693
О какой такой проверке речь идёт?
Аноним 03/02/25 Пнд 19:45:09 3379938 694
На nullable.
Аноним 03/02/25 Пнд 20:39:26 3379995 695
>>3379934
>Производительность станет как у питона из-за проверок на nullable.

не станет
Аноним 03/02/25 Пнд 20:40:14 3379998 696
Привет, я решил выучить дотнет, подскажите, он достаточно выразительный?
Аноним 03/02/25 Пнд 21:08:24 3380025 697
>>3379998
Да. Выражаться ты будешь довольно часто
А потом... привыкнешь и уйдешь на похапэ
Аноним 03/02/25 Пнд 21:57:12 3380063 698
>>3379995
Значит, станет как у котлина.
Аноним 03/02/25 Пнд 22:26:18 3380082 699
>>3379934
>Производительность станет как у питона из-за проверок на nullable.
Еще раз для долбоебов. Это compile time проверки. В итогом билде их не будет.
Аноним 03/02/25 Пнд 22:27:50 3380084 700
Что есть чтобы протестить контракты в .NET?
Больше всего надо в контексте событий шины. Т.к. откровенно заебался, когда чел берет - меняет на своей стороне сообщения втихую, пока ты в отпуске или что-то еще, а потом такой - я отправил у меня все работает.

Хотелось бы что-то в виде:
_test.Producser(typeof(ServiceA.Program).GetAssembly())
.Produce<ServiceA.SomeEvent>()
.Consumer(typeof(ServiceB.Program).GetAssembly())
.CanConsume<ServiceA.SomeEvent>(onError:"Can't consume")
.HasHandler(onError:"Handler is missing");

Но на самом деле что угодно было бы ок. Потому что откровенно это задолбало.
Аноним 03/02/25 Пнд 22:32:19 3380086 701
>>3380082
Долбобоб, это рантайм проверки.
Аноним 03/02/25 Пнд 22:57:42 3380105 702
>>3380063
в kotlin оно вырезается из релизного билда одним правилом
в шарпе их вообще не существует в билде.
Аноним 03/02/25 Пнд 23:46:21 3380139 703
>>3380084
Если у вас все контракты в виде классов, которые в json потом сереализируются, то х.з. как это нормально сделать. Только если какой-то свой кастомный анализатор писать, который будет из Гита брать предыдущую и новую версию файлов и проверять, нет ли ломающих изменений в новой.
Мы эту проблему для сообщений в кафке решили с помощью protobuf'а. Все контракты описываются в proto-файлах и во время билда отдельной джобой пушатся в schema registry, из которого с помощью cli-тулзы их можно потом подтянуть в другие сервисы. В этой же джобе сделан анализ proto-файлов на braking changes. Т.е. у тебя просто новая версия сервиса на прод не зальется, если ты контракты поломал.
Аноним 04/02/25 Втр 00:00:15 3380147 704
>>3380086
Скажи что ты просто жирный трололо или просто не понимаешь о чем речь. Я просто не хочу верить что есть такие долбоебы.
Аноним 04/02/25 Втр 00:02:24 3380152 705
>>3380147
О чём говорить? О двоякой трактовке? Лол
Аноним 04/02/25 Втр 02:01:18 3380194 706
изображение.png 57Кб, 1192x713
1192x713
Что сюда нужно написать чтобы открывалось сразу на верхнем уровне, как на пике?
OpenFileDialog.InitialDirectory = "?????????????????";
Аноним 04/02/25 Втр 08:45:38 3380275 707
>>3380105

В котлине нет проверок на NULL в рантайме. В c# фича nullable помимо статического анализа добавляет в IL код проверки на null на каждый вызов, но только в релизную сборку

Чуть позже пруф скину
Аноним 04/02/25 Втр 10:26:23 3380329 708
>>3380275
>Чуть позже пруф скину
Вот когда скинешь, тогда и выпишем из пиздоболов.
Аноним 04/02/25 Втр 10:57:48 3380379 709
image.png 70Кб, 1033x296
1033x296
Почему во всех топах, где сравнивают скорость/эффективность языков жаву ставят выше шарпа?
Жава ведь старый язык, который построен на костылях, например, те же дженерики. Когда у шарпа много классных плюх, которые увеличивают скорость, вроде структур и спанов.
Почему так?
Аноним 04/02/25 Втр 11:51:16 3380440 710
IMG202502041150[...].jpg 26Кб, 421x449
421x449
IMG202502041150[...].jpg 67Кб, 1021x314
1021x314
>>3380275
Так че там по перфомонсу?
Аноним 04/02/25 Втр 12:16:23 3380472 711
1.png 268Кб, 3820x1440
3820x1440
2.png 272Кб, 3825x1455
3825x1455
3.png 322Кб, 3777x1697
3777x1697
4.png 315Кб, 3790x1627
3790x1627
>>3380275
Автоматом не добавляется там никаких проверок на null. Пока сам в коде их руками прописывать не начнешь, ни в IL, ни в ASM они не появятся.
Аноним 04/02/25 Втр 12:52:52 3380521 712
5.png 338Кб, 3732x1737
3732x1737
6.png 242Кб, 2735x1350
2735x1350
>>3380472
Вот ещё кейс nullable enable и not null аргумент. По IL и ASM'у отличий от предыдущих нет.
Аноним 04/02/25 Втр 13:03:38 3380532 713
>>3380521
Ну вообще это очевидно любому. string? Это тупо сахар.
Аноним 04/02/25 Втр 13:16:27 3380545 714
>>3380275
>В котлине нет проверок на NULL в рантайме. В c# фича nullable помимо статического анализа добавляет в IL код проверки на null на каждый вызов, но только в релизную сборку
все с точностью до наоборот.
у тебя котлин и шарп местами перепутаны.
Аноним 04/02/25 Втр 14:58:59 3380647 715
Мы все ещё ждём пруфы IL кода с проверками на null.
Аноним 04/02/25 Втр 18:24:37 3380829 716
Аноним 04/02/25 Втр 19:10:52 3380859 717
>>3380829
вот что отвечает чатагпыты
Environment.GetFolderPath(Environment.SpecialFolder.MyComputer)

так зачем ты нас вопросами мучаешь. Вкалывают роботы, а не человек - забыл что ли заповедь.
Аноним 04/02/25 Втр 19:34:25 3380875 718
>>3380545
>все с точностью до наоборот.
>у тебя котлин и шарп местами перепутаны.

К сожалению, всё с точностью, да наоборот. Одна из причин, почему котлин называют выразительным - это что проверки на нулл не надо делать, так как компилятор за тебя всё делает.
Аноним 04/02/25 Втр 19:35:11 3380878 719
>>3380647
> Мы все ещё ждём пруфы IL кода с проверками на null.
Сейчас, подожди
Аноним 04/02/25 Втр 19:46:45 3380890 720
>>3380379
>Почему во всех топах, где сравнивают скорость/эффективность языков жаву ставят выше шарпа?

У джавы более современная виртуальная машина, в которой более выразительный
и лучше поддающийся оптимизации байткод.

Байткод джавы компактнее и там, где дотнет использует 2 машиных слова, джава
зачастую использует одно.

В джаве более шустрый сборщик мусора. Их там вообще много, можно менять как перчатки.

Объект у джавы имеет гораздо более короткий "загловок", у ней быстрее работает виртуальный диспач методов.

В джаве более производительные дженерики, в отличие от дотнетовских, которые на упаковке откисают.

В джаве лямбдам не нужна упаковка, они работают статически.

Потому что JAVA имеет более производительную нативную компиляцию.
Аноним 04/02/25 Втр 19:48:32 3380894 721
>>3380875
К сожалению ты бредишь
Все, как я сказал, а не ты
Аноним 04/02/25 Втр 19:49:40 3380896 722
Аноним 04/02/25 Втр 19:56:25 3380900 723
Ща
Аноним 04/02/25 Втр 20:01:29 3380901 724
>>3380896
Зачем мне ждать. Это не я жду несуществующих проверок в IL
Зато у меня есть правило вырезающее проверки в kotlin

Так что мне ждать нечего
Аноним 04/02/25 Втр 20:37:35 3380916 725
>>3380901
Блять что за хуйню ты мелешь. Какие блять правила, какие вырезания.
Тебе мозги кто-то вырезал, возможно твой жид компилятор хуетлина подумал что там null.
Аноним 04/02/25 Втр 20:49:45 3380931 726
>>3380916
еще раз для особо одаренных
в шарпе проверки на нулл, если ты их явно не впишешь, существуют на уровне анализатора и в итоговый IL не попадают

в котлине же null-safety реально вписывается компилятором в каждый метод для проверки в рантайме что то типа
Intrinsics.checkParameterIsNotNull

И это безобразие приходится вырезать либо с помощью параметров -Xno-param-assertion и -Xno-call-assertions либо всякими там прогуардами

учи матчасть, а потом приходи позориться.
Аноним 04/02/25 Втр 23:21:05 3381040 727
image.png 103Кб, 744x873
744x873
image.png 50Кб, 305x306
305x306
>>3380931
>в котлине же null-safety реально вписывается компилятором в каждый метод для проверки в рантайме что то типа

ебанашка, там на уровне Dalvik, в принципе отсутствует значение NULL. То есть, либо ссылка указывает на валидный объект, либо ссылки вообще нет. В дотнете же есть пиздёжь Балмера о том, что "на уровне компиляции", на практике, если ты в IL посмотришь, там каждый вызов засран проверками на нулл
Аноним 04/02/25 Втр 23:39:07 3381050 728
>>3381040
>там на уровне Dalvik, в принципе отсутствует значение NULL.
в душе не кое что делаю про далвик, но это как бы виртуальная машина для жава. И ты мне говоришь что в жаве нет NULL? ну ок ок )

то есть многочисленные issue на тему этих проверок в котлине тебя не смущает. ты предпочитаешь им свои фантазии
ну хоть бы попробовал

А на скрине твоем что? что ими показать то хотел? На что там смотреть? Это тот обещанный IL? может код принесешь? Да мы вместе проверим как ты обосрался
Аноним 04/02/25 Втр 23:48:07 3381056 729
>>3381040
Это пост из 2013? Дотнет на линупсе через Mono?
Аноним 05/02/25 Срд 00:05:18 3381067 730
>>3381040
Чел чел чел. Ну ты ведь понимаешь что принес сюда nullable типы и судя по коду ещё и атрибуты. Естественно там возможны проверки на null.

Абсолютно любой ссылочный тип в С# nullable по умолчанию. Новый сахар не меняет язык вообще, а добавляет костылями возможность явно указать ожидается ли null вместо ссылки на объект. Это штука исключительно для этого.
Аноним 05/02/25 Срд 00:06:50 3381070 731
Аноним 05/02/25 Срд 00:08:27 3381071 732
>>3381070
Так где исходники того что ты нам принёс. Уважаемые господа сверху тебе показали как надо.
Как ты кстати можешь объяснить что твои кукареки про null чеки никак не влияют не бенчмарк?
Аноним 05/02/25 Срд 00:20:12 3381073 733
>>3381070
Что читать? Твои фантазии?
Тащи код я скомпилирую, а ты поищешь там нулл чеки
Аноним 05/02/25 Срд 01:22:06 3381105 734
Видел в какой-то софтине, не помню где, типа ссылки на одно из стандартных окон с настройками винды. По моему это был то ли диспетчер задач, то ли настройки автозагрузки, то ли ассоциации файлов.
Вот как эта хрень правильно называется?
Аноним 05/02/25 Срд 01:52:56 3381121 735
>>3354675
Это Авалония, на данный момент самый заебись кроссплатформенный фреймворк. Позволяет реактивно в десктоп под Линупсы. В конце прошлого года посмотрел на него и переписал одну из поделок, разделенную на бэк (c#) и фронт (vue) на Авалонии, получилось збс.
Аноним 05/02/25 Срд 01:54:16 3381122 736
>>3354678
Примерно неделю с учетом не работающей без впн большей части документации.
Аноним 05/02/25 Срд 02:57:12 3381134 737
>>3381122
У челы были одни сутки научиться, какая неделя?
Аноним 05/02/25 Срд 07:51:45 3381165 738
>>3381134
Тогда ему в пердолинг с Дельфи, или как оно там сейчас называется. Помню раньше надо чо с формочкам, открыл, контролы набросал, события заполнил и збз довольно урчишь Паскалем в углу, но это было лет 25 назад...
Аноним 05/02/25 Срд 10:15:35 3381245 739
Гайз, решил выучить сишарп, но говорят, что он не выразительный и в нём очень много тормозов из-за проверок на null, которые компилятор генерирует. Стоит ли мне лучше выучить что-то более-менее производительне (python или javascript) ?
Аноним 05/02/25 Срд 11:47:19 3381291 740
>>3381245
стоит. но не эти языки, а святую пыхупэ
Аноним 05/02/25 Срд 12:28:33 3381313 741
>>3381165
>Помню раньше надо чо с формочкам, открыл, контролы набросал, события заполнил и збз довольно урчишь Паскалем в углу,
Вот ты мне сейчас воспоминание разблокировал. Буквально мой первый в жизни кодерский коммерческий заказ. Когда по молодости на заводе подрабатывал, начальник цеха ("ну ты же в компьютерах разбираешься...") попросил дочке помочь с дипломом. А там надо было как раз софтину написать демонстрирующую нетороые рассчеты. Я как раз за паскаль шарил еще со школы. По совету другана взял делфи и буквально за пару дней освоил, сделал и получил бабки. Причем первый день это была просто поездка к другану за диском с инсталлятором и объяснением под пиво, что это вообще за зверь такой. С ним же мы потом гонорар и провивали.
Золотые времена были.
Аноним 05/02/25 Срд 16:29:14 3381537 742
Аноны, посоветуйте литературы для углубленного изучения шарпа. Интересно узнать, что и как компилится в il, что хранится в бинарнике шарпа и другие нюансы.
Рихтера прочитал.
Аноним 05/02/25 Срд 17:56:09 3381714 743
>>3381537
>Рихтера прочитал.
Скита почитай, c# in depth
Аноним 05/02/25 Срд 18:55:26 3381769 744
А мы все ждем IL кода с нулл проверками, которые вписал компилятор без спросу.
Придется детей делать чтобы им завещать ждать, а потом внукам
Аноним 05/02/25 Срд 18:56:42 3381773 745
>>3381537
>Рихтера прочитал.
И тебе мало?
Выдохни, чел. Выйди на улицу, траву там потрогай.
Аноним 05/02/25 Срд 19:53:25 3381853 746
>>3381773
ну летом выйдет. сейчас то ему что делать?
Аноним 05/02/25 Срд 19:54:20 3381854 747
>>3381773
У меня еще снег, слякоть. Еще и холодно... Какая, блин, трава?
Аноним 05/02/25 Срд 22:15:20 3381956 748
>>3381769
Я не жду. Тебе отличный скриншот скинули, и если ты хоть неделю разбирался в устройстве дотнет-машины, то давно бы уже до всего сам догадался
Аноним 05/02/25 Срд 22:16:37 3381957 749
Аноним 05/02/25 Срд 22:19:41 3381958 750
>>3381956
Я могу тебе дикпик скинуть
Только что это доказывает?
А нихрена

Для одаренных - твой скрин ничего без когда и компилятора

Потому что любой может за минуту проверить что ничего компилятор не вписывает

И либо ты показываешь особый код, который скомпилится у всех с
Проверками на нулл
Либо ты вагиномяч

А свой скрин незнамо чего можешь засунуть себе... В мяч
Аноним 05/02/25 Срд 22:38:15 3381967 751
Аноним 05/02/25 Срд 23:02:04 3381990 752
>>3381958
>Я могу тебе дикпик скинуть
>Только что это доказывает?

Нахуя? Ты долбоёб, что-ли. Давай скрин с кодом с проверками на нуле или или на хуй
Аноним 05/02/25 Срд 23:13:30 3381999 753
>>3381990
ты проверяй кому ты пишешь. не вечер пятницы все же
Аноним 06/02/25 Чтв 00:08:31 3382038 754
Что за говно такое?

byte [] говно;
byte жопа = (byte)(говно - 0x30);

Почему я должен писать этот пиздец?
(byte)(говно - 0x30);

Как указать константе что она byte?
Аноним 06/02/25 Чтв 00:18:37 3382044 755
>>3382038
> Как указать константе что она byte?
Через (byte)
Аноним 06/02/25 Чтв 01:01:38 3382056 756
>>3382038
>Почему
Потому что у тебя все выражения справа от знака равно автоматом к int приводится.

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/expressions#1247-numeric-promotions

Почему вы байтоебы плюсанутые документацию читать упорно не хотите, а сразу лезете со своими привычками в другой язык. То указатели им подавай, то байты везде пихают.
Аноним 06/02/25 Чтв 02:26:18 3382074 757
>>3382056
Чё, когда delete завезут?
Аноним 06/02/25 Чтв 02:31:44 3382075 758
>>3382044
Не работает.

>>3382056
>вы байтоебы
Потому что я двоичный файл создаю, прошивка для МК.
Аноним 06/02/25 Чтв 06:17:41 3382100 759
>>3380521
У тебя оба скрина с #nullable enable
Аноним 06/02/25 Чтв 07:22:11 3382109 760
>>3382075
Для московского комсомольца?
Аноним 06/02/25 Чтв 08:12:23 3382123 761
>>3382075
Щас бы писать прошивку на шарпе. Ты С не осилил?
Аноним 06/02/25 Чтв 08:37:07 3382134 762
image.png 32Кб, 582x418
582x418
>>3381958
Извини, не было времени ответить
Аноним 06/02/25 Чтв 08:43:48 3382141 763
>>3382038
Поясни, нахуя нужно кодировать числа вот так 0x30 ?

Почему ты просто не напишешь 48? Крутизна не позволяет?
Аноним 06/02/25 Чтв 10:05:26 3382200 764
>>3382141
Я не он, но отвечу, что когда работаешь на уровне именно байтов, то 16-ричное представление гораздо удобнее (насколько нужно вообще байтоебить на шарпе, это отдельный вопрос).
Есть не только байтоебные области где, это может быть удобнее, например кодирование цветов намного удобнее и нагляднее в hex, чем в 10-ричной системе.
Аноним 06/02/25 Чтв 11:51:23 3382248 765
>>3382134
И что это за херота?
Что это за нагромождение кода? Какое то безумное создание не пойми чего, какие то явные касты и вообще куча говна
Хз вообще что ты доказываешь этим кодом, что скрином с IL и что доказываешь вообще.

Напоминаю забываке утверждение

"не нужно везде проверять на null, потому что компилятор помогает отследить хождение nullable типов, а значит ЗАЧЕМ ЗРЯ ТАКТЫ ПРОЦЕССОРА ТРАТИТЬ на явные проверки (достаточно защититься на границе контекста, но это уже оффтоп)"
И далее идет утверждение (мое, которое противоречит ошибочному чужому) - в шарпе дальше анализаторов ничего не идет, а в котлине эти проверки будут В КАЖДОМ МЕТОДЕ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! вписаны в IL и создаст оверхед (если не озаботиться их вырезанием)

Твой код вообще хз о чем.

Есть простой способ проверки.
пишешь

public void Foo(string text){...}
и подобный код на котлине
fun foo(text: String){...}

И если их скомпилировать, то в шарпе не будет ничего лишнего, а в котлине компилятор добавит проверку text на null через Intristics (что не значит плохо, лично я поклонник fail fast с возможностью вырезать ассерты, но это просто факт)
Аноним 06/02/25 Чтв 13:04:42 3382312 766
>>3382248
Как твой ответ коррелирует с тем, что компилятор генерирует проверки на NULL? Это факт и с этим уже ничего не сделаешь
Аноним 06/02/25 Чтв 14:01:44 3382346 767
>>3382312
>что компилятор генерирует проверки на NULL
ГДЕ генерирует? ткни пальцем где он генерирует проверку нарушая правила null safety
Аноним 06/02/25 Чтв 14:17:29 3382354 768
Аноним 06/02/25 Чтв 14:46:03 3382369 769
>>3382354
показать можешь?
даешь мне код, я генерю из него IL
ты показываешь где компилятор делает то, что не должен
и обосновываешь почему не должен.
Аноним 06/02/25 Чтв 14:47:53 3382370 770
>>3382369
Да, могу. Смотри выше. И в предыдущем тренде несколько раз обсуждали.
Аноним 06/02/25 Чтв 15:02:05 3382380 771
>>3382370
что выше смотреть? показывай что смотреть и поясняй
у меня нет хрустального шара разбираться

и напоминаю - мы говорим про фичу null safety, которая БЫЛА ДОБАВЛЕНА намного позже чем родился компилятор шарпа.
То есть как бы компилятор в принципе не опирается на правила какого то там анализатора вовсе - и не генерит ассерты не потому что анализатор говорит ему "не надо", а просто потому что он НИКОГДА И НЕ ГЕНЕРИЛ их
Шарп по природе своей имеет null и ожидание null, а всякий там null safety прикручен сбоку и компилятором не командует.
И для шарпа все ссылочные типы нуллабельные по определению.

Но все же давай разбираться.
Про котлин ты уже молчишь - там тебе показали Intristics и ты в кусты (хотя конечно может и не ты про котлин заявлял что он ничего лишнего не генерит)

не помню в прошлом треде "несколько раз обсуждали"
тащи, показывай
я не буду за тебя копать.
Аноним 06/02/25 Чтв 15:39:59 3382401 772
>>3382380
Чувак, прекращай кормить троля. Явно же видно, что он прикидывается идиотом, жирнит и разводит тебя на длинные пасты.
Аноним 06/02/25 Чтв 16:11:16 3382415 773
>>3382401
ну почему же. Вон он целый код родил пытаясь заставить компилятор....вот тут я не понял что.
Технически он прав - шарп не пытается доказывать "там не может быть null" на уровне IL. И он использует callvirt, который внутри себя проверит на нулл чтобы выбросить NRE. Есть конечно NullableContext, но я хз как он влияет на работу callvirt

Вот только так поступает и жава и котлин (который на жава рантайме) - там вызывается invokevirtual который страдает тем же недостатком "ни про какие не-нулл ссылочные типы мы знать не знаем"

Вот если бы это был какой нибудь rust, то другое дело

Это JIT потом может вырезать бесполезные проверки на null если сможет доказать что их там не будет.

А вот с null-safety на уровне кода
- в шарпе она прикручена сбоку и поздно. Безусловно оно может влиять на работу JIT через всякие там NullableContext. Это у нас читальщик рихтера пояснит
- в котлине оно изначально и попутно дописывает ассерты но Intrisctics, про которые jit знает и может их выбрасывать если докажет.
(по факту доказывает он не очень, но не думаю что в шарпе дело обстоил лучше)
Аноним 06/02/25 Чтв 16:58:20 3382435 774
>>3382415
>Технически он прав

Теперь извинись
Аноним 06/02/25 Чтв 17:30:18 3382453 775
>>3382435
не буду я извиняться за чужой обсер.

напоминаю оригинальное БРЕДОВОЕ заявление

"В котлине нет проверок на NULL в рантайме. В c# фича nullable помимо статического анализа добавляет в IL код проверки на null на каждый вызов, но только в релизную сборку"

я выступил против этих слов и попросил автора бреда предоставить пруф

И то, что мне начали впаривать про "нулл проверки поскольку рантайм ничего не знает про не-нуллс ссылочные типы" - вообще к теме не относится.
Такое положение дел и в шарпе и в шарпе (и автоматически в котлине)

А вот с фичей nullable все обстоит РОВНО НАОБОРОТ от этого заявления
И я по прежнему жду кода пруфа который можно скомпилить и увидеть проверки на нулл которые будут вписаны в IL. calvirt это не проверка на null на уровне IL - это просто вызов метода.
Аноним 06/02/25 Чтв 17:32:03 3382455 776
>>3382453
>и в шарпе и в шарпе
и в шарпе и говножаве (фикс)

то есть я жду где мне предоставят пруф что фича nullable что то там вписывает.
Аноним 06/02/25 Чтв 17:59:21 3382482 777
>>3382455

Нет, так не пойдёт. Извинись
Аноним 06/02/25 Чтв 18:43:10 3382501 778
>>3382482
Ок. Извини что вынудил тебя так сильно обосраться
Аноним 06/02/25 Чтв 19:01:24 3382514 779
>>3382109
МикроКонтроллер


>>3382123
Там не только прошивка, но и прошивалка прошивки, а у неё оконный интерфейс.

>>3382141
Потому что надо преобразовать аски-код цифры собственно в саму цифру.
Аноним 06/02/25 Чтв 22:44:37 3382682 780
>>3382514
>Там не только прошивка, но и прошивалка прошивки, а у неё оконный интерфейс.

А ведь были времена, когда и гуй некоторые на асме писали...
Аноним 06/02/25 Чтв 22:49:25 3382684 781
Снимок.PNG 184Кб, 600x858
600x858
>>3382200
>Есть не только байтоебные области где, это может быть удобнее, например кодирование цветов намного удобнее и нагляднее в hex, чем в 10-ричной системе.

А в данном то конкретном случае оно тебе что дает? Вот блять, если честно, начинают заебывать гении, придумывающие свои оптимизации... Извините, просто накипело, третий день не могу отойти от отечественной разработки "ЛМ ЧЗ", где цену приводят в целое до копеек и кодируют в 80-ричную систему, да и хуй бы с ним, но они еще и словарь свой придумали...
Аноним 06/02/25 Чтв 22:51:28 3382685 782
>>3382684
какие нахрен оптимизации
байт пишется как БАЙТОВОЕ ПРЕДСТАВЛЕНИЕ ЯВНО, чтобы оно ТАК И ЧИТАЛОСЬ
что за хрень ты несешь, гений блин.
Аноним 06/02/25 Чтв 22:52:26 3382688 783
>>3382684
И ведь блять не прикопаешься, "14630" до “ACW.” сократили, аж блять на 20%, кто-то наверно и премию получил...
Аноним 06/02/25 Чтв 23:01:19 3382693 784
>>3382688
А ведь могли бы использовать 16-ричную систему и полусить те же 4 символа - "3926", только для конвертации использовать стандартные либы, а не весь вот этот пердолинг...
Аноним 07/02/25 Птн 00:49:01 3382726 785
А я всё жду код где включенном nullable компилятор проверки впишет в IL
Аноним 07/02/25 Птн 10:57:12 3382909 786
image.png 53Кб, 1705x551
1705x551
Время долбоёбских вопросов.

Что лучше подойдёт как результат проверки на содержание словарём ключа и значения, если такой ключ таки содержится?

Мне больше нравится левый вариант (потому что это один класс, не надо проверять тип), но я никак не могу придумать нормальное имя для метода Contained - всё, что приходит в голову, больше тянет на свойство, либо получается длинная херота.
Аноним 07/02/25 Птн 11:06:32 3382917 787
>>3382909
что ты изобретаешь?
есть же TryGetValue/ContainsKey
Аноним 07/02/25 Птн 11:49:32 3382937 788
>>3382917
Да ничего, пробую то-сё, а это просто пример.
Аноним 07/02/25 Птн 11:54:06 3382938 789
>>3382937
Изобретаешь велосипеды с квадратными колесами
причем они не на раме даже, а на руле
Аноним 07/02/25 Птн 12:22:19 3382960 790
>>3382909
>>3382937
Нафига, пользуйся родными методами и оборачивай их в обычные Result/Maybe
Аноним 07/02/25 Птн 12:50:33 3383000 791
>>3382960
Result кака, ведь это шарп
нужно сразу брать OneOf
Аноним 07/02/25 Птн 14:28:34 3383089 792
image.png 4Кб, 787x21
787x21
>>3382909

Вот то, чем ты сейчас занимаешься - это вредительство в чистом виде. Ты поверх c# и стандартной библиотеки пишешь поносную хуету, которую перестанут сопровождать как только ты покинешь проект.

Ну или сам повзрослеешь, перестанешь маяться хуйнёй и просто возьмёшь Automapper, который отвечает за эту хуету в нормальных проектах.
Аноним 07/02/25 Птн 14:54:30 3383144 793
>>3383089
Брух, я хуй простой скуф, даже не вкатывальщик в айти, у меня это хобби. Я даже сижу на старой версии, ибо зачем мне новое, если я базу ещё не понял.
Аноним 07/02/25 Птн 15:51:47 3383197 794
>>3383144
Понятно. Только на банку то зачем садиться то?
Аноним 07/02/25 Птн 19:16:23 3383369 795
>>3383144
>Если я базу ещё не понял.

А чего её понимать? База это понимание двух вещей: MediarR и Automapper.

Строишь на них событийно-ориентированный доменный автомат, и оно всё само за тебя работает, ты только сущности добавляешь
Аноним 07/02/25 Птн 21:22:25 3383449 796
>>3383089
А не похуй ли что там будут сопровождать что не будут?
Вот срсли.
Кабан-кабанычу - хуйлан. Коллеги - хуйланы.
Все вокруг - пидорасы, которым похуй на все, кроме на деньги.
Так нихай страдают.

Переопределил в коде все что только можно, самые критически важные куски кода завязал на свою функциональную хуйню. Шлифанул всезд где можно и нельзя ансейфом, ну и свою ОРМ сверху, на которой вся работа с БД построена сделал.
Если сдохнет - ну, и славно, я весело провел время.
Аноним 07/02/25 Птн 23:35:02 3383537 797
>>3383449
>я весело провел время.

Ты отбитый мудак
Аноним 07/02/25 Птн 23:40:15 3383538 798
>>3383449
Респект. Делаю точно так же.
Правда коллеги у меня норм, заняты примерно тем же чем и я, просто мы договорились не мешать друг другу весело проводить время.
Аноним 08/02/25 Суб 08:56:48 3383635 799
Подскажите, есть ли Roslyn-анализатор, который проверяет, что в коде соблюдается запрет на создание объектов через new ?

Мне надоело учить коллег как правильно делать ООП и DDD, я бы хотел, чтобы это автоматически работало, где-нибудт при сборке
Аноним 08/02/25 Суб 09:29:02 3383647 800
>>3383635
А причем тут OOП и запрет new. Я бы тебя нахуй послал и сдал техлиду или СТО что ты долбоеб проф непригодный который вместо нормального кода DDD делает.
Аноним 08/02/25 Суб 09:47:00 3383662 801
framework.jpg 283Кб, 833x1953
833x1953
>>3383647
Чел, на всех серьёзных проектах запрещают создание объектов через NEW. Для этого существует Automapper, Ну, или на худой конец можно написать абстрактную фабрику, или если вообще припекло - через рефлексию создавать. Вот так мы на прошлом проекте создавали объекты
Аноним 08/02/25 Суб 09:49:21 3383665 802
>>3383647
Там, смотри скриншот выше приложил, я немного сократил обработку исключений, но основная мысль в том, что всё работает САМО, и тебе не нужно никаких NEW писать.
Аноним 08/02/25 Суб 13:10:10 3383807 803
>>3383537
вот ты ругаешься, а у человека ДОХРЕНА свободно времени и ДОХРЕНА дури чтобы все это творить.
Аноним 08/02/25 Суб 14:56:18 3383945 804
>>3383635
>Мне надоело учить коллег как правильно делать
А схуя ли ты решил что это правильно?
Аноним 08/02/25 Суб 15:00:58 3383948 805
>>3383647
New - это рак.
Вот серьезно. Особенно в эпоху когда у тебя есть DI.
Знаешь насколько кайфово, когда вот такой вот охуенный дед, который любит всюду new хуярить - потом ходить и за ним говно вычещать, потому что еблан забыл отписаться, задиспозить нужное или еще что-то.
Про тесты я не говорю.
new в 2025 это все равно что руками дергать сисколы, писать обработчики прерываний или выделять память. С вероятностью 99% ты насерешь, потом остальным разбираться.
Аноним 08/02/25 Суб 15:54:47 3384002 806
>>3383948
У нас физически невозможно new вызвать У нас полное DDD и так получается, что мы только с абстракциями работаем. Во всех контрактах у нас интерфейсы. А они в свою очередь автоматически резолвятся в соответствии с настройками DI.

Просто инжектишь IMediator и он за тебя всё делает как надо
Аноним 08/02/25 Суб 15:56:22 3384003 807
>>3383948
>потом остальным разбираться
Ну так и радуйся, это озанчает, что у тебя будет работа.
Аноним 08/02/25 Суб 15:57:51 3384005 808
image.png 2Кб, 205x32
205x32
>>3382075
литерала нет под байт, просто напиши byte a = 1;
Аноним 08/02/25 Суб 16:06:21 3384018 809
>>3383948
>new в 2025 это все равно что руками дергать сисколы, писать обработчики прерываний или выделять память. С вероятностью 99% ты насерешь, потом остальным разбираться.

В гайдлайнах Microsoft запрещено new писать. Только Activator.CreateInstance(...)
Аноним 08/02/25 Суб 17:02:44 3384065 810
>>3384002
>У нас физически невозможно new вызвать
то есть не делаете new List<>/Dictionary<>

сдается мне что ты пи.....лукавишь
Аноним 08/02/25 Суб 17:09:39 3384074 811
>>3384065
Для такого в нормальных проектах есть отдельная фабрика, создающая коллекции, чтобы всякие мимокроки не создавали непонятно что.
Аноним 08/02/25 Суб 17:14:36 3384078 812
>>3384074
фабрики для всего? совсем поехавшие
Аноним 08/02/25 Суб 17:20:09 3384084 813
>>3384065
>то есть не делаете new List<>/Dictionary<>

Ни в коем случае! У нас запрещены не-доменые коллекции (читай, которые ломают событийную модель). Все коллекции заменены на асинхронные, которые через медиатор тригерят события.
Аноним 08/02/25 Суб 17:26:49 3384088 814
>>3384078
Зачем для всего? Пишешь одну фабрику, она тебе создаёт все объекты. Ну или настраиваешь маппер, на создание объекта из энама объектов:

var domainIdentity = _mapper.Create(DomainFactoryObjects.Identity).AsAggregate<IdentityDomainAggregate>;
Аноним 08/02/25 Суб 17:56:07 3384107 815
>>3384074
>>3384084
А после работы вы садитесь в кружок и дрочите друг другу приговаривая - "Какие же мы охуенные, у-у-ух, бля...".
Аноним 08/02/25 Суб 18:06:20 3384117 816
>>3384084
да я уже понял ваш диагноз. хватит усугублять )
Аноним 08/02/25 Суб 18:10:29 3384120 817
А почему нельзя использовать new?
Аноним 08/02/25 Суб 18:26:43 3384134 818
>>3384002
А как вы пишете
Создание вспомогательных списков, массивов и причём тут блять DDD и ООП?

В ООП нет никаких запретов на прямое создание объекта, а ДДД вообще к коду не имеет отношения это инфоцыганская хуйня для аналитиков.
Аноним 08/02/25 Суб 18:31:14 3384143 819
>>3384084
>Ни в коем случае! У нас запрещены не-доменые коллекции (читай, которые ломают событийную модель)
Ебанутый, причём тут событийная модель которая относится к взаимодействию разных сервисов или общей шине монолита и коллекции.

Ты блять как например делаешь
var zalups = new List<Zalupa>()
//Хитрое создание залуп из пуп
return zalups;

Где-то в проекте у тебя будет вызовы new. Ты не сможешь ничего написать без этого.
Аноним 08/02/25 Суб 18:50:30 3384153 820
>>3384134
>А как вы пишете

Через DDD

> Создание вспомогательных списков, массивов и причём тут блять DDD и ООП?

В домене нет списков и массивов. Всё, что не раскрывается в домене не имеет смысла создавать в коде. Читай ниже пример с портфелем

> В ООП нет никаких запретов на прямое создание объекта

Не запрещено. Но в домене всегда есть вездесущий язык, на котором пишется доменный код. А в нём никаких NEW нет.


Вообще считается, что есть ряд признаков, по которым можно отличить мусорный императивный код от обычного ДДД:
- Создание объектов руками
- Более одной точки с запятой в методе
- Использование реальных классов за место абстрактных интерфейсов
- Использование функций, которые не привязаны к объектам
- Использование примитивных типов, не относящихся к домену. У тебя по сути не может быть МАССИВА потому что в домене вообще никогда не бывает таких категорий. Может быть, например ПОРТФЕЛЬ С ПИСЬМАМИ. Или у тебя не может быть переменной Int32, у тебя всегда определяется доменный тип КОЛИЧЕСТВО.


Такая хуйня. Я первый раз тоже долго вникал, но потом понял, и оказывается, в ДДД, после того как всё правильно настроили, вообще код почти не надо писать. Добавил аггрегат, а он сам по себе работает
Аноним 08/02/25 Суб 18:54:45 3384155 821
>>3384143
>Ты блять как например делаешь
>var zalups = new List<Zalupa>()
>//Хитрое создание залуп из пуп
>return zalups;

Такого кода не может быть в ООП. Как ты тест напишешь?

Вижу два решения:
- Корректная конфигурация маппинга пуп на залупы. Ты декларативно описываешь логику и никаких new нет
- Фабрика, котрую ты инжектишь. Но это не фабрика List<Zalupa>(), а абстрактная фабрика доменного агрегата залуп. Скорее всего будет фабрика хуя, потому что залупы никогда не бывают в списке и это нарушает доменные ограничения
Аноним 08/02/25 Суб 19:19:09 3384170 822
>>3384155
>Как ты тест напишешь?
контракт, батенька, КОНТРАКТ
Аноним 08/02/25 Суб 21:23:03 3384218 823
>>3384005
Плохо что так нельзя
(byte)0x30
Интересно почему есть такое ограничение? Или тупо не догадались добавить?
Аноним 08/02/25 Суб 21:40:53 3384223 824
image.png 9Кб, 259x110
259x110
>>3384218
Ты заебал. Можно так делать, работает, компилируется. НО НАХУЯ?
Аноним 08/02/25 Суб 23:08:07 3384253 825
>>3384223
>Можно так делать, работает, компилируется.
А вот и не знаю, такое вот не компилируется:
byte [] говно;
byte жопа = говно[5] - (byte)0x30;
Аноним 09/02/25 Вск 00:09:41 3384259 826
>>3384253
конечно
потому что при
byte foo = 0x30
компилятор может скастить в byte при компиляции и быть уверенным что все ок
а результат вычитания это int и если тебе так надо byte, то сам касти его к byte подписываясь под договором о ССЗБ
Аноним 09/02/25 Вск 01:05:43 3384267 827
>>3384259
>а результат вычитания это int
Как вообще из (byte) - (byte) может получится int? Что за шиза?
Аноним 09/02/25 Вск 01:28:05 3384271 828
Аноним 09/02/25 Вск 03:42:44 3384284 829
>>3384267
как как
читай определение
Представляет 8-разрядное целое число без знака.

А теперь отними 10-100 и попробуй выполни условие.
А для надежности отними 0-255 и попробуй впиши в 8 бит

как получится - пиши в мелкософт что они все идиёты
Аноним 09/02/25 Вск 05:58:47 3384312 830
>>3384271
>>3384284
>для надежности отними 0-255 и попробуй впиши в 8 бит
0000 0001
Я понимаю, что защита от дурака и всё такое. Но если я использую byte значит я занимаюсь байтоёбством и здесь любые ограничения только во вред.

>мелкософт что они все идиёты

Таки да.
Аноним 09/02/25 Вск 06:13:11 3384314 831
Заебали со своим 0x30 бля
Аноним 09/02/25 Вск 06:27:55 3384316 832
image.png 35Кб, 598x537
598x537
Аноним 09/02/25 Вск 07:08:51 3384330 833
>>3384316
>самого Скита
Твой однаклассник-протыкан?
Аноним 09/02/25 Вск 11:54:15 3384439 834
>>3384312
>0000 0001
вижу число ОДЫН

> Но если я использую byte значит я занимаюсь байтоёбством
ну так делай это ЯВНО. я вот не хочу 0 - 255 получит ОДЫН и узнать об этом где то потом в рантайме в проде.

>здесь любые ограничения только во вред.
нет никаких ограничений. есть просто НЕСКОЛЬКО перегрузок операций арифметики для упрощения этой самой арифметики с учетом возможности переполнения (ну чтобы его не было лишний раз).

>>3384316
> в джаве то же самое поведение.
но учитывая что шарп это калька с жавы, то ожидаемо. Они оттуда и null притащили

А так да - ТАК ИХ. пусть знают что нех мне тут ишь ты чего удумали мешать байтоебу стрелять себе по ногам.
Аноним 09/02/25 Вск 17:43:07 3384789 835
>>3384439
>ишь ты чего удумали мешать байтоебу стрелять себе по ногам.
Чел, дело не в возможности выстрелить себе по ногам. Возможность байтоебить в шарпе - это побочка и вряд ли покрывает хотя бы несколько процентов кейсов его использования. И при использовании byte и прочих подобных типов меньше int оно все будет каститься для арифметики к int-у или выше. Просто потому что это тупо быстрее на 99% современной архитектуры. Да даже МК сейчас все 32x поголовно и стоят копейки.
Поэтому если ты хочешь прям хардкорно байтоебить, то врубаешь ансейф, кастишь все явно, юзаешь указатели и т.д. Ну или берешь обычный C, Rust или еще что и не ебешь себе мозг.
Аноним 10/02/25 Пнд 08:07:43 3385273 836
>>3384789
>Поэтому если ты хочешь прям хардкорно байтоебить, то врубаешь ансейф, кастишь все явно, юзаешь указатели и т.д. Ну или берешь обычный C, Rust или еще что и не ебешь себе мозг.

Зачем, если можно просто Automapper взять и замаппить мутный байтоёбский код на обычные доменные сущности?
Аноним 10/02/25 Пнд 08:42:46 3385292 837
>>3385273
Расскажи плиз подробнее об этом? Мне как раз нужно.
Аноним 10/02/25 Пнд 09:48:49 3385326 838
>>3385292
>нужно

Сначала добавляешь два нугета Automapper и MediatR. Затем все регистрации DI переписываешь на обработку команд из пайплайна. Команды создаёшь автомаппером.
Аноним 10/02/25 Пнд 09:53:17 3385330 839
>>3385326
Спасибо. Пойду разбираться.
Аноним 10/02/25 Пнд 09:55:42 3385332 840
>>3385330

Очередной долбоёб будет переписывать приложение на медиатр/автомаппер, чтобы байтоёбские проблемы починить. Надеюсь, ты проебёшь 2-3 месяца на это, и потом вернёшься к работе
Аноним 10/02/25 Пнд 10:00:25 3385336 841
>>3385332
Спасибо за такие высокие оценки моей продуктивности. Я планировал месяцев 5 потратить на рефакторинг.
Аноним 10/02/25 Пнд 10:51:16 3385356 842
Может кто-нибудь пояснить по хардкору плюсы/минусы использования Automapper и MediatR.
Очень интересно.
Аноним 10/02/25 Пнд 11:39:48 3385422 843
>>3385356
Все плюсы CQRS паттерна. Не нужно регистрировать ничего, всё само работает. Код гораздо более понятный для компилятора становится. В конструкторе не более двух зависимостей. Автоматические перехваты любых вызовов, AOP из коробки

Минусов нет
Аноним 10/02/25 Пнд 11:42:07 3385423 844
>>3385356
https://arialdomartini.github.io/mediatr
https://habr.com/ru/articles/705296/

Я для маппингов в последнее время стал использовать Mapster с его функцией кодогенерации маппингов в методах-расширениях. Они для моих кейсов (маппинг dto-ки в dto-ку) лучше подходит. Во-первых, сильно быстрее работает, а во-вторых, всегда можно понять, как он там маппит, нормально это поотлаживать (банально можно в сгенерированный метод провалиться во время отладки) и руками исправить маппинг в случае чего.
Аноним 10/02/25 Пнд 11:52:20 3385435 845
>>3385422
Плюсы Automapper:
Легче отладка
Быстрее навигация по коду
Не вбрасывает никаких исключений, просто работает
Автоматические конвертации
Чистая архитектура невозможна без автомаппера
Выше производительность, и быстрее компиляция, старт приложения (автомаппер работает отложенно).

Минусов нет
Аноним 10/02/25 Пнд 12:42:54 3385495 846
>>3385435
приятно когда в палате интернет есть?
Аноним 11/02/25 Втр 00:17:05 3386149 847
Вот вы все такие тут умные сидите, объясните мне, байтоёбу, как сделать указатель на структуру.
Вот получил я по езернету некий кадр, как бы я сделал раньше? Я бы создал указатель на структуру и присвоил ему адрес кадра и бац! у меня кадр сам по полям разложился. А тут?
Аноним 11/02/25 Втр 00:33:50 3386155 848
>>3386149
Хуйтут. Если тебе надо кадры дрочить и память нахуй ты на С# полез.
Выучи блять больше 1 языка. Желательно С++, С#, питон, JS и ещё какой на твой вкус. Каждой задаче необходим свой инструмент.
Аноним 11/02/25 Втр 00:50:14 3386163 849
.png 12Кб, 613x210
613x210
>>3386149
Байтоёб, значит? Ну, смотри.
Аноним 11/02/25 Втр 00:53:06 3386166 850
>>3386163
Заменить src на input, но ты и сам разберёшься.
Аноним 11/02/25 Втр 08:45:26 3386256 851
>>3385495
Да пизжу, конечно. Автомаппер - это мусор, который работает тогда и только тогда, соблюдают КОНВЕНЦИИ.

А конвенции обязуют иметь одинаковое именование и предсказуемую структуру данных во всех слоях.

На практике этого возможно добиться только в CRUD приложении на 2-3 сущности, но там не требуется множества слоёв, и, соответственно, автомаппер не нужен.
Аноним 11/02/25 Втр 08:56:19 3386264 852
>>3386163
Класс! Я и не знал, что шарп так может.
Аноним 11/02/25 Втр 09:53:21 3386299 853
>>3386264
ну это сильно низкий уровень. Можно и повыше быть в районе MemoryMarshal, Unsafe и по возможности работать с ref не опускаясь до чистых указателей.
Аноним 11/02/25 Втр 09:55:28 3386301 854
Аноним 11/02/25 Втр 15:31:53 3386595 855
>>3386299
>Можно и повыше быть
>Unsafe
Лол
Аноним 11/02/25 Втр 16:49:27 3386671 856
>>3386595
все верно. С его помощью ты опасно копаешься в кишках Span с помощью некоего высокоуровнего апи, но все же не опускаешься до сырых указателей (которым нужно делать fixed чтобы GC не сломало всё посреди операции)
Аноним 11/02/25 Втр 18:21:47 3386734 857
>>3386671
>С его помощью ты опасно копаешься в кишках Span
Если, про MemoryMarshal, то да, он по большому счёту про спаны, но Unsafe'ом можно ковырять любой ref.

>с помощью некоего высокоуровнего апи
Ты серьёзно? Unsafe - ни одного высокоуровнего апи, MemoryMarshal - может и можно некоторые методы с натяжкой назвать высокоуровневыми.

>но все же не опускаешься до сырых указателей
По тому как ты выразился у меня складывается впечатление, что ты считаешь: "раз нет unsafe контекста, то значит это безопасней" (я столько раз видел такое мышление, это просто пиздец; как люди ебашат просто лютейший UB, но "зато без unsafe").
>(которым нужно делать fixed чтобы GC не сломало всё посреди операции)
Зато Unsafe'ом или MemoryMarshal'ом можно случайно превратить ref, который указывал на объект, в ref который теперь указывает хуй пойми куда (или наоборот).
Аноним 11/02/25 Втр 19:01:25 3386788 858
>3386671

Хочется больше уточнить по поводу ref.
По спеке ECMA-335:
>If address arithmetic is used to create a managed pointer that refers to any other location (an object header or a gap in the allocated memory) the garbage collector’s behavior is unspecified.
Но рантайм вроде частично ок с этим (по крайней мере пока этот ref не dereferenced).
Вот, проблема в том что GC смотрит на ref'ы, а на указатели ему поебать. И с помощью этих апи можно случайно изменить ref таким образом, что GC может его обновить при сборке мусора (так как ref начал указывать на объект) или наоборот не обновит (если ref перестал указывать на объект).
MemoryMarshal имеет Create[ReadOnly]Span() и GetReference() методы, которые вообще не проверяют аргументы (и с этими методами можно: записать в ref который ты получил и пустого Span'а, создать Span с неправильной длиной (а если с отрицательной, то 100% UB, ведь JIT генерит код считая что у спана длина не может быть отрицательной) и т.д.).

И нормальных туториалов по Unsafe и MemoryMarshal нет. Даже в доках толком примеров нет (ну хотя бы Unsafe говорит какие разделы спеки почитать, но сколько людей реально пойдут читать, а не сразу побегут играться с новым ногострелом). И ещё есть туториалы в которых с помощью StructLayoutAttrbiute ебашат UB.
В общем, ref'ы не безопаснее, чем голые указатели (а если учесть что множество туториалов про unsafe (указатели и т.д.) слишком поверхостные, то указатели могут оказаться даже безопасней, особенно для новичков).

Ну и в догонку:
>Enumerating type safety guarantees in MemoryMarshal and friends
https://github.com/dotnet/runtime/issues/41418
Аноним 11/02/25 Втр 19:02:37 3386793 859
Аноним 11/02/25 Втр 20:23:09 3386847 860
>>3386734
>раз нет unsafe контекста, то значит это безопасней
я не говорил безопаснее. Я говорил про уровень погружения в пучину.
Тебе проще на сырых указателях, а мне ровно наоборот - ехал спан через спан и иногда палец в спан.

С доками да, но на самом деле их валом статей и я следил за рождением всего этого поэтому мне это ближе.
А на unsafe чистый не лез, мне такое погружение не нужно.
Аноним 11/02/25 Втр 20:45:32 3386861 861
>>3386163
Это всё, конечно, интересно, но задача это типовая. Неужели нет способа лайтовее её решить?
Аноним 11/02/25 Втр 20:47:13 3386863 862
Аноним 11/02/25 Втр 21:12:34 3386874 863
>>3386861
Для языка, на котором пишут системщину, может и типовая. Но не для языка, на котором перекладывают жсоны и клепают формочки.
Аноним 11/02/25 Втр 22:22:22 3386920 864
Аноним 11/02/25 Втр 23:17:48 3386948 865
>>3384267
Я вообще не понимаю нахуя с байтами арифметика, запретить и нахуй. Байты как тип имеют полное право на жизнь для составления датаграмм в протоколах железок, типа если надо с сериал портом работать, т.к. в даташитах этих протоколов все в байтах и это правильно. Но арифметика...
Аноним 12/02/25 Срд 01:14:43 3386982 866
>>3386920
>MediatR
Не слышал. Посмотрю.

>>3386863
>>3386874
>для языка, на котором клепают формочки
А если надо и то и другое?

>>3386920
Не ну можно, конечно, и битовыми операциями обходиться, маски накладывать, но иногда, как в моём случае, легче вычитанием бахнуть.
Аноним 12/02/25 Срд 10:01:51 3387215 867
Анончики, можете пожалуйста помочь? Мне дали тестовое задание разработать что-то, что называется C#-библиотека, которая загружает данные через сторонний API в бд и предоставляет свой API для мониторинга статуса загрузки. Вопрос, что такое C#-библиотека? Они хотят, чтобы я просто приложение сделал, с контроллерами, слоями и всем таким, или мне нужно запихать всё в библиотеку классов?
Аноним 12/02/25 Срд 10:10:04 3387221 868
>>3387215
Подразумевается сборка в DLL. API в данном случае - это публичные классы и методы с документацией.
Аноним 12/02/25 Срд 10:25:41 3387241 869
>>3387221
> API в данном случае - это публичные классы и методы с документацией.
У них в тз написано, что чтобы инициировать загрузку данных, нужно по rest api обратиться к самому приложению.
Во
> POST /api/load
> Content-Type: application/json
А чтобы получить данные, соответственно с GET уже.
Такое приложение всё равно же можно собрать в DLL? Хотя нет, я не понимаю. Нужно ли в итоге писать главный проект, где точка входа.
Аноним 12/02/25 Срд 11:10:55 3387281 870
>>3387215
Ты случаем не в одну волгоградскую контору собеседуешься?
Аноним 12/02/25 Срд 11:20:59 3387287 871
>>3387281
Нет, не в волгоградскую. А ты о какой? Какая-то известная в узких кругах?
Аноним 12/02/25 Срд 11:45:38 3387317 872
>>3387241
> У них в тз написано, что чтобы инициировать загрузку данных, нужно по rest api обратиться к самому приложению.
Тут надо дёрнуть стороннее REST API через какой-нибудь HTTP-клиент, но собственное API проекта - это публичные методы.
> Такое приложение всё равно же можно собрать в DLL?
Да.
> Нужно ли в итоге писать главный проект, где точка входа.
Если напрямую не требуют, модно не писать, но лишним не будет для ручных тестов.
Аноним 12/02/25 Срд 11:49:44 3387326 873
>>3387287
Не важно, просто ТЗ формулировкой очень напоминает то, которое я для них делал когда-то давно.
Если они руководствуются той же логикой можешь сделать так.
- делаешь основное приложение - стандартный asp.net сервис, у которого есть API, в который ты можешь ткнуться. В Api два эндпоинта. Один для сохрания данных, который будет принимать запрос, сохранять в БД и возвращать Id. И второй метод это возможность по id проверить статус этих данных (предполагается, что за это время с ними какая-то работа совершается, например фоновой задачей)
- делаешь отдельную библиотеку-клиент в которой предоставляешь интерфейс через который можно дернуть нужный сервис.
- делаешь простое консольное-мок-приложение, к которому подключаешь эту библиотеку и чтобы пользователь мог через него сохранить свои данные и получить их статус.

Ну и все это подготавливаешь для показа. Первый сервис где-нибудь разворачиваешь или подготавливаешь докер для него. Для мока делаешь билд, который можнго запустить и потыкать палочкой. Ну и всякие там документации исходники и т.д. не забываешь.
Аноним 12/02/25 Срд 12:14:09 3387352 874
>>3386847

>я не говорил безопаснее. Я говорил про уровень погружения в пучину.
>Тебе проще на сырых указателях, а мне ровно наоборот - ехал спан через спан и иногда палец в спан.
Не, я за спаны и всё такое (к тому же учитывая что только спаны получают "интересные" (LastIndexOfAny, SearchValues и т.д.) апи, а String и Array - ничего из этого). Я скорее про то что если лезть в MemoryMarshal и Unsafe надо быть особенно осторожным (учитывая нюансы перечисленные в >>3386788 ).

>С доками да, но на самом деле их валом статей и я следил за рождением всего этого поэтому мне это ближе.
>А на unsafe чистый не лез, мне такое погружение не нужно.
А каков процент статей которые идут дальше чем: fixed - в статьях про unsafe, "щас строки без аллокаций поковыряем" - про спаны? К тому же большинство статей про unsafe контекст старые как говно мамонта (даже новые, блядь, содержат инфу 15 летней давности). Я не спорю что такие блоги/статьи есть, где автор полностью осознаёт что делает и осведомлён о последних нововведениях рантайма и языка, но такие ты хуй найдёшь просто написав в гугле что-то типа "C# unsafe", "C# span" и т.д.
Аноним 12/02/25 Срд 12:29:00 3387366 875
>>3386847

И ещё по поводу доков.
Вот сколько людей в курсе что с C# 11 можно объявлять указатели на managed типы? И ты эту инфу просто так не найдёшь.
"What's new in C# 11" в офф документации - нихуя.
В статьях про unsafe в офф документации - нихуя.
В статьях в .NET блоге - тоже нихуя.
А вот в репе языка и в репе Roslyn, если очень присмотреться то ссылка с текстом "ref fields" ведёт на proposal "Low Level Struct Improvements", который без оглавления, и там в середине текста есть маленький рандомный раздел "Changes in unsafe context" с двумя короткими предложениями (которые можно случайно проглядеть в таком большом документе) по этому нововведению. Ведь очевидное место поиска, да?
https://github.com/dotnet/csharplang/blob/main/proposals/csharp-11.0/low-level-struct-improvements.md#changes-in-unsafe-context

Пришел читать про ref fields, а тут в середине про какие-то указатели.
Аноним 12/02/25 Срд 12:44:26 3387380 876
изображение.png 66Кб, 777x842
777x842
>>3387366
не буду спорить. Это нужно следить за разным типа
https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-9/
там упор именно на перфоманс поэтому больше наваливают про спаны. Например, кто знает про AlternateLookup у словаря?

ну и за подобным https://www.bytehide.com/blog/everything-new-in-net-9-the-ultimate-developers-guide
где по верхам остальное.

но конечно это не научит применять Unsafe
поэтому для этого я смотрю проект SpanJson, который упоролся именно в Span/Unsafe (и поэтому рвет по перфомансу решение от мелких, но более low-level), хожу читаю его код и такой "гм, а что это он тут делает, что за магия" и начинаю разбираться
Аноним 12/02/25 Срд 13:38:02 3387421 877
>>3387317
У них написано, что в саму программу нужно JSON передать через http. И результат работы программы тоже через JSON проверять.
>>3387326
> стандартный asp.net сервис
WebApi ?
Короче, вот
https://itpdevelopment.ru/testjobbackend.html
Аноним 12/02/25 Срд 14:32:20 3387450 878
>>3387215
Судя по описанию - банальный враппер над хттпклиентом
оно же RestClient, оно же - то что генерят всякие Retrofit(для жавы) или Refit для шарпа, оно же - typed http client как его понимает мелкософт в их HttpClientFactory

и апи это собственно сам такой класс, однако....

>>3387421
судя по этому
>У них написано, что в саму программу нужно JSON передать через http. И результат работы программы тоже через JSON проверять.
таки да нужен вебапи, который будет получать запрос и дергать что то внешнее через вышеописанные typed http client и возвращать. Ну и у себя в бд хранить.
в общем очень простая штука

только вот уже это не библиотека как бы, а приложение

поэтому нипанятна
Аноним 12/02/25 Срд 17:04:16 3387680 879
>>3387215
Ты пробовал на медиатр переписать?
Аноним 12/02/25 Срд 18:05:49 3387807 880
>>3387680
Капец у тебя психологическая травма от медиатра
Аноним 12/02/25 Срд 20:35:37 3387944 881
>>3387380
>ну и за подобным https://www.bytehide.com/blog/everything-new-in-net-9-the-ultimate-developers-guide
Я промолчу про рекламу, но я рандомно глянул и:
>It is now possible to declare extension methods on readonly struct without losing the benefits of immutability.
???
>C# 13 allows defining constants that were previously not possible, such as DateTime values.
???

Ты разраб ByteHide?
Слово из спам листа?
Аноним 12/02/25 Срд 20:47:56 3387956 882
>>3387944
нет. просто дал пример первый попавшийся. Я не храню в закладках прочитанное.

Просто если читать разные what's new, а не только офф доку (в которой только основное), то можно много разного найти и узнать.
Аноним 12/02/25 Срд 22:09:15 3388018 883
>>3387807
Да, есть такое. Ненавижу это говно. Дохуя лет проебал на DDD CQRS (медиатор+говнокод+до 6 слоёв автомаппинга), теперь нашёл ссаный угол, где можно излить душу.

Не вини меня, иди на хуй
Аноним 13/02/25 Чтв 04:42:34 3388096 884
Господа, проблема такая:
создаю с нуля два дефолтных winforms проекта
- первый под .net framework 4.8
- второй под .net 7.0
нихуя нигде ничего не правлю, т.е. проект просто с пустой дефолтной формой и все. Компилирую оба проекта в release и наблюдаю следующее
1. экзешник под .net framework весит 6.5кб и стартует мгновенно
2. экзешник под .net 7.0 весит 150кб(!!) и стартует на порядок медленнее. Плюс рядом с экзешником test.exe еще лежит какая-то либа test.dll, хотя у меня чисто винформс проект и никакие либы я не добавлял.

Почему так? В плане почему медленнее старт, почему exe весит 150кб а не 6.5кб и че за либа компилится в дополнение к ехе.
Аноним 13/02/25 Чтв 05:36:43 3388105 885
>>3388096
>че за либа компилится в дополнение к ехе
эта либа и является основной. это ехе генерится как дополнение к ней.
потому что дотнет 7 он же коре является кросс и само приложение лежит в длл и рассчитано на запуск как

dotnet appname.dll

вот можешь даже винформс проект так запустить.

а для винды компилятор услужливо генерит ехешник с иконками и хз каким еще добром.
Аноним 13/02/25 Чтв 06:22:15 3388110 886
>>3388105
Пиздец блядь, т.е. распространяя свой софт я должен одновременно в комплекте с ним распространять еще какой-то ёбаный левый экзешник с неясным функционалом, у которого даже сорцев в паблике "почему-то" нет, хотя .net вроде как уже опенсорсный. Охуенно.
Аноним 13/02/25 Чтв 10:36:41 3388198 887
>>3388110
>т.е. распространяя свой софт
А ты у нас ниибаца издатель?
Аноним 13/02/25 Чтв 15:24:02 3388445 888
>>3388110
Это да. Хз почему он разного размера
У меня и полметра есть
Аноним 13/02/25 Чтв 17:37:05 3388529 889
>>3388110
Это ты ещё не думал о пользователях, у которых не установлен рантайм дотнета. Иначе бы и не заметил этот несчастный экзешник на фоне сотни дллек.
Аноним 13/02/25 Чтв 17:47:07 3388534 890
>>3388529
>о пользователях, у которых не установлен рантайм дотнета.
Похуй на них, они не являются нашей целевой аудиторией.
Аноним 13/02/25 Чтв 18:40:54 3388575 891
>>3388529
>у которых не установлен рантайм дотнета
подлая штука кстати. ставились разные рантаймы студией, потом студия обновлялась 17-19-22, а в итоге старые рантаймы и не удалить. Ни один способ не помог ибо "где дотнет ставили (студия определенной версии) - туда и идите".

пришлось внаглую удалять папки и чистить реестр руками.
Аноним 13/02/25 Чтв 19:35:27 3388627 892
>>3388575
>а в итоге старые рантаймы и не удалить
Ты что поехавший, нафига их удалять?
Аноним 13/02/25 Чтв 19:45:47 3388637 893
>>3388627
а нафига они мне нужны? Я давно все свои проекты перевел на дотнет 9
ну 8 ладно LTS
остальное нахер не нужно, тем более всякие 3.1
а место на диске кушает

у меня 100 гигов диск (теперь то сложно ресайзить) и контента на нем на все 1000000 триллионов сестилитеррабайт. Потому что всякие там жетбраинсы срут инсталлерами на диск с (а там 11 гигов папка инсталлерс, что просто ....тут нет цензурных слов... и ее нельзя удалить и переносить чревато) Потому что всякие кеши пакетов срут туда (ну ладно можно отключить), нюгет кеш туда же (и где тулза по его очистке от старых версий пакетов???)
всякие постманы, гитхабклиенты срут своим говном и сами говно по много сотен гигов. Нвидиа со своим говнософтом так вообще лютый северный зверёк.

меня спасают симлинки (но не всегда, ведь СРАНЫЙ ЖЕТБРАИНС С ИХ ЖОПОРУКИМ СОФТОМ), но проблема ведь не в наличие места, а в ГОВНЕ.
Аноним 13/02/25 Чтв 19:57:50 3388648 894
>>3388637
>у меня 100 гигов диск (теперь то сложно ресайзить)
Сейчас нормальный M2 SSD на 1Тб, можно за 6...7К взять.
Чего тут сложного?

>студия обновлялась 17-19-22
С 17-го то года, можно с обедов по 10 рублей откладывая на несколько таких накопить.
Аноним 13/02/25 Чтв 20:03:53 3388658 895
>>3388648
>Чего тут сложного?
у меня ссд суммарно на 2.5 тб. причем ссд нормальные, а не китайский дешман. Я, как и все разработчики на шарпе, с одной зарплаты могу весь комп поменять, но зачем...

Просто заниматься расширением ЧРЕВАТО (в далеком году с помощью акронис партитион пытался расширить диск ц и оно ушло на 12 часов и в итоге просто запороло мне полностью хард так что доверия у меня этому нет)
и руки не доходят.

но я повторюсь - ГОВНО засрет все доступное пространство хоть всю вселенную, да и соседнюю.
Аноним 13/02/25 Чтв 20:20:18 3388674 896
>>3388648
вот наглядный пример. хочу в сервисе делать уведомление в винде 10. Ну чтобы никакое WPF приложение не висело. Так хрен там - нужно UWP, а чтобы его писать нужно отдать еще 8 гигов чтобы просто получить возможность сделать уведомление в винду
потому что какой то ИМБЕЦИЛ решил что это может делать лишь UWP приложение и нельзя "просто подключить какой то там пакет с нугета".
Аноним 13/02/25 Чтв 22:44:11 3388764 897
Приведете мне пример синтаксического сахарка.
Аноним 13/02/25 Чтв 23:09:16 3388778 898
Аноним 13/02/25 Чтв 23:18:44 3388789 899
>>3388764
Он же на каждом углу, как и в любом высокоуровневом языке кроме жабы. Автопроперти, инициализаторы, вывод типов, лямбды, юзинг по IDisposable, форыч, LINQ, экстеншн методы, асинк.
Аноним 14/02/25 Птн 00:40:53 3388815 900
>>3388789
Конкретный пример, пожалуйста.
Аноним 14/02/25 Птн 01:32:25 3388826 901
Аноним 14/02/25 Птн 07:57:47 3388874 902
Аноним 14/02/25 Птн 11:29:05 3388956 903
Аноним 14/02/25 Птн 19:15:16 3389314 904
>>3388956
Нет, using это не сахар
Аноним 14/02/25 Птн 20:16:51 3389352 905
В чем смысл форса aot, если по итогу он уступает в производительности jit?
Аноним 14/02/25 Птн 20:27:26 3389358 906
>>3389352
AOT-му коду не нужен прогрев (сбор статы и компиляция горячих методов с большим уровнем оптимизации), приложение сразу со старта быстро работает. А значит его можно для облачных функций в том же Azure нормально использовать, т.к. выгрузить все приложение из памяти к херам, а потом по первому пришедшему запросу его снова запустить это нормальная практика. А если ему каждый раз прогреваться нужно, то время ответа таких функций будет страдать + ценное процессорное время впустую тратится. Вот M$ его и форсит. И все допилы под AOT того же ASP.Net Core прям видно что на майковское облако нацелены.
Ну и для десктопных приложений это норм тема, т.к. время из запуска уменьшает.
Аноним 14/02/25 Птн 20:45:12 3389370 907
>>3389358
>т.к. время из запуска уменьшает.
только работает разве что для консольных приложений.
Аноним 14/02/25 Птн 22:16:36 3389416 908
>>3389314
>using
Сахар, в самом чистейшем его виде.
Аноним 14/02/25 Птн 22:20:21 3389418 909
>>3389358
>допилы под AOT того же ASP.Net Core
Только смысла в них минимум, т.к. в асп-сервисе по любому при старте будет куча всяких инициализаций, на фоне которых разница между AOT и JIT будет копеечной.
Аноним 14/02/25 Птн 22:46:23 3389430 910
Аноним 14/02/25 Птн 22:57:45 3389435 911
>>3389352
Дохуя, на самом деле.

1. Без АОТ невозможен Xamarin-IOS.
2. Ускоренный запуск Xamarin-Android.
2. Лямбда-фунции в AWS дешевле, там оплата буквально по миллисекундам
3. Особо оптимизированная ебала наподобие последних оптимизаций System.Text.Json, которые наполовину из кодогенераторов состоят. Вот представь, что у 200 тысяч структур, которые ты в дженерики завернул и у тебя джит конпелятор на каждый новый вызов их компилирует. А теперь представь, что АОТ может эту хуйню как ускорить, так и наоборот замедлить.

ОПЦИЯ, короче, которая тебе нахуй не нужна, но потом внезапно так сильно нужна, а ты долбоёб, на пейфоне напрограммировал и у тебя всё тормозит как у шлюхи
Аноним 14/02/25 Птн 22:59:23 3389436 912
>>3389418
>на фоне которых разница между AOT и JIT будет копеечной.

Для особо упоротых случаев же, где либо на кресты переписывай, либо ебись конём
Аноним 14/02/25 Птн 23:05:01 3389438 913
>>3389418
Ну, если у тебя прям микро-микрописечный сервис с тремя ендаоинтами на minimal api, то может и будет иметь смысл.
С другой стороны, если он такой микро, то там и джитом все нормально жить и стартовать будет.
В общем, актуально только в облаке, где тарификация по миллисекундам процессорного времени.
Аноним 14/02/25 Птн 23:16:01 3389442 914
20.webp 100Кб, 1280x854
1280x854
Аноны, кто-нибудь делал "первый запуск" веб-хуйни?
Я спросил гопотоу и дипсик, они какую-то залупу с тем чтобы мидлвар ебашить и проверять конфиги в нем с редиректом хуйнули. Даже я понимаю какая хуйня.
В общем. Суть. Меня заебало, что каждый раз, блядь, кто-то не может инструкцию, которую, блядь, я написал, сук, кладу прямо рядом с дистрибутивом и все это вот - не могут ебучую строку подключения и сертификаты положить куда надо.
Хочу чтобы приложуха такая: бля, чет недонастроили, го настраивать.

Мое видение было такое изначально - я просто в main проверяю, не вижу конфиги или они коррапчены - хуяк, делаем свой веб-ап второй, на рандомном порте запускаем, запускаем бравзер и просим настроить. Все ок - завершаем приложуху и по основному сценарию - сконфигурировали, хуе-мое настроили и погнали.
Но вроде как выяснил что заеб в том что ConfigurationManager - в единственном экземпляре и вообще ну тип не хорошо.
Второе решение было - ну ок, будем так же - но типа процесс отдельный запускать, ждать пока он завершится, дальше - если теперь-то конфиг правильный - запускаемся, иначе - пишем, ну сорян, конфигурируй сначала.

Но вообще чет мне кажется что я куда-то не туда копаю. Ну не может быть такого что только меня заебало каждый раз писать разворачивателю, где ж там в appsettings.json - прописать эту самую строку подключения. Сто пудов есть что-то что кто-то умный сделал уже.

В общем. Кто знает - помогите.
Аноним 14/02/25 Птн 23:25:03 3389445 915
>>3389442
В логи пиши просто "Пидар, конфиги проверь" и падай. Нахуя чет выдумывать. Если кто-то твой вебсервис запускает, он по любому либо логи должен читать, либо у него мониторинг есть в котором он это увидит.
Аноним 14/02/25 Птн 23:34:34 3389448 916
>>3389445
Ну вот челы из не буду писать откуда, а то клиентов обзывать нехорошо - не читают, пишут на почту поддержке - те мне.
Да много кто не читает как я понял. Я бы не думал об этом вообще, если бы постоянно не присылали: КАК СЕРТИФИКАТЫ ПОДКИНУТЬ? КАК К БД УКАЗАТЬ НАСТРОЙКИ??
Это при том что в той ебаной инструкции буквально как раз эти кейсы описаны прям по шагам, просто скопируй, поменяй на свое если надо. Ну да ладно.

Но вот немного подумал-подумал и решил, что вместо веб-сервера можно авалонию хуйнуть, лол. Все так же, но мы типа при старте не веб-сервер а авалониевскую хурму запускаем, причем в двух видах - одну как десктопное приложение, вторую как веб-хуитку в случае работы на серверах, после настройки - таки основной сервер. Максимально простой как мне кажется способ, при этом - ну уже ну невозможно будет обосраться.
Аноним 14/02/25 Птн 23:40:55 3389449 917
>>3389430
Он буквальнов в try {} finally { dispose } разворачивается, куда уж сахаристее.
Аноним 14/02/25 Птн 23:46:07 3389450 918
>>3389448
>ну уже ну невозможно будет обосраться.
Ага. А у пользователя на другом порту уже что-то висит, или порт вообще заблочен.
Плюс сама ситуация когда твой сервис вместо основного запуска, делает что-то совершенно другое, вызовет еще больше вопросов и тебе будут предъявлять уже за это.
Аноним 15/02/25 Суб 05:57:59 3389514 919
Аноним 15/02/25 Суб 06:07:23 3389515 920
Зачем нужны перечисления если есть словарь?
Аноним 15/02/25 Суб 07:33:04 3389537 921
>>3389515
> Зачем нужны перечисления если есть словарь?
Словарь это синтаксический сахар над перечислением
Аноним 15/02/25 Суб 07:56:37 3389539 922
>>3389442
>Ну не может быть такого что только меня заебало каждый раз писать разворачивателю, где ж там в appsettings.json - прописать эту самую строку подключения.

Суть в том, что у тебя приложение может конфигурироваться с нескольких источников, и эти источники как бы накладываются друг на друга, которые накладываются друг на друга согласно приоритету.

Притом, у тебя могут быть как встроенные в код источники, так и внешние:
https://microservices.io/patterns/externalized-configuration.html

По классике делают так:
В самом начале идёт appsettings.json, Туда складываются базовые настройки, коротые вообще никогда не меняются

Чуть выше приоритетом идёт appsettings.ENVIRONMENT.json . Тут идут настройки согласно контуру (окружению), в котором запущено приложение. В принципе, если тебе похуй на безопасность, то можешь просто сложить все настройки отдельного контура в appsettings.Production.json . Как приложение поймёт, что оно продакшен - читай тут https://learn.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-9.0

Еще выше приоритетом стоит источник, который берёт настройки согласно переменным окружения, которые контейнер получил из кластера. Это обычно в конфигурации кубера настраивается

Ещё выше приоритетом стоят секреты (коннекшен-стринги, ключи апи), которые приходят из хранилища секретов, например Vault, они тоже приходят в приложение из переменных окружения, но немного другим способом

Если делать всё по правильному - то дохуя сложно получается. Но твоё решение с прерыванием процесса запуска для настройки - странное
Аноним 15/02/25 Суб 09:26:50 3389560 923
>>3389539
Я все это знаю, няша.

Типа ну срсли. Когда все поднимаем мы - нет никаких проблем. Но у нас клиенты такие, что им часто надо, чтобы на их мощностях поднималось, их админы/девопсы этим занимаются. Им просто передается инсталлятор(deb/rpm/msi)/контейнер. Передаются инструкции. Но хурма с тем что что-то они там донастроить не смогли происходит и прилетает постоянно - а как сертификаты, а как подключение к бд. А как то. А как это. Задалбывает вот серьезно.

Ну и опять - учитывая что у всяких Gitea, Gitlab есть таки этот самый "первый запуск", который позволяет поднять контйнер и просто ручками донастроить если не настроили - не то чтобы прям это что-то странное.
Аноним 15/02/25 Суб 09:52:49 3389570 924
>>3389560
Ваши проблемы. Мои проекты не требуют от пользователя ничего кроме указания где находится БД.
Аноним 15/02/25 Суб 10:39:53 3389586 925
>>3389560
>Им просто передается инсталлятор(deb/rpm/msi)/контейнер.

Нихуя себе. Ты отдаёшь 4 экземпляра собранного приложения без зависимостей в сторонний деплой и говоришь, что это "просто".

На мой взгляд, ты пытаешься сложное обозвать простым и проблемы спихнуть.

Вообще, вижу, что тебе надо просто на этапе инициализации приложения вбрасывать вменяемые исключения на каждую отсутствующую/неправильную настройку.

Вбрасывай так, чтобы даже индус или xoxoл разобраться мог: "При запуске приложения обнаружено, что у вас в настройках недостаточно корректно указан параметр ConnectionStrings__MainConnectionString, Укажите переменную окружения ConnectionStrings__MainConnectionString , которая указывает на рабочий инстанс вашей базы данных Postgresql в следующем формате: ФОРМАТ"
Аноним 15/02/25 Суб 15:42:42 3389750 926
>>3389586
Ещё лучше чтобы он давал шаблон настроек с комментарием что где и как вписать.
Аноним 15/02/25 Суб 17:11:58 3389813 927
изображение.png 17Кб, 312x237
312x237
Аноним 15/02/25 Суб 18:00:09 3389833 928
>>3389537
Совсем дурак? Словарь можно менять в динамике, перечисления же - константа.
Аноним 15/02/25 Суб 18:10:29 3389846 929
>>3389833
ты бы тест в военкомате бы завалил с таким ответом. Сразу бы получил категорию Д
Аноним 15/02/25 Суб 18:21:22 3389860 930
{4CBBBAA6-531D-[...].png 135Кб, 930x1219
930x1219
Объясните в чем минусы писать вот так?

Лежит не просто рядом с кодом а в нем.
За 5 лет того что выносил в файлики то что должно быть как бы спраочниками - ни разу не было такого что надо что-то добавить в перечисления без компиляции новой версии.
Опять же - пропадает говнокод который вызывается тем что ты либо каждый раз лезишь в БД проверить - а что это либо забиваешь и хардкодишь значения перечислений прямо в коде когда лень проверять нормально, тут ты их постоянно под рукой имеешь.
Ну и самое удобное - ты просто берешь и выносишь это в общую сборку и если нужно в нескольких сервисах - они все эту ДЛЛ подключают и радуются.

В чем я не прав?
Аноним 15/02/25 Суб 18:31:25 3389869 931
>>3389833
>Совсем дурак? Словарь можно менять в динамике, перечисления же - константа.

Ил код посмотри
Аноним 15/02/25 Суб 18:36:02 3389872 932
>>3389860
>В чем я не прав?

Все коллекции пустые, тебе очень повезло
Аноним 15/02/25 Суб 18:41:57 3389876 933
>>3389872
Ну. Мне лень накидывать было.

Суть-то не в коллекциях, а в том чтобы не выносить из кода всякие перечисления, которые кладутся в БД. Типа: тип скидки. Купон, Промокод, Акция. Эти штуки жестко закодированы в бизнес-логику все равно и типа не должны меняться на ходу, обычно добавление такой шутки в любом случае повлечет за собой пересборку приложения.
Но если сами эти данные лежат где-то далеко от кода, в CSV/SQL-скрипте/XML, прости господи, то ты будешь вынужден далеко от кода это править, и накосячить с какой-нибудь запятой - проще. Риск того что ты не выдержешь и напишешь в коде вот так: if(Disconunt.Type == "Promo") - возрастает. Вся херну. Потом что-то поменять надо будет - и ты ищи-свищи.
Аноним 15/02/25 Суб 19:12:15 3389896 934
>>3389876
Нахуя ты оправдываешься? В твоём случае работает - могу только порадоваться, позавидовать и пожелать удачи
Аноним 15/02/25 Суб 20:11:39 3389924 935
>>3389860
>В чем я не прав?

>забиваешь и хардкодишь значения перечислений прямо в коде когда лень проверять нормально
Вот в этом.

>>3389876
>ты не выдержешь и напишешь в коде вот так: if(Disconunt.Type == "Promo")
Ну так не делай так.

Ну и как бы вынос справочников за код, подразумевает вынос связывания их с кодом так же наружу (в конфиги или куда-либо еще). Грубо говоря если у тебя добавляется какая-то новая категория, то в код ты просто добавляешь её обработчик как есть, а вот связывание его с категорией (условие вызова) уже должно лежать за кодом (например в конфиге) и вызываться каким-нибудь общим провайдером.
Аноним 16/02/25 Вск 00:27:32 3390006 936
доступ к полю.jpg 32Кб, 578x311
578x311
Я даже не изучаю его, но сделатьб надо!
Есть три файла:
main.cs (почти пустой)
fw.cs (class fw помещает файл в public string "contfile" все поля-public)
find.cs (class find в нём метод FindText())
namespace один на всех

Находясь в методе FindText(), я могу создать объект класса "fw", но он не может взять содержимое поля "contfile".
Через МАЙН могу, но нахер мне ООП если как в Си пинать туда-сюда указатели-ссылки, блять!
Думаю что нехватает аналога #include но нигде не нашел ответа. Везде пишут что надо using(namespace) но он один на все файлы.
И самое смИщное, эта ёбаная VS2019 задолбала сообщениями "ваша переменная не используется", а то, что я вышел за пределы массива(string) при поиске подстроки, она нихера не написала. сука.
Классы должны быть каждый в своём файле,и уж не в одной куче в main.cs ну его нахуц.
Я не погрмозд. Вопросы.
Аноним 16/02/25 Вск 00:59:51 3390013 937
В плюсах была такая штука, не помню уже синтаксис, суть в том что при выходе из функции переменная не уничтожается, а сохраняется и при следующем заходе она имеет то состояние которое было во время выхода из функции.
Как такое в этих ваших шарпах делается?
Аноним 16/02/25 Вск 01:38:22 3390016 938
>>3382909
>>3382134
Каким же нужно быть ебланом чтобы переменным давать имена вида nameName.
Аноним 16/02/25 Вск 03:47:06 3390037 939
>>3390013
Эта штука называется static-переменные. Ничего хорошего в ней нет, сразу нахуй идут и мультитрединг, и тестируемость.
Создавай поле класса и используй его в методах сколько хочешь.
Аноним 16/02/25 Вск 09:07:24 3390069 940
>>3390006
>Вопросы.

Внимательно прочитал твоё сообщение. Могу заключить следующее:

1. Ты не читаешь документацию
2. У тебя кривые руки
3. Ты недостаточно понятно изъясняешься

Таким образом, могу заключить, что ты собрал БИНГО. Тебе нельзя заниматься программированием, у тебя ничего не будет получаться, и это ничем хорошим не закончится.
Аноним 16/02/25 Вск 09:23:39 3390074 941
{FD402E8F-18B2-[...].png 108Кб, 1195x896
1195x896
{7965859D-A4AD-[...].png 162Кб, 1083x1209
1083x1209
{FDA3827A-B44A-[...].png 136Кб, 1111x1142
1111x1142
Блин. Ну я чет реально не понимаю как блин десктоп-то проектировать.

Вот начал чтобы разобраться пытаться сделать как вижу.
Вышло примерно вот как на прикриплейд. Исходя из охуенной мысли что я зачем-то хочу DI.
Но пока не нравитя то что я роуты явно создаю, думаю добавлю в дальнейшем типа возможность аттрибутом вью-модельке показать какой контрол нужен.

На работе дядька делает не так. Он берет и руками создает инстансы контроллов и вью-моделей, во вью-модели кидает контролл и там его теребит чтобы нужное поведение добиться. Меня это триггерит потому что в моей глупой башке - то что визуальное - должно внутри самого контролла и происходить, а то что типа описывает состояние - во вью-модели. Ну еще это триггерит, потому что он чтобы это все можно было прокидывать дофига статических классов наделал чтобы из любого места куда ему там надо достучаться.

Лазил на гитхаб смотреть как люди-то делают. И вот ну все по разному. Кто-то берет и хуярит все в кодбихаинд. Кто-то делает все вью-модельки синглтонами классическими и через вью-модельки состояния, визуал через контроллы. Кто-то делает что вью-моделей никаких нет...

Я короче не понимаю. Уже спрашивал-то. Но все равно непонятно как-то, как делать десктоп чтобы говной не воняло.
Аноним 16/02/25 Вск 09:56:38 3390082 942
>>3390074
>Я короче не понимаю. Уже спрашивал-то. Но все равно непонятно как-то, как делать десктоп чтобы говной не воняло.

Делай MVVM.

Общие сервисы просто в конструктор инжекти.
Сервисы, которые нужно диспозить, создавай через фабрику, и уничтожай в Dispose родителя
Фабрики руками не пиши, используй какой-нибудь nuget типо FactoryGenerator.Microsoft.Extensions.DependencyInjection
Аноним 16/02/25 Вск 10:02:53 3390086 943
>>3390069
Профи из тебя как из говна котлета.
1 Ты не указал на ошибку
2 От тебя только кукарек, больше ничего.
3 Прекращай дрочить на своё отражение, нарцисс.
4 Читаешь ты жопой - я написал, что не являюсь прогромоздом, и язык C# не знаю.

return смойся в унитаз, не загаживай трэд.
Аноним 16/02/25 Вск 11:04:18 3390110 944
>>3390086
Что тебя так задело?
Аноним 16/02/25 Вск 11:47:55 3390134 945
>>3390074
> Но пока не нравитя то что я роуты явно создаю, думаю добавлю в дальнейшем типа возможность аттрибутом вью-модельке показать какой контрол нужен.
Хуйня идея. Вью модельки должны находится в отдельном проекте, который ничего не знает о представлении. Для роутов лучше делать так - берешь имя вью модельки к примеру UserPageViewModel, и в проекте с представлениями ищешь класс с именем UserPage. Я делаю именно так. Максимально ленивый и в то же время хорошо работающий способ. Роуты конечно можно вручную добавлять для экзотических случаев.
>>3390082
> Сервисы, которые нужно диспозить, создавай через фабрику, и уничтожай в Dispose родителя
Хуита, за диспоз должен отвечать IServiceProvider. Условно, тебе нужно навигироваться на страницу, ты в модели представления базовой страницы создаешь Scope, через этот scope получаешь нужную вью модельку, и когда уходишь со страницы просто диспозишь скоп.
Аноним 16/02/25 Вск 11:53:39 3390140 946
>>3390074
И да, роутер не должен никакие зависимости резолвить и вью модели получать. За все это пусть отвечает модель представления в рамках которой осуществлчется навигация. Она создает вью модель, передает ее как аргумент роутеру, и тот уже либо при навигации устанавливает ее в качестве datacontext, либо передает как аргумент в событие onnavigated, если ты пишешь например на uwp/winui/uno, где вместо datacontext в коде создается свойство модели представления и к ней биндятся через x:bind
Аноним 16/02/25 Вск 12:07:44 3390153 947
классхуясс.png 45Кб, 984x896
984x896
>>3390110
Ок. Переписал, сделал скриншот.

Какого хера, созданный объект класса (arField) не может взять содержимое поля "filecontent", если и класс и поле "public"?

Создав этот же объект в майне (файл Programm.cs) всё работает, но майн я засерать не хочу. Да и получится тоже самое как в С++ без участия классов (передача кучи параметров в функции).

Если я создам метод "Get" в классе "Archive", то скорее всего смогу получить содержимое поля "filecontent", но поять же почему не работает самый простой вариант?

Искал в инете но аналогов моему не нашел.
Блятьб, это же, сука, самое простое и примитивное решение, какое сразу приходит в голову, хули нет примеров в инете? бесит.

И ещё. Этот код отаботает раз, и я про него забуду на годы, а может навсегда. Ранее мне хватало знаний, что бы без классов решать задачи на С++, но надо будет отправлять запос на Яндекс переводчик (готовый код уже нашел), вот и пришлось писать на шарпе.
Аноним 16/02/25 Вск 13:01:59 3390188 948
>>3390074
>Лазил на гитхаб смотреть как люди-то делают. И вот ну все по разному. Кто-то берет и хуярит все в кодбихаинд. Кто-то делает все вью-модельки синглтонами классическими и через вью-модельки состояния, визуал через контроллы. Кто-то делает что вью-моделей никаких нет...

Ну так каждому свое. Делать "по красоте" слишком напряжно и много костылей нужно. Такое делать если тесты нужны. Но если нет...я тоже как то делал, а потом победил прагматизм.
Вот у меня в итоге ServiceProvider доступен во вьюмоделях (что адски неправильно), мне не нужны фабрики вьюмоделей, а также я везде по вьюмоделям таскаю Context (вот как в андроидах) - чем сразу решаю вопрос принадлежности к окну (у меня классический мультиоконный подход, а не эти ваши смузиебские подобия телеграма. И я могу спокойно показать диалоговое окно, а не еб...я с разными либами и их КОСТЫЛЯМИ, где только ПОТОМ в рантайме узнаешь, вернее НЕ узнаешь, что забыл навесить аттрибут и потому окна с ошибкой нет, а WPF МОЛЧА поглотило исключение.) и с лайфтаймами (а с ним ссылки строгие, никаких weak, которые так любит WPF), никакого роутера в принципе нет, подход ViewModel-First,
Аноним 16/02/25 Вск 13:35:28 3390205 949
{E050E770-9365-[...].png 4Кб, 274x113
274x113
>>3390134
Про первую часть сообщения - не согласен.
Ну, т.е. я понимаю аргументы, которые приводятся обычно, но оно разбивается о реальность, в которой даже когда люди по класическом MVVM делают выходит, что каждому вью - идет своя вью-модель, а если что и переиспользуется - оно в сервисах. Я потому и решил, что нехуй выебываться и сделал как на прикриплейд.

Про скоупы - согласен, думаю так и сделаю.

>>3390140
>И да, роутер не должен никакие зависимости резолвить и вью модели получать. За все это пусть отвечает модель представления в рамках которой осуществлчется навигация.
Почему?
Я просто достаточно много писал на JS и конкретно Vue - там роутер сам компонент нужный достает и это было пиздец удобно.
Я хочу именно к такому в конечном итоге прийти. Чтобы на основном окне - просто некий RouterView был, а далее по компонентам вниз можем вложенные роутеры иметь которые другие представления будут возвращать.
Типа как это было в Vue:

<app-layout>

<app-header>

<router-link to="/">Home</router-link>
<router-link to="/About">About</router-link>

</app-header/

<router-view/>

<app-footer/>

</app-layout>

И лично мне это очень даже нравилось.
Аноним 16/02/25 Вск 13:39:18 3390206 950
>>3390188
>вьюмоделям таскаю Context (вот как в андроидах)
Ну и попутно могу организовать общую вьюмодель для какого то графа вьюмоделей и спихнуть туда все команды и при этом не мучиться всякими RealiveSource AncestorLevel

Ну и feature-based подход организации папок, ибо делить на папки View, ViewModels это люто неудобно.
Аноним 16/02/25 Вск 13:45:04 3390210 951
>>3390205
> Ну, т.е. я понимаю аргументы, которые приводятся обычно, но оно разбивается о реальность, в которой даже когда люди по класическом MVVM делают выходит, что каждому вью - идет своя вью-модель, а если что и переиспользуется - оно в сервисах. Я потому и решил, что нехуй выебываться и сделал как на прикриплейд.
Ну вот ты судя по пику пишешь на авалонии, и там вполне обычна ситуация, когда для разных платформ используется разный UI. Не говоря уже о том, что бывают случаи, когда нужно перейти на другой фреймворк, при чем плавно. И в случае если все вью модели в отдельном проекте достаточно просто создать новый проект с нужным фреймворкам и понемногу переносить вьюшки. А если все в одном проекте, то нужно будет копировать всю логику, потом обновлять ее в двух мкстах и тд. К тому же возникает соблазн работать с представлением непосредственно из вью модели.
> Почему?
Потому что если тебе перед навигацией нужно будет как-то подготовить (модель передать, состояния установить и тд) модель представления ты это сделать не сможешь. И вообще в сервисах должен быть принцип единой ответственности.
Аноним 16/02/25 Вск 13:46:11 3390212 952
>>3390206
> Ну и feature-based подход организации папок, ибо делить на папки View, ViewModels это люто неудобно.
Нет, это как раз люто удобно, ибо не приходится гадать, к какой фиче разраб решил отнести свои классы
Аноним 16/02/25 Вск 13:48:05 3390213 953
>>3390212
>ибо не приходится гадать, к какой фиче разраб решил отнести свои классы
Шта?
Аноним 16/02/25 Вск 13:50:00 3390218 954
>>3390210
Хм. Ну, логично. Засчитываю как аргумент. Не привык просто еще к этой всей хурме. Откровенно, пока разбираюсь - все время кажется - проще бы было взять электрон и как привык делать на ЖС.
Аноним 16/02/25 Вск 13:53:00 3390220 955
>>3390213
Ну вот ты видишь в верстке контрол UserView, где будешь его код искать со своим подходом? По классике он всегда будет лежать в папке Views/Controls, а у тебя?
Аноним 16/02/25 Вск 14:00:53 3390226 956
>>3390220
зависит от того, для кого он общий.

Если он общий для всего то UI/Controls/UserView.xaml ибо feature-based не отрицает наличия глобальных общих вещей.

если для фичи (внутри которой может быть много разных подфич), то
UI/Feature/UserView.xaml - ибо это такой же вью как и другие в этой фиче и вложенных (для которых он общий)
UI/Feature/Controls/UserView - если я хочу подчеркнуть что это контрол ака контрол (ну к которому не нужно ожидать вьюмодель). Хотя это подчеркивание лишнее.
UI/Feature/Common/User/UserView - а вот с этим вполне может идти свой вьюмодел и не только. Тут поэтому и выделено в папочку. Но опять же Common вполне себе лишнее.

А потому если там не супер мега убер фича, то будет просто UI/Feature/UserView.xaml
Аноним 16/02/25 Вск 15:09:20 3390262 957
>>3390153
>Какого хера
Такого, что ты творишь какую-то дичь.
Откуда у тебя GetArchive будет знать что ему брать, если ты не передаешь ему ссылку на уже созданный Archive? Ты вместо этого создаешь в нем совершенно новый экземпляр и пытаешься у него достать неинициализированное поле.
Аноним 16/02/25 Вск 15:48:08 3390298 958
>>3390153
Что значит не может, если он берет?

Тебе надо просто понять что такое инкапсуляция и что такое объекты.

Смотри.

Представь, что класс - это инструкция по тому что положить в коробку и как с тем что в коробке лежит работать.

Каждый раз когда ты делаешь new MyClass - компьютер смотрит в эту инструкцию и создает новую коробку, кладет в нее данные, и в соответствии с этой инструкцией - если его попросят что-то сделать - надо сделать это вот так вот.

Так вот. Ты в main - ты создал эту коробочку. Положил в нее данные.
В GetField - ты создал уже новую коробочку. Данные в нее нужные тебе не положил.

Получаешь то поведение что у тебя на скриншоте.

Если тебе надо чтобы GetField возвращал данные - конструктор GetFeild - должен принимать нужный тебе архив, который ты где-то там создашь, так ты всегда будешь иметь возможность получить данные которые в этой коробочке лежат.

Ну. Я старался максимально просто.

Теперь, учитывая что ты там что-то про C/C++ вспомнил.
Вот как ты бы в C работал с какой-нибудь бизнес-сущностью? Ты бы создал структуру, описал ее поля, далее ты бы сделал метод который берет эту структуру и что-то с ней делает.
Банальный пример:

struct Point2i{
int x,
int y
};

Тебе надо сложить значение x и y;

Point2i Sum_Point2i(Point2i a, Point2i b) {
return {a.x + b.x, a.y + b.y };
}

Ну так вот.
Теперь это же но в ООПшном стиле:

public class Point2i {

// поля, которые
public int x;
public int y;

public Point2i(int x = 0, int y = 0) => (this.x, this.y) = (x, y);

// наш метод для работы
public Point2i Sum(Point2i other) {
return new Point2i(x + other.x, y + other.y);
}

}
Аноним 16/02/25 Вск 15:55:09 3390303 959
>>3390134
>Хуита, за диспоз должен отвечать IServiceProvider.

По правилу Тараса Бульбы, кто объект создаёт, тот и отвечает за его уничтожение.

Если ты используешь скоупы, то за уничтожение объектов отвечает скоуп.

Если родительская вью-модель создаёт десяток дочерних, то уничтожением занимается именно родительская вью-модель.

>Условно, тебе нужно навигироваться на страницу

Если у тебя на одной странице одна кнопка, это сработает.
Аноним 16/02/25 Вск 16:09:31 3390317 960
>>3390303
>По правилу Тараса Бульбы, кто объект создаёт, тот и отвечает за его уничтожение.
Тарас Бульба сказал что "диспоз слишком примитивная абстракция пригодная только для простых вещей типа запроса асп.нет" и завещал юзать лайфтаймы, которые суть годнота по одной лишь концепции и не страдают болячками диспоз (а попутно расширяют его ибо не отказываются от него), не говоря уже о прочих плюшках.
Аноним 16/02/25 Вск 16:50:46 3390329 961
>>3390317
> и завещал юзать лайфтаймы, которые суть годнота по одной лишь концепции

Давай под каждую вью-модель по лайвтаймскоупу создавать. Вангую, что бы ебанёшься этим всем управлять уже на втором уровне вложенности

> и не страдают болячками диспоз

Какие болячки, это просто метод
Аноним 16/02/25 Вск 17:12:34 3390338 962
>>3390317
>диспоз слишком примитивная абстракция пригодная только для простых вещей типа запроса асп.нет

Нет, блядь, нужно чтобы объекты создавались ебанутыми конфигурациями автофака, и уничтожались там же, в недрах автофака.

Только потом оказывается, что только один человек понимал, как это всё работает, и он уволился.

На мой взгляд, лучше слишком примитивная абстракция, которую каждого дотнетчика спрашивают на собесе, чем ебля с лайфтаймскоупами, которые, к тому же, прибивают гвоздями приложение к конкретным специфичным фичам одного контейнера.

Для asp.net mvc это похуй, но для графических приложений контейнер это заменяемый компонент. Вот у нас ввиду тысяч регистраций начал тормозить запуск приложения в инициализации DI. Мы написали свой контейнер, и отгребли по полной от того, что нам пришлось реализовывать всю специфику старого контейнера, в том числе каждую деталь процесса уничтожения объектов.

Короче, я для себя решил тогда не ебать себе мозги впредь, и от контейнера расчитывать только на его минимальную функциональность (резолв синглтонов и резолв трансаентов)
Аноним 16/02/25 Вск 17:28:36 3390352 963
>>3390298
Спасибо анон!
Я то думал, открою поля, и с дефолтным конструктором всё заработает, поэтому и не писал его.
Наусложняли зачем то всё.
ВсёОК. Вопрос закрыт.
Аноним 16/02/25 Вск 17:44:27 3390362 964
>>3390329
Давай под каждую вью-модель по лайвтаймскоупу создавать
кричал на площади илья
а люди шли не глядя мимо
но каждый думал а давай )))

не плоди лайфтаймы без надобности (с) Тарас Бульба

>Какие болячки, это просто метод
именно так. всего лишь метод. который
- можно забыть вызвать
- должен трекать то, что в нем должно очищаться. а это еще тот гемор.
(например мы подписываемся отписываемся на события экземпляров - потом разберись кто чего отписать нужно в диспоз).
Не дай бог что то забыть
Ну события шарпа это вообще отдельная песня
- нужно терминировать зависимости. причем в обратном порядке. А зависимость может вообще в конструктор прилететь. Ее терминировать? А если нет, то кто? Тот, кто позвал диспоз? а он вообще не в курсе существования зависимости нашего компонента ибо сам нас в конструктор получил

Вот в WPF поняли что не могут никак гарантировать вызов диспоз и сделали weak события. Наглядный пример слабости этого паттерна.

>>3390338
>создавались ебанутыми конфигурациями автофака, и уничтожались там же, в недрах автофака.
>На мой взгляд, лучше слишком примитивная абстракция, которую каждого дотнетчика спрашивают на собесе, чем ебля с лайфтаймскоупами, которые, к тому же, прибивают гвоздями приложение к конкретным специфичным фичам одного контейнера.
ты просто не пробовал. или пробовал, но ЗАЧЕМ ТО гвоздями прибивал к DI

"Гвоздями" оно прибито только в асп.нет - и то НЕ ПРИБИТО, а просто контейнер используется как лайфтаймвладелец в силу очевидности "когда родили и когда убивать".

Пытаться использовать контейнер как лайфтаймер в десктопе...а зачем вы это делаете?
Время жизни компонента не связано никак с контейнером, да и владелец тоже "тот, кто знает о времени жизни" - а это кто угодно, а не контейнер.

>>3390329 >>3390338
Лайфтаймы это убер годнота по удобству.
- всё живет в каком то лайфтайме. Просто принимаем лайфтайм в конструктор и вешаем на него все наши "нужно убить вместе с нами". Не нужно думать о других.
- подписки тоже с лайфтаймами. автоматически отпишутся
- отлично живет с десктопными вещами, где все существует хрен пойми сколько времени.
- в силу похожести на 90% на CancellationToken (просто семантика другая же, а паттерны похожи как близнецы) то лайфтайм можно передать как токен.
(правда это примитивный лайфтайм. нормальный имеет кучу разных штук типа "запусти операцию и пока она работает не давай терминировать лайфтайм, то есть все компоненты ДОЛЖНЫ жить")
- забыть терминировать гораздо сложнее. Конечно забыть можно всегда, но вызывать явную терминацию лайфтайм нужно редко. Вот о нем и написал в "из неудобств".

Из неудобств - если нужно терминировать дочерние вьюмодели отдельно от родительского лайфтайма, то тут придется делать им отдельные лайфтаймы, чтобы потом отдельно их терминировать.
Из неудобств2.0 - в WPF сложно с ними, потому что WPF задумывался под weak. И контрол, выгружаясь, может просто не сказать что он выгружается. В общем то там решается не слишком сложно. А вот с виртуализацией сложнее - тут контрол НЕ выгружается, а просто меняет DataContext и поэтому нужно менять лайфайтм при смене DataContext
(правда это нужно только тогда если в КОНТРОЛЕ в code-behind нужно на что то подписываться и отписываться (в общем то та же проблема и без лайфтаймов, просто лайфтаймы ее тут не особо решают) - а иначе и проблемы нет)
Аноним 16/02/25 Вск 18:03:01 3390373 965
>>3390362
> Просто принимаем лайфтайм в конструктор и вешаем на него все наши "нужно убить вместе с нами"
вот это слишком туманно написал. Поясню шире

Мы получили лайфтайм в конструктор. И мы
- передаем его в порождаемые вьюмодели, чтобы они попали в тот же лайфтайм, что и мы. Умрем мы - умрут и они. Ни о чьих дочерних диспоз нам думать не нужно. Не нужно следить "кто диспозабле, а кто нет" и "сегодня он вроде нормальный, а завтра стал диспозабле, а нам не сказал, падла"
- подписываемся с найшим лайфтаймом. А значит оно автоматически отпишется. диспоз метод до сих пор не содержит ни строчки кода ибо не существует
- так же можем регистрировать себя в разных там списках с лайфтаймом. Если мы умрем, то будем оттуда автоматически вычищены (хотя лично я такое использовал ни разу ибо хз куда в какие списки пихать вьюмодели, но сама концепция)
- передаем наш лайфтайм как CancellationToken

В итоге у нас 0 строчек кода в методе диспоз. Нас не волнует насколько диспозабле то, что рождаем МЫ САМИ и их изменение. Не волнует порядок терминации (а он должен быть обратным). Ну и наличие коснутрукторов не позволяет нам забыть подумать о времени жизни того, кто требует в себя лайфтайм - то есть если у нас 5 этажей вложенности и на последней вложенности ВДРУГ появилась необходимость метода диспоз, то это будет жопа (которую даже если не забыл решить решать непонятно как).
А с лайфтаймами просто появится в конструкторе параметр и компилятор не даст это собрать пока не решишь проблему.
Аноним 16/02/25 Вск 18:35:37 3390398 966
>>3390362
> можно забыть вызвать

Ты пытаешься объяснить, что есть какой-то чудесный механизм, который управляемые ресурсы сам уничтожает волшебным способом, и сам от событий отписывается. И, главное, сам догадывается, когда это нужно делать.

Сдаётся мне, что ты лукавишь.

> ты просто не пробовал.

Да в том-то им дело, что пробовал. Разгребал восьмилетнюю кодовую базу с вложенными скоупами (это пиздец, если их писал не ты лично). Пробовал сами писать вложенные скоупы. Считаю, что это такая же хуйня как и автомаппер: по началу кажется, что проблемы решает, а на практике получается только хуже.

> В итоге у нас 0 строчек кода в методе диспоз.

Ну давай, попизди мне еще. Коммунизм там, социализм, лайвтаймскоупы все проблемы решают в 0 строчек
Аноним 16/02/25 Вск 18:51:42 3390413 967
>>3390398
>И, главное, сам догадывается, когда это нужно делать.
кто сказал что сам. Конечно же кто то вызывает. Как и с диспоз.

>Разгребал восьмилетнюю кодовую базу с вложенными скоупами
Сдается мне что ты путаешь скоупы от DI с лайфтаймами - это АБСОЛЮТНО РАЗНЫЕ вещи.

лайфтаймы они как браться похоже на CancellationTokenSource с его CancellationToken.
Но ты же почему то их юзаешь и брат жив. А мог бы просто Cancel/Stop каскадно вызывать )

>Ну давай, попизди мне еще. Коммунизм там, социализм, лайвтаймскоупы все проблемы решают в 0 строчек

Именно так. Ты же когда принимаешь CancellationToken и передаешь его дальше, то не сильно волнуешься "ой как бы мне вот эти методы что я вызываю отменять то" - ты просто вешаешь эту задачу на "вот вам токен, он означает КОНЕЦ ВСЕМУ и вы проверяйте или подписывайтесь на него, в общем, сами разберетесь, мое дело передать, как передали мне"
в итоге в твоем коде 0 строчек кода отмены дочерних операций - передал токен и пьешь пиво в бане, а оно работает.

CancellationTokenSource с его CancellationToken можно использовать как готовую либу.

Просто либы для управления лайфтайми все же более семантически заточены под именно это. И там не Cancel, а Terminate, и не Register(метод) (хотя и это есть), а банальное Register(Disposable), ну и терминация в обратном порядке, ну и состояний побольше, а так реально братья по они с CancellationToken
Аноним 16/02/25 Вск 19:49:25 3390460 968
>>3390413
Что ты несёшь? Ты ебанутый? У тебя хоть пример твоей потешной хуеты есть?
Аноним 16/02/25 Вск 20:02:08 3390465 969
>>3390460
могу дать ссылки на видео где о них рассказывается. но это ж время тратить смотреть.
вот чье решение юзаю я (дал тайминг сразу на проблемы диспоза, посмотри минут 10 и познаешь дао. он лучше меня поясняет)
https://www.youtube.com/watch?v=Sq_h5bVWJ0k&t=402s

А так давно еще в одном из этих тредах не поленился написал и выложил пример как с ними жить даже если фреймворк о них не знает. Но то давно было. Ничего не сохранилось.

Есть еще видео на ютубе где челы свою имплементацию lifetime впихивали в MVVM + autofaq и рассказывали как и что.
Это видео не смог сходу найти.
Аноним 16/02/25 Вск 20:34:49 3390483 970
>>3390465

Кек, очередной хер с NIH синдромом решил не разбираться и объявил диспозабл УСТАРЕВШИМ.

И ни разу, блядь такая, не сказал, что этот лайвтайм нужно по цепочке вызовов передавать и создавать количество лайвтаймов по количеству вложенных объектов. А еще дохуя терминологии: Дефинишен, Компонентный дескриптор, лайфтайм, источник, встраивание в IDisposable.

90% разрабов не будут разбираться и просто пальцем у виска покрутят.

Оставшиеся 10% мудаков будут заёбывать всех своими высосанными из пальца проблемами, пока ты им эту серебряную пулю не включишь.
Аноним 16/02/25 Вск 20:49:58 3390491 971
>>3390483
>решил не разбираться
похоже это ты решил не разбираться )

>объявил диспозабл УСТАРЕВШИМ
Ну таков уж Тарас Бульба. Он на порождении и убивстве собаку съел.

>лайвтайм нужно по цепочке вызовов передавать
Нет. лайфтайм принимается в конструктор и передается ровно на один вызов вглубь. Класс, в КОТОРЫЙ его передали имеет свой лайфтайм который и может использоваться внутри себя. Так что никакой передачи по уровням не будет. Всякие специальные вещи типа "своя реализация событий" могут иметь методы принимающие Lifetime (причем они никогда не будут иметь свой ибо это структурные вещи), и то не будут никуда передавать.
А уж обычный код никогда не принимает лайфтайм в свои методы.

>и создавать количество лайвтаймов по количеству вложенных объектов
ты принял CancellationToken в метод и вызываешь 10 методов внутри этого метода. Каждому ты создашь свой CancellationTokenSource?
нет? а почему? ответом на этот вопрос и будет аргументом на твое замечание

>А еще дохуя терминологии: Дефинишен, Компонентный дескриптор, лайфтайм, источник, встраивание в IDisposable
уровень джуна так то.

>90% разрабов не будут разбираться и просто пальцем у виска покрутят.
прямо как ты. решил не разбираться

>всех своими высосанными из пальца проблемами
тебе на видео пояснили проблемЫ паттерна диспозабле. Доходчиво пояснили.
Тебе в WPF пояснили проблему и ввели weak ссылки поэтому.
Поэтому в MVVM фреймворках испоьзуется weak мессенджер ибо нет гарантий отписки.
но ты продолжай верить в непогрешимость IDisposable

так и пиши "многабукав ниасилил".

А всем остальным, кто пишет под десктоп, настоятельно рекомендую посмотреть это видео и не слушать ниассиляторов.
Аноним 16/02/25 Вск 21:02:36 3390496 972
>>3390491
>Каждому ты создашь свой CancellationTokenSource?

Операция одна, а лайвтаймов много.

>тебе на видео пояснили проблемы

Высосали из пальца. Приукрасили. Всё как обычно.

Чел, я не против, что ты всякое мутное говно от джет брейнсов ешь. Но оно не решает никаких проблем
Аноним 16/02/25 Вск 21:26:58 3390500 973
>>3390496
>а лайвтаймов много.
с чего вдруг. Лайфтаймы рождаются по той же самое необходимости что и дочерние CancellationTokenSource - а именно "необходимость отдельно от базового отменить/терминировать дочерние ресурсы".

А это нужно не так уж часто. Тот же запрос в асп.нет кор может принимать в себя хоть 100 зависимостей, но у них один общий лайфтайм.

>Высосали из пальца
да да. конечно из пальца. соглашусь
- забыли вызвать
- вызвать дважды
настолько невозможно забыть вызвать диспоз и вызвать дважды, что
в стандартной доке
https://learn.microsoft.com/ru-ru/dotnet/standard/garbage-collection/implementing-dispose
пишется и про защиту от 2го вызова и про финализатор как защиту от "забыли"

- необходимость складировать диспозабле
очевидно нет никакой проблемы. мало нам хлама от _disposed и методов диспоз и финализатора, еще давайте добавим одну коллекцию. Ну а чего нет.
И в КАЖДОМ таком классе повторим. DRY для лохов

- нужно диспозить в обратном порядке
А чи не насрать? Ну будет исключение, ну WPF проглотит. А вообще проблемы не будет, ведь в MVVM нас просто никто не вызовет диспоз

- кто отвечает за диспоз
Очевидно кто породил тот и отвечает. А вообще кто угодно может - метод то открытый ). Нет никакой проблемы.
Аноним 16/02/25 Вск 21:35:21 3390504 974
>>3390496
забыл еще про ситуацию когда у тебя выполняется какой то код в классе
и в этот момент класс начинает диспозится (а он это может ибо кто то попросил, допустим закрыли окно) и ты такой диспозишь ресурсы, которые как раз нужны в этом выполняемом методе.
И ты такой...ну я добавлю CancellationTokenSource и сделаю ему Cancel первым в моем диспозе. Много методов? много CancellationTokenSource
(ах вот откуда они у тебя плодятся)
А то, что Cancel не останавливает операцию - да просто забудем и всё. Многопоточность это происки дьявола и разбираться в ней грех.
В крайнем случае будет исключение, но уже ж плевать же, ведь окно же закрылось. Ну лог засрем, так кто его читает. Да и вообще писать не будем.
Гладь и тишина.
Аноним 16/02/25 Вск 23:29:50 3390555 975
>>3390504
Нахуя ты мне это пишешь? Ты сектант? Каждый год придумывают мусорные фреймворки, если я о нём до тебя не слышал, это означает, что надо дать ему пару лет настояться.

Если этим мусором никто так и не начнет пользоваться, можно забыть про него как про недоразумение. Потому что проблемы не было
Аноним 16/02/25 Вск 23:44:09 3390566 976
>>3390555
>я о нём до тебя не слышал
и не услышишь. нет таких фреймворков. потому что все они основаны на WPF, в котором главенствует weak подход потому что диспоз паттерн говно.

ну не пользуйся. мне насрать.
Если тебе нравится ковыряться в говне - ну так я не запрещаю.
я уже прямо об этом сказал.
Зато другие поймут, ведь у них нет синдрома утенка и они готовы учиться лучшим подходам, чем существующие.

Я вот не юзаю события стандартные и мне не нужно изобретать решение для многопоточности.
Не юзаю диспоз и мне не нужно изобретать велосипеды для решения проблем (ранее список давал)

а ты можешь гнить в своем болоте, разрешаю.
Аноним 17/02/25 Пнд 00:56:13 3390590 977
Вот нашел то видео
https://www.youtube.com/watch?v=ZzmK7K2ZIxI

там они впихивали лайфтаймы (своя реализация, без наворотов как у жетбраинс) в автофак с вьюмоделями.
не знаю просто это сложно. Нет никакой сложности использовать лайфтаймы в любом MVVM фреймворке, благо это не супермагическая вещь, а банальный аналог CancellationTokenSource просто с другой семантикой.

Добавляешь в фабрики вьюмоделей параметр Lifetime, заменяешь события на кастомную реализацию с lifetime, DialogService свой (а он всегда свой) тоже подпилить чтобы связать окно и рутовую вьюмодель (и то если нужно). Мессенджер заменить на стронг версию. Можно сделать метод CreateScope с лайфтаймом (ни разу не пригодился, но легко)
ну и один метод расширение для FrameworkElement

и всего делов.

Я без проблем юзал их с CommunityToolkit.
Там больше проблем с банальным MessageBox, а не с лайфтаймами.

Ну а утята пусть продолжают юзать диспозабле и писать гору костылей решая ту же задачу просто криво.
Аноним 17/02/25 Пнд 01:15:37 3390591 978
Говорят List<T> внутри себя содержит массив. Ну и зачем нужна такая шиза? Не осилили сделать связанным списком объектов?
Аноним 17/02/25 Пнд 01:47:25 3390597 979
>>3390591
> Говорят
Бабка в автобусе тоже много чего говорит. Проверить сам не можешь?
> Не осилили
Осиль в связном списке доступ к элементам за O(1), тогда и возвращайся.

С языком ты точно ошибся, тебе сюда: >>3375375 (OP)
Аноним 17/02/25 Пнд 03:02:50 3390605 980
Аноним 17/02/25 Пнд 03:42:19 3390608 981
>>3390605
доступ к любому элементу за один шаг.
ох уж эти современные мидлы
Аноним 17/02/25 Пнд 06:19:07 3390623 982
>>3390608
Таки прям и за один?
Аноним 17/02/25 Пнд 06:55:01 3390634 983
>>3390623
Долбоёбам - в питон
Аноним 17/02/25 Пнд 07:49:55 3390643 984
>>3390590
>Нет никакой сложности использовать лайфтаймы в любом MVVM фреймворке, благо это не супермагическая вещь, а банальный аналог CancellationTokenSource просто с другой семантикой.

Я вот уверен, что в любом MVVM фреймворке разработчики обязаны изпользовать MediatR. Потому что он решает все проблемы самого MVVM, в том числе и проблемы уничтожения ресурсов.

Я же не навязываю его тебе? Просто, если мы будем работать вместе, я включу его в проект и объявлю, что по всем законам программирования, в конструктор не должно приходить более трёх зависимостей, одна из которых медиатр, а другая - маппер.
Аноним 17/02/25 Пнд 10:26:47 3390694 985
1739777206359.png 7Кб, 575x113
575x113
Почему билд тулзы так много весят? Что с ними не так?
Аноним 17/02/25 Пнд 11:11:01 3390719 986
>>3390623
ок. перефразирую. это означает что скорость доступа к элементу всегда такая будто в списке 1 элемент.

>>3390643
>Я вот уверен, что в любом MVVM фреймворке разработчики обязаны изпользовать MediatR
и используют кому надо. Просто MVVM фреймворки они в основном про GUI и вопросов доменной модели не касаются несмотря на буковку M.
Только он не всем подходит ибо имеет склонность рождать хендлеры по запросу. И тогда проще взять MessageBus любой

>в конструктор не должно приходить более трёх зависимостей, одна из которых медиатр, а другая - маппер.
ну если сможешь обосновать какую проблему решает и как без него плохо
с диспозабле и евентами я обосновать могу легко. просто покажу код диспозабле и спрошу как мне не юзать эту портянку, и попрошу организовать вызов его через 4 этажа,как трекать диспозы и так далее.
а еще подключу многопоток в диспозе где ты удивишься
а потом перейдем к событиям и попрошу решить проблему многопотока
и вангую что тут ты пук среньк сделаешь. Да ты уже сделал.

так что крякай дальше, молодой утенок.
Аноним 17/02/25 Пнд 11:24:01 3390729 987
>>3390719
Да ты долбоёб, заглотил про медиатор полную хуйню. Я просто случайных слов понпбрал про очередную библиотеку, которую везде пропихивают так же как ты свою хуйню.

ебанашек, у которых Dispose не работает, я, если мягко выражаться, не понимаю.

Иди на хуй, дальше борись с мельницами
Аноним 17/02/25 Пнд 11:26:08 3390730 988
>>3390729
Красиво ты его уделал.
Аноним 17/02/25 Пнд 11:35:21 3390735 989
>>3390729
>заглотил про медиатор полную хуйню
почему хуйню. я на WPF проекте тоже ее применял. Просто с некоторыми костылями.

>у которых Dispose не работает
диспоз работает. Просто, как ты заметил - ЭТО ПРОСТО МЕТОД
Который даже в базовом варианте требует засирать класс методом, защитой от "забыли", защитой от двойного вызова, трекингом вложенных диспозов
И уж никак не отвечает за вызов диспоза, трекинг снаружи, правильную терминацию
Паттерн говорит буквально - я портянкой защитился КРИВО (ибо защищаться финализатором от "забыли" это решение говно, просто по другому с "это просто метод" никак нельзя) как мог, ибо у меня лапки.

А поэтому в WPF проблема диспоза вьюмоделей решается...барабанная дробь....ОТСУТСТВИЕМ этих самых диспоз и перекладыванием. Вот даже веак евент дали, веак мессенджеры.
А коли ежели тебе хочется таки вызывать диспоз, так MVVM фреймворки этот момент обходят и "ну вы уж сами решайте эти проблемы как хотите"

так что сказать то хотел?
Аноним 17/02/25 Пнд 11:45:05 3390745 990
>>3390735
> так что сказать то хотел?
Что хотел - то и сказал.
Дальше просто ржём.
Аноним 17/02/25 Пнд 11:49:13 3390747 991
>>3390745
>Что хотел - то и сказал.
ну я увидел пук среньк без аргументации
еще один собрат утенка это тоже увидел
Остальные увидели то же, что я - анона без аргументов и пруфов включившего тупое трололо и такой "хаха смотрите я его триггерю"

но тут техническая борда, а не чатик в доте, поэтому мои аргументы читают И УМНЫЕ люди и узнают что то новое для себя. Так что мне не жалко. Для них и пишу. Не все же были в старых тредах.
Кто то узнает про медиатр и автомаппер, а кто-то про лайфтаймы
не все же молодые крякальщики

так что продолжай ржать. Но...2 утенка никогда не вырастут. Впрочем, небольшая потеря для шарпа.
Аноним 17/02/25 Пнд 12:14:17 3390765 992
>>3390735
>ЭТО ПРОСТО МЕТОД

И ОН ПРОСТО РАБОТАЕТ

> Вот даже веак евент дали, веак мессенджеры.

Ты не научился просто на события подписываьтся и объекты вовремя диспозить. Сейчас демонстрируешь, что ты в целом не понимаешь, в чём у тебя проблема, и ищешь решения в какой-то сторонней хуйне.

Что будет с тобой дальше:
1. Твои проблемы не решатся
2. К твоим проблемам добавится еще одна, порождённая дополнительной библиотекой

Чел, я расскажу тебе историю. Был один проект, на котором один челик неправильно понял как CancellationToken работает.

Короче, он заявил, что с текущего момента все должны пользоваться его кенселлейшен токеном (который представлял собой обычный завёрнутый КТ, только обозванный другими словами).

Он окидывал всех величавым взглядом батьки, который в спец кенселляции, и вообще дотнет познал и преисполнился настолько, что может лучше написать. Кодовая база проекта на тот момент 8 лет работала, и на полное переписывание ушло не меньше чем полтора года.

А потом просто хуй забили и продолжили обычным КТ пользоваться
Аноним 17/02/25 Пнд 12:15:40 3390769 993
>>3390747
>мои аргументы читают И УМНЫЕ люди
К сожалению, твои аргументы читают умные люди
Аноним 17/02/25 Пнд 13:31:13 3390880 994
>>3390765
>И ОН ПРОСТО РАБОТАЕТ
в случает банального using да
вьюмодели в using не запихаешь. подписки в using не запихаешь.
сама необходимость писать диспоз метод, где самому отписывать = закатывать солнце вручную
ну а если твой using забыли использовать - до одного женского органа твой метод диспоз )

>Сейчас демонстрируешь
кроме "ты дурак, я скозал" аргументы будут? нет? ну ок.

>>3390769
и это хорошо. ты себя к ним относишь? можешь дать контраргументы? нет? ну ок

2 чела без аргументов, один с синдромом утенка. спор уровня /b, но не pr
пук сренькайте дальше. мне на работе скучно.
Аноним 17/02/25 Пнд 14:16:21 3390924 995
>>3390880
> кроме "ты дурак, я скозал" аргументы будут? нет? ну ок.

да, ты жалуешься на то, что у ВСЕХ работает идеально, на то, с чем ВСЕ разработчики работают годами, и что работает как АК-74.

Ты недовольный нытик, изобретаешь велосипед, который не решает никаких проблем, кроме тех, которые сам же и приносит
Аноним 17/02/25 Пнд 14:21:57 3390931 996
>>3390924
>да, ты жалуешься на то, что у ВСЕХ работает идеально
унылые попытки трололо. нужно быть тоньше.

еще аргументы будут? в трололо ты уже слился.
Аноним 17/02/25 Пнд 18:04:26 3391079 997
>>3390608
>>3390719
А в чём собственно сакральный смысл доступа за один шаг?
Аноним 17/02/25 Пнд 18:07:00 3391082 998
Аноним 17/02/25 Пнд 18:30:47 3391108 999
>>3391079
Да нет никакого смысла.
Вот ты, когда посрать хочешь, то наверняка заглядываешь в каждую комнату в доме в поисках унитаза. А потом срешь...тупостью в тред

Лучше бы перекат запилил
Аноним 17/02/25 Пнд 18:40:44 3391115 1000
>>3390931
>унылые попытки трололо. нужно быть тоньше.
>в трололо ты уже слился.

Я не шутил над тобой, я абсолютно серьёзно писал.
Аноним 17/02/25 Пнд 18:47:35 3391119 1001
>>3391115
тогда хреново быть тобой если ты на полном серьезе показываешь что ты хреновый программист.
Аноним 17/02/25 Пнд 19:01:07 3391133 1002
>>3391119
> показываешь что ты хреновый программист.

хули ты разнылся? тебе же никто не запрещает свою хуйню использовать
Аноним 17/02/25 Пнд 19:29:15 3391158 1003
Меня не покидает ощущение, что про медиатор и автомаппер здесь постит нейронка.
Аноним 17/02/25 Пнд 19:30:53 3391161 1004
>>3391158
ты же сам видишь что тут есть любители которые готовы жрать говно только потому что оно РОДНОЕ говно и не хотят учиться альтернативам.
Аноним 17/02/25 Пнд 20:18:32 3391174 1005
>>3391161
МедиатР это родное говно или альтернативное?
Аноним 17/02/25 Пнд 20:18:55 3391175 1006
Аноним 17/02/25 Пнд 20:36:27 3391185 1007
Аноним 17/02/25 Пнд 20:43:30 3391189 1008
>>3390634
Безусловно. Иди математику подтяни, а то совсем поплыл со своим автомаппером медиатра
Аноним 17/02/25 Пнд 20:44:35 3391190 1009
>>3390719
Ну это ваще пиздец, без комментариев
Аноним 17/02/25 Пнд 20:47:42 3391192 1010
>>3391190
конечно без. ведь на мои аргументы никто не смог предоставить ничего кроме "все жрут говно, а ты ерепенишься".
Вот только это не аргумент.
Аноним 17/02/25 Пнд 21:09:05 3391202 1011
>>3391192
>никто не смог предоставить ничего

Чел, ты пытаешься писать многопоточный код, где у тебя отписка осуществляется не в том потоке, в котором произошла подписка, пытаешься создавать объекты в одном потоке, а уничтожать их в другом:

> а еще подключу многопоток в диспозе где ты удивишься
> а потом перейдем к событиям и попрошу решить проблему многопотока

Что тебе надо "предоставить"? Удостоверение долбоёба?
Аноним 17/02/25 Пнд 21:13:10 3391203 1012
photo2025-02-17[...].jpg 152Кб, 1280x1209
1280x1209
>>3391192
>аргументы

аргументы блядь у него. Говна понаписал такого, что что с диспоузом не справляешься.

И думаешь, что крутая супер-библиотека за тебя все проблемы решит
Аноним 17/02/25 Пнд 21:21:04 3391205 1013
>>3391202
>где у тебя отписка осуществляется не в том потоке, в котором произошла подписка
ну как бы в многопоточном коде принятно что все происходит в разных потоках (с) кэп
и если ты думаешь что подписка и отписка в одном потоке решает проблему многопоточности у евентов - вынужден тебя разочаровать. можешь хоть лок навесить.

>Что тебе надо "предоставить"? Удостоверение долбоёба?
ну удостоверение ты уже предоставил. Решение не сможешь ибо НЕ СУЩЕСТВУЕТ универсального решения. Всегда выбор из нескольких стульев из которых что-то торчит. И ты выбираешь то, что тебя меньше травмирует.

Сможешь предоставить универсальное решение многопотока для родных событий шарпа (которые event сахар) - да о тебе сложат легенды.

>>3391203
>что что с диспоузом не справляешься.
А никто не справляется. Об этом даже в офф доке пишут
а) костыли для "забыли" и "вызвали дважды" и это КОСТЫЛИ
б) вообще ни слова о том, кто и как будет обеспечивать "а вы не забывайте", а также "вызывайте вовремя"

>крутая супер-библиотека за тебя все проблемы решит
не все, но большинство
а) НЕ ПОЗВОЛЯЕТ ЗАБЫТЬ. А раз так, то можно смело юзать строг подписки и не бояться.
б) решает проблему двойного вызова
в) решает проблему очередности терминации
г) все отписки происходят когда надо, а не когда GC проснется, что может быть и много времени
д) в основном тебе не нужно вообще думать о вызове терминации. это делается инфраструктурой.
е) код чище. в твоем коде диспоз это редкость. а значит и весь мусор что он привносит - его нет.

В итоге я ШИКАРНО (с) юзаю их в вьюмоделями, тогда как любой MVVM фреймворк мне говорит "придумывай свой лисапед, мы тут за гуи только"
Аноним 17/02/25 Пнд 21:45:46 3391215 1014
14-7-2480.jpg 54Кб, 412x320
412x320
>>3391205

Ты как тот хуй с пробиркой на картинке:

>НЕ ПОЗВОЛЯЕТ ЗАБЫТЬ.
пугает несуществующей проблемой

> решает проблему двойного вызова
нет такой проблемы

> решает проблему очередности терминации
создаёт проблему и тут же её героически решает

> все отписки происходят когда надо, а не когда GC проснется
ты неправильно понял как это работает

> в основном тебе не нужно вообще думать о вызове терминации. это делается инфраструктурой
не пизди

> код чище
слова чище, выразительней, элегантрее - маркер долбоёба

> в твоем коде диспоз это редкость. а значит и весь мусор что он привносит - его нет.
на отладке зашьёшься.
Аноним 17/02/25 Пнд 21:52:35 3391223 1015
>>3391215
>пугает несуществующей проблемой
>нет такой проблемы
об этих несуществующих проблемах прямо пишется в офф доке

далее можно не читать
уровень ICQ оппонента все уже поняли.
Аноним 17/02/25 Пнд 22:54:31 3391256 1016
Как ты докатился до того, что у тебя многопоток на вью-модельном уровне?

Ты же понимаешь, что это путь в никуда?
Аноним 17/02/25 Пнд 23:26:07 3391275 1017
>>3391256
>что у тебя многопоток на вью-модельном уровне?
я такого не говорил. Я говорил про лайфайтамы в разрезе вьюмоделей, но это не значит что они только там

Как бы здравый смысл (не ищи что это такое, ты его давно потерял) говорит что вьюмодель не может подписаться на модель с лайфтаймами, если модель не знает про лайфтаймы.
А это значит что лайфтаймы это по все системе где вообще есть понятие время жизни (то есть там где раньше городил костыли с отписками и прочим).

А про события упомянул попутно что сама концепция кривая и что их фтопку решая сразу все их проблемы, в том числе и проблему многопоточности. Никаких event в системе, нигде - они там не нужны ибо убоги и проблемные. Только кастомные реализации принимающие лайфтайм и НЕ имеющие перегрузок без принятия онного. Это ГАРАНТИЯ что не забудут отписаться.
Аноним 18/02/25 Втр 01:00:24 3391329 1018
>>3391108
А ты, при добавлении унитаза в комнату, начинаешь всё содержимое из старых комнат в новые комнаты переносить. Лучше что ли?
Аноним 18/02/25 Втр 07:54:52 3391404 1019
>>3391275
>вьюмодель не может подписаться на модель с лайфтаймами, если модель не знает про лайфтаймы.

ну то есть, сначала надо всё приложение переписать на лайвтаймы, и может быть тогда они некоторые проблемы снимут?

IDisposableAnalyzers решают всё за 5 минут. Притом бесплатно, и их можно отключить.

> А про события упомянул попутно что сама концепция кривая

тут согласен, события это скорее паттерн, который включать в язык не обязательно было. Но они экономят кучу кода

> Только кастомные реализации принимающие лайфтайм и НЕ имеющие перегрузок без принятия онного. Это ГАРАНТИЯ что не забудут отписаться.

Заставь дурака Богу молиться, он и лоб расшибёт
Аноним 18/02/25 Втр 09:12:08 3391448 1020
>>3391329
Только если захотеть поставить унитаз не в свободном месте, а вместо кухонной плиты.
Аноним 18/02/25 Втр 09:39:24 3391462 1021
>>3391404
Придёт новый разработчик, нихуя не поймёт и нахуевертит отдельное решение в сторонке.

Проблемы будут расти как сталагмиты из говна, потом эта хуйня пролелет в DI контейнер, потому что удобно же.

Потом пол года переписывать будешь на новую хуйню от джет брейнса, но получится снова говно, и у тебя на руках будет 4 переплетённых пуповинами сиамских близнеца,

Затем ты перестанешь поддерживать код и добавлять фичи потому что будешь думать, что у тебя очень сложное приложение, а на самом деле ты просто не понял как диспозы и события работают
Аноним 18/02/25 Втр 11:46:26 3391554 1022
>>3391329
>начинаешь всё содержимое из старых комнат в новые комнаты переносить
есть такая беда, но в иммутабельном списке
в обычном же можно заранее комнату побольше запланировать.
Выделяй комнату размером со вселенную, куда все влезет и сиди себе сри хоть вечно
Аноним 18/02/25 Втр 11:59:06 3391570 1023
>>3391404
>всё приложение переписать на лайвтаймы, и может быть тогда они некоторые проблемы снимут?
Как и с другой фундаментальной либой. Чудес не бывает.
Ну на самом деле лайфтайм либа без проблем регистрирует в себя диспозаблы старые. Так что можно спокойно переписывать почуть, начиная с любого уровня. Допустим, у тебя проект использует хуету самописную типа Run/Stop. Тебе ж не сильно будет сложно добавить в этот проект CancellationToken и сразу же пожинать с него плюшки. А какая разница с лайфтаймами? А нет ее

>Но они экономят кучу кода
Это да. Но реализаций разных много - например, можно вернуть диспозабле токен после подписки, а выбрана была именно эта.

>Заставь дурака Богу молиться
да не заставляю я тебя, НЕ ЗАСТАВЛЯЮ. уймись.
Если ты не знаешь что такое концепция fail-fast, то и ладно.
А некоторые вон даже нуллабле в шарпе выставляют настройку "считать ошибкой и не компилироваться"

>>3391462
>Придёт новый разработчик, нихуя не поймёт
Ну если разработчик не может понять концепцию которая на 99% идентична концепции CancellationToken, то такой разработчик и не нужен. Даже в том же видео от жебтраинс про саму суть лайфтаймов всего 15 минут, а остальное про всякие хитрости типа битовых полей, оптимизаций, лог-фасад и так далее.

>просто не понял как диспозы
вернее отлично понял как они работают. И что они вполне допустимы в using (хотя по прежнему реализация диспоз это трехэтажный защитный монстр, но если уж он написан то ладно, не моя проблема же его писать), но если using невозможен, то значит нужно городить костыль по трекингу диспозов и их вызову, да и не забыть, да и вообще сгородить (а с в WPF это не просто) - проще взять готовое решение, решающее эти проблемы, которые диспоз не решает вообще - он же просто метод и не занимается проблемами его вызова
Аноним 18/02/25 Втр 12:51:24 3391607 1024
>>3391404
>IDisposableAnalyzers решают всё
да да. свежо предание....
он даже в гифке вон диспозит стрим, что в конструктор получил. А потом клиент этого Фуу класса с удивлением получит исключение что стрим сдох и такой "какого хе..."

Этот анализатор может помочь частично сгенерить метод диспоз
но никак не решает проблему вызова этого самого диспоз.

ну а про отписку событий там вообще не видать. Да и не всегда отписка это именно диспоз. Это может быть Un/Deregister или еще чего то. Никакой анализатор не увидит в нем диспозабле ибо его там попросту нет. И конечно же не добавит его в диспоз метод ибо откуда ему знать об этом. То есть опять же разраб должен сам трекать и не забывать отписываться/закрывать ручками даже с этим анализатором.

с лайфтаймами метод диспоз существовать не будет вообще и трекать ничего не надо.
Аноним 18/02/25 Втр 12:56:46 3391612 1025
>>3391404
Далеко ходить не нужно. Модерновая типа "стандарт" либа communitytoolkit в своем StrongReferenceMessenger (с weak все понятно - там в принципе нет отписок) имеет метод Unregister

поможет тебе твой анализатор с этим методом? вопрос риторический. А как он затрекает "подписался отписался снова подписался снова отписался"? вопрос риторический
Аноним 18/02/25 Втр 13:13:58 3391623 1026
image.png 49Кб, 674x1205
674x1205
Как сделать более лучше?

1: приемлемо для словаря сделать #pragma warning disable или лучше дописать where T : notnull и в методах заменить Т на Т? ?

2: опять же #pragma warning disable или менять Т на Т? ?


Сделать #nullable disable понятно, но хочется разобраться с enable.
Аноним 18/02/25 Втр 13:23:17 3391639 1027
>>3391570
Ты долбоёб, конечно. Не смог в простых вещах разобраться, полез заниматься сложными. Скорее всего тебе очень тяжело программировать, а твой характер заставляет делать тебя хуйню. Поздравляю, у тебя БИНГО
Аноним 18/02/25 Втр 13:27:01 3391646 1028
>>3391623
>сложными
аналог CancellationToken
да. это очень очень очень сложно.

>в простых
каждый пишет кучу говнокода внутри диспозабле классов и кучу снаружи. При этом дополнительно велосипед для вызова диспоз не из метода диспоз.
ну это просто

>Скорее всего тебе очень тяжело программировать,
не без этого. знаю много языков ( и бесит когда простое в одном языке нужно делать через жопу в другом.
поэтому на шарп я в этом треде бочку качу много

но это не по теме.
Аноним 18/02/25 Втр 14:44:19 3391739 1029
Привет, тред. Помогите советом и/или источниками. Короче, я выпускник с вышкой технического вуза, информатика. Но я ввиду жизненных обстоятельств уже два с небольшим года с кодом не соприкасался вообще. Шарп в универе любил очень, диплом на нем сдал, но как будто ничего не помню уже. Конечно, после универа опыта работы по специальности не было.

Хочу наверстать Шарп и стать уверенным хотя бы джуном, а лучше джуном с плюсиком. Как быть? Какие книги/курсы можете порекомендовать? Сижу дома, могу фуллтайм учиться.

Спасибо всем, кто отзовется. Меньше вам страшного легаси кода в жизни и сломанных билдов.
Аноним 18/02/25 Втр 16:06:24 3391817 1030
Аноним 18/02/25 Втр 16:18:56 3391828 1031
>>3391623
1 pragma warning disable используют только пидарасы. Для нормальных людей такое допустимо только в автогенеренном коде, и только если эти директивы расставляются самим же генератором.
2 не пихать в сет default, а придумать для этого уникальный объект, который будет маркером для null. Да и вообще отказаться от использования null в качестве объекта в остальном коде.
Аноним 18/02/25 Втр 18:05:24 3391902 1032
>>3391554
>есть такая беда, но в иммутабельном списке
>в обычном же
Я так и не пойму, список там или всё же массив?
Аноним 18/02/25 Втр 18:07:26 3391909 1033
>>3391902
угадай с 2х раз. не ошибешься
Аноним 18/02/25 Втр 18:10:42 3391915 1034
>>3391828
>2 не пихать в сет default, а придумать для этого уникальный объект, который будет маркером для null.
А если это сферовакуумный дженерик, как Dictionary?

>1 pragma warning disable используют только пидарасы.
Один раз... Это же в nullable контексте?
Что насчёт этого https://stackoverflow.com/questions/74544989/creating-dictionary-with-potentially-nullable-generic-key-type#comment131589586_74544989 ?

Что скажешь о заворачивании во что-то типа Nullable<>? Просто кажется, что это слишком дохуя, когда можно просто #pragma warning dis... ээ...

Алсо, если потом создать инстанс как G<MyClass?>, то ведь правильно будет ожидать, что он не только принимает null, но и возвращает, особенно если это некая коллекция без органичений T.


Экскузи муа за дохуя сумбурных вопросов, но как-то всё кажется неоднозначным.
Аноним 18/02/25 Втр 18:12:08 3391916 1035
>>3391915
не парься. шарп плохо обрабатывает T? так что смело прагмируй если он тупит и ну прямо никак.
Аноним 18/02/25 Втр 19:22:55 3391952 1036
>>3391817
Спасибо. Пробежался быстро по сайту, вроде действительно годно как справочник, вспомнить синтаксис и базовые понятия. Немного стремно, что нет понимания, кто составлял тексты и редактировал (вдруг там неверные знания или плохие практики?) Буду параллельно сверяться с какой-нибудь книгой, для внутреннего спокойствия.
Аноним 18/02/25 Втр 19:30:45 3391956 1037
>>3391828
> 1 pragma warning disable используют только пидарасы. Для нормальных людей такое допустимо только в автогенеренном коде, и только если эти директивы расставляются самим же генератором.
Спешите видеть, дурачок возомнил себя программистом и с уверенным видом вещает, что можно, а что нельзя использовать.
Аноним 18/02/25 Втр 19:50:37 3391971 1038
Оцените основу для телеграм бота. Правильно я её делаю? Идея состоит в том, чтобы избавиться от нагромождений if, switch case и хардкодинга. ИИ подобную структуру сделать не смог, как бы не описывал ему
Знаю что нужно сделать интерфейс, чтобы функции команд реализовывали его, а так же изменить info на более общий класс, который хранит целое сообщение, а не только текст от него
https://pastes.io/bot-template
Аноним 18/02/25 Втр 19:58:37 3391976 1039
>>3391971
придет время и ты сразу будешь делать
- DI
- конфиг
- логгер
и т.д.
Запихнешь бота в сервис который и построишь через DI, а команды в хендлеры, которые классы и чтобы они авторегистрировались, а не словарик.

будет работать точно так же, но выглядеть наворочено )
Аноним 18/02/25 Втр 20:00:56 3391978 1040
>>3391956
>что можно, а что нельзя использовать
Где в моей фразе хоть слово про 'можно' и 'нельзя'?
Аноним 18/02/25 Втр 20:02:34 3391980 1041
>>3391978
ну может тебе и можно быть пидорасом, но другим все же нельзя
вот тебе ответ где там слово "нельзя"
Аноним 18/02/25 Втр 20:03:12 3391982 1042
>>3391976
А ещё будет добавлять медиатор, автомаппер и флюент валидатор.
Аноним 18/02/25 Втр 20:07:02 3391986 1043
>>3391982
И БУДЕТ ПРАВ.

я помню себя. тоже такой. блин пишу мелочь, нафига мне все эти дизайны и архитектуры, всё можно в Program.cs сделать.
А потом мелочь как начала расти да пришлось переделывать с нуля в итоге по нормальному.
Пары раз хватило и я теперь не выделываюсь, а сразу делаю как надо.
Аноним 18/02/25 Втр 20:35:04 3391994 1044
>>3391976
Что-то время идёт и всё не начинаю это делать. Как начать это всё осваивать? Переделать ту программу которую скинул, используя все эти интересные технологии. У ии что-ли спросить...
Аноним 18/02/25 Втр 20:41:20 3391996 1045
>>3391976
> конфиг
А вот это вот нахуй не нужно в 99% случаев
Аноним 18/02/25 Втр 20:43:52 3391998 1046
>>3391994
да. переделай. привыкай сразу к дизайну "все лежит в положенном для него месте".

сделай "по красоте"
заведи DI
заведи services.RegisterHandlers который все найдет и запихает в контейнер.
После этого ты изи сможешь получить в хендлере и сервисе что тебе нужно банально прописав в конструкторе

Искусство рефакторинга - важнейшее из искусств. Так еще сын Тараса Бульбы говорил, за что и был убит.

>>3391996
>А вот это вот нахуй не нужно в 99% случаев
согласен. это в 99% случаев не нужно кроме как именно сразу нужно. еще остается 20% когда реально не нужно
Аноним 18/02/25 Втр 23:20:26 3392060 1047
>>3391986
>по нормальному.

Начни с подключения JetBrains.Lifetimes и разбиения кода на гексоганальный CQRS.

Не забудь захватить чистую архитектуру и отличное настроение!
Аноним 18/02/25 Втр 23:46:44 3392075 1048
>>3392060
от JetBrains.Lifetimes всегда отличное настроение. Я ж не просто так тут столько постов написал какое оно шикарно (с)
Аноним 21/02/25 Птн 00:54:39 3393671 1049
А где все?
Аноним 21/02/25 Птн 01:44:15 3393682 1050
Аноним 21/02/25 Птн 01:50:43 3393683 1051
Аноним 21/02/25 Птн 02:16:17 3393692 1052
>>3393683
Сам перекати. Я из ждунов
Аноним 21/02/25 Птн 14:11:10 3394031 1053
Перекатите, пожалуйста, не забудьте, про автомапер написать, что это говно
Аноним 21/02/25 Птн 14:41:54 3394042 1054
>>3394031
Перекати и пиши что хочешь.
Аноним 21/02/25 Птн 16:45:36 3394175 1055
Сейчас .NET Full Stack джуны нахуй не сдались что-ли? Промониторил hh и хабр карьеру буквально ноль предложений на удалёнку, на очку 2-3. Как вообще рынок себя чувствует?
Аноним 21/02/25 Птн 17:13:16 3394207 1056
>>3394175
> Как вообще рынок себя чувствует?
Перекати и расскажу.
Аноним 21/02/25 Птн 18:57:13 3394350 1057
>>3394175
>Сейчас .NET Full Stack джуны нахуй не сдались что-ли?
Всем нужны хорошие бэкендеры, которых периодически пытются припрячь к выполнению фронтовых задач. Слабые духом сдаются, сильные - посылают нахуй такие инициативы.

Фулкекеры - это сейчас оверхед. В среднем на команду из 4..6 беков приходится вчсего 1..2 фронтендера. При таких вводдных узкоспециализированные специ выгоднее универсальных, просто потому что в своей области они будут эффективнее.
Аноним 21/02/25 Птн 20:43:04 3394466 1058
>>3394042
>Перекати и пиши что хочешь.

Сам перекати, я не умею
Аноним 21/02/25 Птн 21:29:01 3394496 1059
>>3394350
Да, сам всегда так думал и пока дрочил без конца бек от фронта плевался, но сейчас пока в процессе вката начал писать проекты пришлось базово осваивать HTML CSS JS чтобы хоть какой-то UI был и AJAX, конкретно .NET в Full Stack видел куда чаще остальных (мб хуево смотрел)

Но и на чистый бек я тоже вакансий пока не нашел чтоб удалёнка без опыта
Аноним 21/02/25 Птн 21:32:55 3394500 1060
>>3394466
Никто не умеет, вот и научишься.
Аноним 21/02/25 Птн 22:20:12 3394529 1061
cs.png 351Кб, 621x572
621x572
Аноним 21/02/25 Птн 22:50:16 3394543 1062
>>3394529
Почему ты такой умный
И не перекатил
Аноним 23/02/25 Вск 08:10:26 3395338 1063
Аноним 23/02/25 Вск 14:32:01 3395514 1064
КАК БЛЯДЬ ТРЕД ПЕРЕКАТИТЬ, Я УЖЕ ДВА ДНЯ НЕ ХУЕСОСИЛ МЕДИАТОР БЛЯДЕЙ
Аноним 23/02/25 Вск 14:35:42 3395518 1065
>>3395514
1 подготавливаешь перекат
2 перекатываешь
3 пишешь в старом треде что перекатил
Аноним 23/02/25 Вск 14:44:37 3395524 1066
Аноним 23/02/25 Вск 15:39:48 3395559 1067
1.OM0PdLa4lCQ5w[...].jpg 160Кб, 720x960
720x960
Быстро распедалили какие буквари мне почитать, чтобы погроммироват на етом вашем С# для передовой операционной системы - Windows Mobile 6.5? И почему нету специального треда по программированию для этой великолепной системы?
Аноним 23/02/25 Вск 16:05:11 3395588 1068
>>3395559

Перекати тред, заебал
Аноним 23/02/25 Вск 16:29:19 3395607 1069
>>3395588
>Перекати тред
Я сюда первый раз зашел за все время своего капчевания с 2012 года. Где тутошние усачи-перекатчики? Да и в тематике бумп-лимит навроде 2к постов?
Аноним 23/02/25 Вск 19:04:55 3395710 1070
>>3395588
Ваш тред недостоин переката. Как ни спросишь что-нибудь - то либо игнорят, либо паясничают.
Аноним 23/02/25 Вск 19:13:57 3395717 1071
>>3395710
>Как ни спросишь что-нибудь
Что тебя интересует?
Аноним 23/02/25 Вск 19:24:49 3395726 1072
>>3395710
Так нечего спрашивать всякую хуйню ньюфажную.
Аноним 23/02/25 Вск 20:10:01 3395749 1073
Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов