Найти тему
Посетитель C#
Паттерн "Посетитель" позволяет добавлять новые операции к объектам без изменения их классов. Это достигается за счет введения посредника (посетителя), который выполняет операции над объектами. Вместо того чтобы вызывать методы у объекта напрямую, мы передаем ему посетителя, который может быть специализирован для выполнения определенных действий. Этот паттерн особенно полезен, когда у вас есть множество классов, которые должны реагировать одинаково на некоторые действия, но при этом имеют разные внутренние структуры и поведение...
8 месяцев назад
Шаблонный метод C#
Паттерн "Шаблонный метод" является поведенческим паттерном проектирования, который определяет скелет алгоритма, распределяя ответственность за некоторые его шаги на подклассы. Это позволяет подклассам переопределять шаги алгоритма, не меняя его общую структуру. Паттерн "Шаблонный метод" предлагает разделить алгоритм на последовательность шагов, описать эти шаги в отдельных методах и вызывать их в одном шаблонном методе друг за другом. Это обеспечивает гибкость в изменении некоторых частей алгоритма,...
8 месяцев назад
Стратегия C#
Паттерн "Стратегия" (Strategy) — это поведенческий шаблон проектирования, который определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми. Паттерн позволяет выбирать алгоритм во время выполнения программы. Это достигается за счет определения интерфейса для всех поддерживаемых алгоритмов и реализации каждого из них отдельно. Клиентский код может использовать эти алгоритмы без знания о конкретных реализациях, что обеспечивает гибкость и расширяемость системы...
9 месяцев назад
Состояние C#
Паттерн "Состояние" (State) является поведенческим паттерном проектирования, который позволяет объекту изменять своё поведение во времени, сохраняя при этом его интерфейс неизменным. Паттерн "Состояние" позволяет объекту переключаться между множеством состояний, каждое из которых определяет поведение объекта. Описание Паттерн "Состояние" используется, когда поведение объекта зависит от его внутреннего состояния. Вместо того чтобы поместить всю логику состояния внутрь объекта, мы отделяем её в отдельные классы, называем их "состояниями"...
9 месяцев назад
Наблюдатель C#
Паттерн "Наблюдатель" (Observer) — это поведенческий шаблон проектирования, который позволяет объектам следить за изменениями другого объекта и реагировать на эти изменения. Он особенно полезен в ситуациях, когда один объект зависит от состояния или поведения другого объекта, но при этом хочет оставаться независимым от его внутренней реализации. Описание Основные компоненты: Процесс работы: Применение в общем виде Паттерн "Наблюдатель" широко используется в различных областях...
10 месяцев назад
Memento C#
Описание Паттерн Memento (Хранитель) — это поведенческий шаблон проектирования, который позволяет сохранять и восстанавливать внутреннее состояние объекта без нарушения инкапсуляции. Этот шаблон особенно полезен в ситуациях, когда необходимо отменить изменения или вернуться к предыдущему состоянию объекта. Реализация в общем виде Memento...
10 месяцев назад
Поговорим о ConfigureAwait ч.5
Могу ли я использовать Task.Run, чтобы избежать использования ConfigurationAwait(false)? Да. Если вы напишете: тогда a ConfigureAwait(false) в этом SomethingAsync() вызове будет nop, потому что переданный делегат Task.Run будет выполнен в потоке пула потоков, без пользовательского кода выше в стеке, так что он SynchronizationContext.Current вернет null. Кроме того, Task.Run неявно используется TaskScheduler.Default, что означает, что запрос TaskScheduler.Current внутри делегата также вернет Default...
10 месяцев назад
Поговорим о ConfigureAwait ч.4
Что делает ConfigurationAwait(false)? Метод ConfigureAwait не является особенным: он не распознается каким-либо особым образом ни компилятором, ни средой выполнения. Это просто метод, который возвращает структуру (ConfiguredTaskAwaitable), которая обертывает исходную задачу, для которой она была вызвана, а также указанное логическое значение. Помните, что его await можно использовать с любым типом, который демонстрирует правильный шаблон. Возвращение другого типа означает, что когда компилятор обращается...
11 месяцев назад
Поговорим о ConfigureAwait ч.3
Как SynchronizationContext и TaskScheduler связаны с await? Рассмотрите возможность написания приложения пользовательского интерфейса с расширением Button. Нажав на кнопку Button, мы хотим загрузить некоторый текст с веб-сайта и установить его как Button's Content. Доступ к Button должен быть возможен только из потока пользовательского интерфейса, которому он принадлежит, поэтому, когда мы успешно загрузили новый текст даты и времени и хотим сохранить его обратно в Button, Content нам нужно сделать это из потока, которому принадлежит элемент управления...
11 месяцев назад
Поговорим о ConfigureAwait ч.2
Что такое планировщик задач? SynchronizationContext — это общая абстракция для «планировщика». Отдельные фреймворки иногда имеют свои собственные абстракции для планировщика, и System.Threading.Tasks это не исключение. Когда Tasks поддерживаются делегатом, поэтому их можно поставить в очередь и выполнить, они связаны с файлом System.Threading.Tasks.TaskScheduler. Точно так же, как SynchronizationContext предоставляет виртуальный Post метод для постановки в очередь вызова делегата (с последующим вызовом...
11 месяцев назад
Поговорим о ConfigureAwait ч.1
В .NET добавили async/ await к языкам и библиотекам более семи лет назад. За это время он распространился как лесной пожар не только по всей экосистеме .NET, но и был воспроизведен во множестве других языков и платформ. Также было замечено множество улучшений в .NET с точки зрения дополнительных языковых конструкций, использующих асинхронность, API, предлагающих поддержку асинхронности, и фундаментальных улучшений в инфраструктуре, которая делает async/ awaitтикает (в частности, улучшения производительности и возможности диагностики в ...
11 месяцев назад
Посредник C#
Архитектурный паттерн Посредник (Mediator) в C# предназначен для уменьшения связанности между компонентами системы, позволяя им общаться друг с другом через посредника, вместо прямого взаимодействия. Этот паттерн упрощает коммуникацию между объектами, повышает модульность и масштабируемость системы, а также упрощает поддержку и модификацию кода в будущем. Паттерн Посредник определяет объект, который инкапсулирует взаимодействие набора объектов. Посредник обеспечивает слабую связанность, предотвращая явные ссылки объектов друг на друга, и позволяет изменять их взаимодействие независимо...
11 месяцев назад