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

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

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

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

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) — ​Принцип устойчивых абстракций Пакет должен быть столь же абстрактным, сколь и устойчивым​
0 720 21.01.2018 18:18

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

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

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

Назначение:

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

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

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

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

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

0 372 16.12.2017 22:14

Поведенческие паттерны: Интерпретатор (Interpreter) C#

Поведенческие паттерны:  Интерпретатор (Interpreter) C#

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

Назначение:

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

Когда использовать Паттерн Interpreter:

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

0 594 16.12.2017 11:00

Структурные паттерны: Приспособленец (Flyweight) C#

Структурные паттерны: Приспособленец (Flyweight) C#

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

Назначение:

Паттерн Приспособленец (Flyweight) - шаблон проектирования, который позволяет использовать разделяемые объекты сразу в нескольких контекстах. Данный паттерн используется преимущественно для оптимизации работы с памятью.

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

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

  • в приложении используется большое число очень схожих экземпляров заданного класса;
  • (и) часть состояния объекта является контекстной и может быть легко вынесена во внешние структуры;
  • (и) после вынесения части состояния, все экземпляры становятся одинаковыми и это дает возможность заменить их одним;
  • (и) приложение не проверяет идентичность объектов, т.к. в этом случае все якобы самостоятельные экземпляры являются одним объектом.
0 300 10.12.2017 10:16

Порождающие паттерны: Прототип (Prototype) C#

Порождающие паттерны:  Прототип (Prototype) C#

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

Назначение:

Прототип —​ позволяет создавать новые объекты путем клонирования уже существующих. Ппо сути данный паттерн предлагает технику клонирования объектов.

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

  1. Класс порождаемого объекта определяется в момент выполнения.
  2. Когда желательно избежать наследования создателя объекта. В этом случае, Прототип является конкурентом Абстрактной фабрики.

  3. Когда клонирование объекта является более предпочтительным вариантом нежели его создание и инициализация с помощью конструктора.

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

0 586 03.12.2017 10:18

Структурные паттерны: Мост (Bridge) C#

Структурные паттерны: Мост (Bridge) C#

В данной статье мы рассматриваем структурный паттерн "Мост" и его реализацию на .NET

Назначение:

Мост (Bridge) - структурный шаблон проектирования, который позволяет отделить абстракцию от реализации таким образом, чтобы и абстракцию, и реализацию можно было изменять независимо друг от друга.

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

Когда использовать паттерн мост?

  • Когда надо избежать постоянной привязки абстракции к реализации

  • Когда наряду с реализацией надо изменять и абстракцию независимо друг от друга. То есть изменения в абстракции не должно привести к изменениям в реализации

0 544 26.11.2017 09:07