Как стать автором
Обновить
126.98

.NET *

Хаб со знаниями про .NET

Сначала показывать
Порог рейтинга
Уровень сложности

Nullable Reference не защищают, и вот доказательства

Время на прочтение 13 мин
Количество просмотров 9.1K
image1.png

Хотели ли вы когда-нибудь избавиться от проблемы с разыменованием нулевых ссылок? Если да, то использование Nullable Reference типов — это не ваш выбор. Интересно почему? Об этом сегодня и пойдёт речь.
Читать дальше →
Всего голосов 27: ↑23 и ↓4 +19
Комментарии 26

8 анонсов конференции Microsoft Ignite 2020

Время на прочтение 3 мин
Количество просмотров 2K


На крупнейшей ежегодной конференции Ignite 2020 Microsoft представила ряд технологий и сервисов в сфере бизнеса и инноваций.

Под катом 8 интересных анонсов конференции.
Читать дальше →
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 2

Мне было стыдно за свой интерпрайз-код настолько, что я сделал свой велосипед. За него стыдно меньше

Время на прочтение 11 мин
Количество просмотров 13K

image


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


Всё началось с того, что я рассказывал про проблематику проектирования приложений на .NET и ныл про нелёгкую жизнь в кровавом интерпрайзе. Затем я описал решение, которое сам придумал и реализовал — Reinforced.Tecture. То была теория, концептуальные рассуждения, визионёрство и снова нытьё. На этот раз о том, что на дворе 2020 год, а HKT в C# так и не завезли.


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

Читать дальше →
Всего голосов 32: ↑26 и ↓6 +20
Комментарии 26

Архитектура интерпрайз-приложений может быть другой

Время на прочтение 17 мин
Количество просмотров 27K

image


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


Мне нравится перебирать архитектурные концепции. Всю жизнь я пытаюсь найти в области архитектуры и дизайна ПО что-то работающее и в то же время простое. Не требующее разрыва мозга для понимания и кардинальной смены парадигмы. Идей накопилось порядочно и я решил объединить лучшие из них в своём фреймворке — Reinforced.Tecture. Разработка таких штук даёт гигантское количество пищи для размышлений, я хочу ими поделиться.


Тексты про такие технические вещи обычно до ужаса нудные. Я честно постарался не нудить, поэтому мой текст получился слегка агрессивным. Если вам с этим норм и интересно почитать про архитектуры .NET-приложений — заходите.

Читать дальше →
Всего голосов 46: ↑41 и ↓5 +36
Комментарии 56

Истории

Aspect Oriented Programming (AOP) через исходный код

Время на прочтение 40 мин
Количество просмотров 12K


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

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

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

Если вам интересно узнать детали, прошу пожаловать под кат.
Читать дальше →
Всего голосов 24: ↑20 и ↓4 +16
Комментарии 14

Интеграция с «Госуслугами». Применение Workflow Core (часть II)

Время на прочтение 11 мин
Количество просмотров 4.5K
В прошлый раз мы рассмотрели место СМЭВ в задаче интеграции с порталом «Госуслуг». Предоставляя унифицированный протокол общения между участниками, СМЭВ существенно облегчает взаимодействие между множеством различных ведомств и организаций, желающих предоставлять свои услуги с помощью портала.

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

О том, как и с помощью чего можно организовать подобную обработку, мы и поговорим далее.
Читать дальше →
Всего голосов 4: ↑4 и ↓0 +4
Комментарии 10

Отлаживайте ваши приложения .NET Core в WSL 2 с Visual Studio

Время на прочтение 3 мин
Количество просмотров 5.1K
Вы разработчик .NET Core, которому нравится работать в Windows и Visual Studio, но вам нужно протестировать свое приложение в Linux? Вы кросс-платформенный разработчик, которому нужен простой способ тестирования большего количества целевых сред? Вы уже открыли для себя преимущества WSL 2, но вам нужен способ интегрировать его во внутренний цикл? У меня есть для вас расширение! Расширение .NET Core Debugging с WSL 2 — Preview дает вам возможность запускать и отлаживать приложения .NET Core в WSL 2, не выходя из Visual Studio.

Читать дальше →
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 2

Основы компьютерной геометрии. Написание простого 3D-рендера

Время на прочтение 30 мин
Количество просмотров 49K
Привет меня зовут Давид, а вот я собственной персоной отрендеренный своим самописным рендером:

image

К сожалению я не смог найти более качественную бесплатную модель, но все равно выражаю благодарность заморскому скульптору запечатлевшему меня в цифре! И как вы уже догадались, речь пойдет о написании CPU — рендера.
Читать дальше →
Всего голосов 45: ↑44 и ↓1 +43
Комментарии 21

