Список статей в категории C#

Статьи про один из самых мощных и развитых языков программирования .NET

Lazy Load – Паттерны Объектно-Реляционной логики (PoeAA)

Lazy Load – Паттерны Объектно-Реляционной логики (PoeAA)

В данной статье лениво рассматриваем паттерн ленивой загрузки и возможные его реализации на C#

Как правильно выбрать коллекцию в .NET?

Как правильно выбрать коллекцию в .NET?

.NET Framework содержит множество классов коллекций. Это может затруднить решение, когда какой использовать. Группировка их вместе на основе их свойств может значительно облегчить выбор для конкретного сценария. Именно это мы и сделаем в этой статье

Портирование desktop приложений на .NET Core 3.0

Портирование desktop приложений на .NET Core 3.0

В этой статье мы рассматриваем, как перенести desktop приложение с .NET Framework на .NET Core. Мы выбрали приложение WinForms в качестве примера. Шаги для приложения WPF схожи, и мы опишем, что нужно сделать для WPF по-другому. Мы также покажем, как вы можете продолжать использовать конструктор WinForms в Visual Studio, даже если он находится в стадии разработки и еще не доступен для проектов .NET Core.

Как правильно выбрать название для Unit тестов

Как правильно выбрать название для Unit тестов

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

Принципы объектно-ориентированного проектирования

Принципы объектно-ориентированного проектирования

SOLID принципы:

  • The Single Responsibility Principle​ (SRP) — Принцип единственной обязанности У класса должна быть только одна причина для изменения.
  • The Open Closed Principle​ (OCP) — ​Принцип открытости/закрытости Программные сущности (классы, модули, функции и т. п.) должны быть открыты для расширения, но закрыты для модификации.
  • The Liskov Substitution Principle​ (LSP) — ​Принцип подстановки Лисков Должна быть возможность вместо базового типа подставить любой его подтип.
  • The Interface Segregation Principle​ (ISP) — ​Принцип разделения интерфейсов Клиенты не должны вынужденно зависеть от методов, которыми не пользуются. Интерфейсы принадлежат клиентам, а не иерархиям​
  • The Dependency Inversion Principle​ (DIP) — ​Принцип инверсии зависимости Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Другие принципы:

  • Release Equivalence Principle (REP) — ​Принцип эквивалентности повторного использования и выпуска Единица повторного использования равна единице выпуска.​
  • Сommon Closure Principle (CCP) — ​Принцип общей закрытости Все классы внутри пакета должны быть закрыты относительно изменений одного и того же вида. Изменение, затрагивающее пакет, должно затрагивать все классы в этом пакете и только в нем.​
  • Сommon Reuse Principle (CRP) — Принцип совместного повторного использования Все классы внутри компонента используются совместно. Если вы можете повторно использовать один класс, то можете использовать и все остальные.
  • Acyclic Dependencies Principle (ADP) — ​Принцип ацикличности зависимостей В графе зависимостей между пакетами не должно быть циклов.​
  • Stable Dependencies Principle (SDP) — ​Принцип устойчивых зависимостей Зависимости должны быть направлены в сторону устойчивости.
  • Stable Abstractions Principle (SAP) — ​Принцип устойчивых абстракций Пакет должен быть столь же абстрактным, сколь и устойчивым​

Поведенческие паттерны: Хранитель (Memento) C#

Поведенческие паттерны:  Хранитель (Memento) C#

В данной статье мы рассматриваем Поведенческий шаблон проектирования "Memento" и его реализацию на .NET

Назначение:

Паттерн Хранитель (Memento) — позволяет выносить внутреннее состояние объекта за его пределы для последующего возможного восстановления объекта без нарушения принципа инкапсуляции.

  • Не нарушая инкапсуляции, паттерн Memento получает и сохраняет за пределами объекта его внутреннее состояние так, чтобы позже можно было восстановить объект в таком же состоянии.
  • Является средством для инкапсуляции "контрольных точек" программы.
  • Паттерн Memento придает операциям "Отмена" (undo) или "Откат" (rollback) статус "полноценного объекта".

Когда использовать Memento?

  • Когда нужно сохранить состояние объекта для возможного последующего восстановления;

  • Когда сохранение состояния должно проходить без нарушения принципа инкапсуляции;