marker interface
Для чего их вообще используют?
Допустим, в коде используется некий объект, который реализует указанный интерфейс. Тогда, появляется возможность проверить реализуется ли он и скорректировать на основе этого обработку объекта.
Также, маркерный интерфейс может быть необходимым злом при отсутствии поддержки в языке discriminated union types.
К сожалению, в объектно-ориентированных языках вроде C# объявить тип, который будет чем-то конкретным из указанного набора, невозможно.
Поэтому, приходится прибегать к таким уловкам.
Почему маркерных интерфейсов стоит избегать?
Главная проблема такого подхода - нарушение инкапсуляции.
Объект сам по себе теперь обладает неявным контролем над возможностями внешнего использования. Более того, он знает окружение, в котором будет использоваться.
Применение маркерного интерфейса подразумевает, что где-то будет находится проверка на этот маркер. Это противоречит идее инкапсуляции, потому что у объекта появляется знание о реализации той части системы, которая находится совершенно вне зоны его «полномочий».
В общем, обычный интерфейс говорит окружающему миру о том как он может быть использован, пустой, маркерный, о том, как должен быть использован.
#полезное #tips
Для чего их вообще используют?
Допустим, в коде используется некий объект, который реализует указанный интерфейс. Тогда, появляется возможность проверить реализуется ли он и скорректировать на основе этого обработку объекта.
Также, маркерный интерфейс может быть необходимым злом при отсутствии поддержки в языке discriminated union types.
К сожалению, в объектно-ориентированных языках вроде C# объявить тип, который будет чем-то конкретным из указанного набора, невозможно.
Поэтому, приходится прибегать к таким уловкам.
Почему маркерных интерфейсов стоит избегать?
Главная проблема такого подхода - нарушение инкапсуляции.
Объект сам по себе теперь обладает неявным контролем над возможностями внешнего использования. Более того, он знает окружение, в котором будет использоваться.
Применение маркерного интерфейса подразумевает, что где-то будет находится проверка на этот маркер. Это противоречит идее инкапсуляции, потому что у объекта появляется знание о реализации той части системы, которая находится совершенно вне зоны его «полномочий».
В общем, обычный интерфейс говорит окружающему миру о том как он может быть использован, пустой, маркерный, о том, как должен быть использован.
#полезное #tips
👍4
Какой класс используется для создания нового потока в C#?
Anonymous Quiz
79%
System.Threading.Thread
12%
System.Threading.Tasks.Task
6%
System.Threading.ThreadPool
2%
System.Threading.Tasks.Parallel
🥴6
На пальцах про AAA
Как вы могли понять речь пойдёт не о батарейках или играх. Сегодняшний пост про юнит-тестирование.
Согласитесь, в таком сложном мире как программирование сложно ориентироваться, когда всё лежит где попало, не на своих местах.
Гораздо проще, когда всё структурировано, лежит, так сказать, по полочкам.
Однажды, умные разработчики подумали, и поняли, что и тесты можно структурировать и разложить на конкретные и понятные этапы.
Arrange
В этой секции находится код, ответственный за настройку теста. Создание объектов, подготовка данных, настройка моков и так далее.
Act
Затем идёт действие. То есть, непосредственно вызов тестируемого функционала.
Assert
Финальный этап - проверка. Проверяется всё что требуется проверить. Какие получились данные, состояние объектов, вызвалось ли то что нужно, была ли ошибка. В общем, есть где развернуться.
Вот и получается, что паттерн Arrange-Act-Assert за счёт своей простоты и эффективности в отношении организации и написания тестов стал де-факто стандартом индустрии.
#полезное #tips
Как вы могли понять речь пойдёт не о батарейках или играх. Сегодняшний пост про юнит-тестирование.
Согласитесь, в таком сложном мире как программирование сложно ориентироваться, когда всё лежит где попало, не на своих местах.
Гораздо проще, когда всё структурировано, лежит, так сказать, по полочкам.
Однажды, умные разработчики подумали, и поняли, что и тесты можно структурировать и разложить на конкретные и понятные этапы.
Arrange
В этой секции находится код, ответственный за настройку теста. Создание объектов, подготовка данных, настройка моков и так далее.
Act
Затем идёт действие. То есть, непосредственно вызов тестируемого функционала.
Assert
Финальный этап - проверка. Проверяется всё что требуется проверить. Какие получились данные, состояние объектов, вызвалось ли то что нужно, была ли ошибка. В общем, есть где развернуться.
Вот и получается, что паттерн Arrange-Act-Assert за счёт своей простоты и эффективности в отношении организации и написания тестов стал де-факто стандартом индустрии.
#полезное #tips
👍9
Какое ключевое слово используется для определения асинхронного метода?
Anonymous Quiz
94%
async
4%
await
2%
asynchronous
1%
parallel
😴17👍6🤡3❤2😁2💩1🥴1🗿1
Какой символ используется для комментариев в одной строке?
Anonymous Quiz
96%
//
3%
/*
0%
''
1%
<!--
🤣35🥱19🤡9🥴4👍2🗿1
Do I need to run tests before
На текущем проекте мы используем Kafka. Так вышло, что я - MacBook enjoyer и пишу код на m1 машине.
Соответственно, интеграционные тесты, задействующие Kafka тупо не запускаются.
И какое-то время назад у меня в голове возник вопрос: «а должно ли это вообще меня волновать?»
Ладно, Kafka. Но в большом коммерческом проекте есть ещё много других вещей, которые нужно было бы поднимать на своей машине, просто чтобы запустить приложение:
▪️Эмулятор внешних систем (mock интеграций);
▪️Базы данных;
▪️Кэш;
▪️Gateway микросервисов;
И многое другое…
Зачем мне засорять компьютер, когда уже есть облако с окружением, где крутятся пайплайны, триггернутые коммитом? CI/CD - это автоматизация всей вот этой рутины. И я воспользуюсь этим технологическим достижением, чтобы упростить себе жизнь.
Смысл прогонять тесты на машине, если репорт будет читаться из пайплайна в гитлабе?
#полезное #tips
push
?На текущем проекте мы используем Kafka. Так вышло, что я - MacBook enjoyer и пишу код на m1 машине.
Соответственно, интеграционные тесты, задействующие Kafka тупо не запускаются.
И какое-то время назад у меня в голове возник вопрос: «а должно ли это вообще меня волновать?»
Ладно, Kafka. Но в большом коммерческом проекте есть ещё много других вещей, которые нужно было бы поднимать на своей машине, просто чтобы запустить приложение:
▪️Эмулятор внешних систем (mock интеграций);
▪️Базы данных;
▪️Кэш;
▪️Gateway микросервисов;
И многое другое…
Зачем мне засорять компьютер, когда уже есть облако с окружением, где крутятся пайплайны, триггернутые коммитом? CI/CD - это автоматизация всей вот этой рутины. И я воспользуюсь этим технологическим достижением, чтобы упростить себе жизнь.
Смысл прогонять тесты на машине, если репорт будет читаться из пайплайна в гитлабе?
#полезное #tips
👍4❤1🤣1
Какой оператор используется для фильтрации элементов в LINQ?
Anonymous Quiz
12%
select
74%
where
9%
orderby
5%
groupby
🥴11👍4💩4😁2
Как создать экземпляр класса в C#?
Anonymous Quiz
89%
MyClass obj = new MyClass();
3%
MyClass obj = MyClass();
2%
MyClass obj;
6%
obj = new MyClass();
🥴28🤡9🥱4👎1💩1🗿1
⚡️ Если я слышу, что на C# существует огромное количество сторонних библиотек и не нужно писать своих, я скидываю канал C# Academy.
В канале я научился:
• Создавать высоконагруженные приложения
• Строить правильную архитектуру приложения
• Как обрабатывать сотни тысяч запросов без падения сервисов
• Решать практические задачи с собеседований по С# и .Net
• Узнал огромное количество фич с кодом
Полная маст-хэв папка для С# разработчиков: https://yangx.top/addlist/P5AWf_YPuyBmMjMy
Подписывайся, правильно поданная, структурированная информация, это залог роста – @csharp_ci
В канале я научился:
• Создавать высоконагруженные приложения
• Строить правильную архитектуру приложения
• Как обрабатывать сотни тысяч запросов без падения сервисов
• Решать практические задачи с собеседований по С# и .Net
• Узнал огромное количество фич с кодом
Полная маст-хэв папка для С# разработчиков: https://yangx.top/addlist/P5AWf_YPuyBmMjMy
Подписывайся, правильно поданная, структурированная информация, это залог роста – @csharp_ci
👍6🔥3❤1🤯1🤡1
🔼 Spread element в C# 12: простой пример
Идея похожа на
💬 Уже пользовались?
#dotnet #csharp #tip by Dave Callan
Идея похожа на
...
( три точки) в JavaScript и используется для объединения коллекций.💬 Уже пользовались?
#dotnet #csharp #tip by Dave Callan
👍18
Он был представлен в C# 11. Видимость созданного типа ограничена исходным файлом, в котором он объявлен.
Эта фича помогает избегать конфликтов имен при написании генераторов исходного кода.
💬 Как думаете, в каких кейсах его еще можно применить?
#dotnet #csharp #tip by Oleg Kyrylchuk
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🍌1
🔥 Руководство по асинхронному программированию в .NET от David Fowler из команды ASP.NET
Асинхронное программирование существует уже несколько лет на .NET, но исторически у разработчиков возникали трудности в его «правильной» реализации.
С момента появления async/await в C# 5 асинхронное программирование стало мейнстримом. Современные фреймворки (например, ASP.NET Core) полностью асинхронны, и очень сложно избежать ключевого слова async при написании веб-сервисов.
В результате возникло много путаницы относительно лучших практик для async и того, как правильно его использовать. David Fowler представил рекомендации с примерами плохих и хороших паттернов написания асинхронного кода.
👉 GitHub
Асинхронное программирование существует уже несколько лет на .NET, но исторически у разработчиков возникали трудности в его «правильной» реализации.
С момента появления async/await в C# 5 асинхронное программирование стало мейнстримом. Современные фреймворки (например, ASP.NET Core) полностью асинхронны, и очень сложно избежать ключевого слова async при написании веб-сервисов.
В результате возникло много путаницы относительно лучших практик для async и того, как правильно его использовать. David Fowler представил рекомендации с примерами плохих и хороших паттернов написания асинхронного кода.
👉 GitHub
👍8
По умолчанию он проверяет все правила и объединяет сообщения об ошибках. Более эффективно устанавливать
CascadeMode
либо на уровне класса, либо на уровне цепочки правил, особенно при использовании MustAsync
и асинхронных операций.#dotnet #csharp #tip
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👎3❤1
🛠 Пример модульного теста C# с использованием паттерна Builder
💬 Кто использует паттерн Builder для настройки тестовых данных? В каких ситуациях оправданы дополнительные накладные расходы на обслуживание?
#dotnet #csharp #tip by Dave Callan
💬 Кто использует паттерн Builder для настройки тестовых данных? В каких ситуациях оправданы дополнительные накладные расходы на обслуживание?
#dotnet #csharp #tip by Dave Callan
👍11
Algorithms and Data Structures for OOP With C#
Автор: Theophilus Edet
Год издания: 2023
#csharp #en
Скачать книгу
Автор: Theophilus Edet
Год издания: 2023
#csharp #en
Скачать книгу
👎2
🍄 Ботаника Мира — это ваш гайд по здоровью и энергии без багов и таблеток!
🌿 Природа — это open-source код здоровья!
Травы, грибы и растения — это натуральные "библиотеки", которые могут помочь вашему телу работать как отлаженная система. Нужно только знать, какие "функции" использовать.
💡 Познакомьтесь с каналом "Ботаника Мира"!
Его автор, Ирина, уже 15 лет исследует "природный код", тестирует его на себе и делится только теми "решениями", которые действительно работают.
Подписывайтесь и начните использовать дары природы как эффективный инструмент для улучшения своей жизни:
👉 https://yangx.top/+XmAtGxOtkuQ3MTFi
Код здоровья уже написан природой. Осталось только подключиться!💻🌱
🌿 Природа — это open-source код здоровья!
Травы, грибы и растения — это натуральные "библиотеки", которые могут помочь вашему телу работать как отлаженная система. Нужно только знать, какие "функции" использовать.
💡 Познакомьтесь с каналом "Ботаника Мира"!
Его автор, Ирина, уже 15 лет исследует "природный код", тестирует его на себе и делится только теми "решениями", которые действительно работают.
Подписывайтесь и начните использовать дары природы как эффективный инструмент для улучшения своей жизни:
👉 https://yangx.top/+XmAtGxOtkuQ3MTFi
Код здоровья уже написан природой. Осталось только подключиться!💻🌱
🗿4