Принятого не воротай: Enumerable vs List

Время на прочтение 4 мин
Количество просмотров 19K

Когда-то я работал в команде, где слегка недолюбливали LINQ, за то, что такой код якобы сложно отлаживать. У нас была договоренность: после каждой цепочки LINQ, разработчик создает локальную переменную, в которую записывает результат ToArray(). Независимо от того, потребуется ли массив далее по методу, или он работает только с IEnumerable. Перед return, результат также приводился к массиву, кажется, во всей кодовой базе не было методов, возвращающих или принимающих коллекцию, отличную от массива.

Бородатое легаси! - подумаете вы и будете правы. Однако, несмотря то, что прошло много лет, с тех пор, как LINQ стал использоваться повсеместно, а IDE позволяют смотреть данные в отладке, некоторые разработчики все еще плохо представляют себе критерии выбора принимаемого и возвращаемого типа, если речь заходит о коллекциях.

Читать далее
Всего голосов 9: ↑7 и ↓2 +5
Комментарии 23

Немного о велосипедах

Время на прочтение 2 мин
Количество просмотров 6.5K
Засели мы как-то с однокурсником в 2014 году пилить стартап. Срок, результат и направленность продукта для данного текста не важны. Важно то, что клиент был мобильным приложением на Java для Android, а сервер – службой, написанной на C#, общавшейся с хранилищем данных. Далее – поучительная история седым старцам (от программирования) на потеху, безбородым юнцам – в назидание.
Читать дальше →
Всего голосов 8: ↑4 и ↓4 0
Комментарии 18

Творческое использование методов расширения в C#

Время на прочтение 5 мин
Количество просмотров 13K
Привет, Хабр!

Продолжая исследование темы C#, мы перевели для вас следующую небольшую статью, касающуюся оригинального использования extension methods. Рекомендуем обратить особое внимание на последний раздел, касающийся интерфейсов, а также на профиль автора.


Читать дальше →
Всего голосов 21: ↑21 и ↓0 +21
Комментарии 16

GetHashCode() и философский камень, или краткий очерк о граблях

Время на прочтение 5 мин
Количество просмотров 9.5K

Казалось бы, что тема словарей, хэш-таблиц и всяческих хэш-кодов расписана вдоль и поперек, а каждый второй разработчик, будучи разбужен от ранней вечерней дремы примерно в 01:28am, быстренько набросает на листочке алгоритм балансировки Hashtable, попутно доказав все свойства в big-O нотации.

Возможно, такая хорошая осведомленность о предмете нашей беседы, может сослужить и плохую службу, вселяя ложное чувство уверенности: "Это ж так просто! Что тут может пойти не так?"

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

Не переключайтесь
Всего голосов 18: ↑17 и ↓1 +16
Комментарии 17

Я 20 лет наслаждаюсь разнообразием архитектур и хочу поделиться мыслями

Время на прочтение 8 мин
Количество просмотров 22K


Сначала хотел написать комментарий к статье "Я десять лет страдал от ужасных архитектур в C#...", но понял две вещи:

  1. Слишком много мыслей, которыми хочется поделиться.
  2. Для такого объёма формат комментария неудобен ни для написания, ни для прочтения.
  3. Давно читаю Хабр, иногда комментирую, но ни разу не писал статей.
  4. Я не силён в нумерованных списках.

Disclaimer: я не критикую @pnovikov или его задумку в целом. Текст качественный (чувствуется опытный редактор), часть мыслей разделяю. Архитектур много, но это нормально (да, звучит как название корейского фильма). 

Однако давайте по порядку. Сначала моё мнение о том, что влияет на архитектуру, потом про спорные моменты в статье об «исправлении архитектур». Ещё расскажу о том, что у нас хорошо работает — может, пригодится кому-нибудь.
Читать дальше →
Всего голосов 44: ↑43 и ↓1 +42
Комментарии 60

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн

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

Время на прочтение 6 мин
Количество просмотров 35K

image


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


В языках вечно не хватает чего-то простого — лямбда-функций, именованных объединений, кастомных примитивных типов. Я лезу в обсуждения на Stack Overflow, в Github и вижу, как разрабы жалуются — им не хватает того же, чего и мне. Но обсуждения почти всегда заканчиваются одинаково: нужная фича не появится, потому что главный дизайнер языка и члены его команды нужной ее не считают.


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


Но сейчас я понимаю — это полная чушь.

Читать дальше →
Всего голосов 179: ↑112 и ↓67 +45
Комментарии 337

Варианты использования конфигурации в ASP.NET Core

Время на прочтение 15 мин
Количество просмотров 18K
Для получения конфигурации приложения обычно используют метод доступа по ключевому слову (ключ-значение). Но это бывает не всегда удобно т.к. иногда требуется использовать готовые объекты в коде с уже установленными значениями, причем с возможностью обновления значений без перезагрузки приложения. В данном примере предлагается шаблон использования конфигурации в качестве промежуточного слоя для ASP.NET Core приложений.
Читать дальше →
Всего голосов 11: ↑10 и ↓1 +9
Комментарии 6

Конференция Microsoft Ignite 2020 — уже 22-24 сентября

Время на прочтение 2 мин
Количество просмотров 1.1K
Microsoft Ignite, бесплатная онлайн-конференция, пройдет уже менее чем через месяц, 22-24 сентября. Присоединяйтесь к нам, чтобы узнать о новаторских способах создания решений, переноса инфраструктуры и управления ею. Кроме этого вы сможете пообщаться с экспертами Microsoft и другими специалистами в области технологий со всего мира.

Регистрация. Ну а под катом подробности.

Читать дальше →
Всего голосов 2: ↑2 и ↓0 +2
Комментарии 0

Enum и switch, и что с ними не так

Время на прочтение 4 мин
Количество просмотров 9.1K

image


Часто ли у вас было такое, что вы добавляли новое значение в enum и потом тратили часы на то, чтобы найти все места его использования, а затем добавить новый case, чтобы не получить ArgumentOutOfRangeException во время исполнения?

Читать дальше →
Всего голосов 16: ↑10 и ↓6 +4
Комментарии 19

Переработка системы обратной связи Visual Studio

Время на прочтение 2 мин
Количество просмотров 2.2K
Летом мы обновили возможности отправки отзывов о Visual Studio. Это первое в длинном ряду изменений, добавленных в систему обратной связи Visual Studio. В результате вы получите более понятный интерфейс, который будет работать быстрее и удобнее.



Инструмент обратной связи помог нам исправить более пятисот ошибок, о которых рассказали пользователи, и а также поспособствовал добавлению множества функций в обновлениях Visual Studio. Это важная часть нашего процесса разработки, и теперь пришло время улучшить инструмент.
Читать дальше →
Всего голосов 2: ↑2 и ↓0 +2
Комментарии 4

Я десять лет страдал от ужасных архитектур в C# приложениях — и вот нашел, как их исправить

Время на прочтение 10 мин
Количество просмотров 42K


Я второй десяток лет участвую в разработке приложений для бизнеса на .NET и каждый раз вижу одни и те же проблемы — быдлокод и беспорядок. Месиво из сервисов, UoW, DTO-шек, классов-хелперов. В иных местах и прямой доступ в базу данных руками, логика в статических классах, километровые портянки конфигурации IoC.


Когда я был молодым и резвым мидлом — я тоже так писал. Потом бил кулаком в стену с криками: "Хватит! В следующий раз сделаю по-другому". Следующий раз действительно начинался "по-другому" — с холодной головой и строгим подходом к архитектуре — а на выходе все равно получалась та же субстанция, лучше на пару миллиметров.


Однако, эволюция — беспощадная штука: моя последняя система показалась мне более-менее близкой к идеалу. Сложность не сильно росла, скорость разработки не падала довольно долго, в систему худо-бедно въезжают новые сотрудники. Эти результаты я взял за основу, улучшил и теперь анонсирую вам свою новую разработку: Reinforced.Tecture.

Читать дальше →
Всего голосов 85: ↑60 и ↓25 +35
Комментарии 108

Как «готовить» nullable reference types с добавлением appsettings.json

Время на прочтение 9 мин
Количество просмотров 5.4K
В данной статье хочу поделиться своими размышлениями о том, можно ли на современном C# писать код, безопасный от NullReferenceException. Этот зловредный тип исключения не говорит разработчику, в каком конкретно месте у него null. Конечно, от отчаяния можно?.начать?.писать?.обращение?.ко?.всем?.полям?.вот?.так?.вот, но есть адекватное решение — использовать аннотации типов от JetBrains или Microsoft. После этого компилятор начнет нам подсказывать (и «подсказывать» очень настойчиво, если включить опцию WarningsAsError), в каком конкретно месте нужно добавлять соответствующую проверку.

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


Читать дальше →
Всего голосов 16: ↑14 и ↓2 +12
Комментарии 22

Вклад авторов

Работа

.NET разработчик
66 вакансий