<НазадВведение в паттерны проектирования в разработке программного обеспечения
10/3/2022В процессе разработки, неизбежно, возникают повторяющиеся архитектурные решения. Есть два пути работы с такими решениями:
- Принять и дублировать их в коде. Это сделает ваш код нечитаемым, что далеко не самое страшное. Представьте, что у вас есть сто файлов с кодом, в которые вы скопировали какой-то повторяющийся код. Оказалось, что в этом куске, скопированного кода была ошибка. Теперь вам предстоит внести правки в каждый из ста файлов - вот это страшно.
- Использовать один из шаблонов проектирования. Это структурирует код и поможет избавиться от избыточности в архитектуре.
Чтобы не выдумывать определение, я процитирую его из Википедии:
Шаблон проектирования или паттерн (англ. design pattern) в разработке программного обеспечения — повторяемая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста.
Многие паттерны проектирования опираются на принципы ООП, поэтому я напомню эти принципы.
Снова обратимся к Вики:
Объектно-ориентированное программирование — методология программирования, основанная на представлении программы в виде совокупности взаимодействующих объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования.
Выделяют следующие принципы ООП:
- Абстракция. Мы класс людей и у нас есть ногти, это общее важное свойство. У кого-то ногти накрашены, а у кого-то нет - это неважное свойство, его опускают в абстракции. Принцип абстракции отвечает за выделение значимых свойств и методов в отдельный класс, опуская незначимые.
- Инкапсуляция. Представим, что мы описываем класс, отвечающий за движение руки. В нем есть публичный метод -
двигать_рукой
, который доступен для вызова из других классов. С движением руки связаны другие методы, напримердвигать_сустав
илискорость_нейроимпульса
, которые нельзя менять, иначе рука не будет двигаться. Мы делаем их приватными, недоступными для публичного вызова и успешно избегаем изменений. Суть инкапсуляции - возможность сокрытия свойств и методов, предоставляя публичный интерфейс для взаимодействия с классом. - Наследование. Все мы производные от наших родителей. Мы унаследовали от них какие-то базовые свойства, но при этом регулярно расширяем их, формируя новый класс, например в процессе обучения. Суть наследования - возможность создавать дочерний класс от родительского, который может перенять его свойства и методы, расширить или переопределить их.
- Полиморфизм. До того, как создать машину, мы определяем для нее общие свойства и возможности: ехать, тормозить, двигатель, колеса. Все эти свойства отличаются для различных типов машин. Полиморфизм позволяет определить один общий интерфейс для объектов с разной реализацией.
Выделяют основные классификации паттернов проектирования:
- Порождающие(Creational) паттерны позволяют оптимизировать процесс создания объектов через создание абстрактных интерфейсов. Основные шаблоны: Абстрактная фабрика (Abstract Factory), Фабрика (Factory), Строитель (Builder), Одиночка (Singleton), Прототип (Prototype) и другие.
- Структурные(Structural) паттерны формируют сложные структуры, расширяющие возможности одного или нескольких объектов. Основные шаблоны: Адаптер (Adapter), Мост (Bridge), Компоновщик (Composite), Декоратор (Decorator), Фасад (Facade), Заместитель (Proxy) и другие.
- Поведенческие(Behavioral) паттерны позволяют улучшить качество взаимодействия между объектами. Основные шаблоны: Цепочка обязанностей (Chain of responsibility), Команда (Command), Интерпретатор (Interpreter), Итератор (Iterator), Посредник (Mediator), Хранитель (Memento), Наблюдатель (Observer) и другие.
Шаблонов проектирования очень много, но среди них есть такие, которые встречаются чаще других. Вот их мы и начнем рассматривать в следующих статьях.
Самое свежее
Простыми словами о графах
12/18/2022В этой статье мы начнем знакомство с графами, познакомимся с одним из алгоритмов для работы с графами и реализуем граф на языке программирования Rust.
В чем отличие аутсорсинга разработки от аутстаффинга ИТ-сотрудника для разработки?
10/17/2022В этой статье разберемся, что такое аутсорс- и аутстафф-разработка.
UI/UX дизайн: Процесс создания
4/9/2023В этой статье поговорим об основных шагах в процессе создания UI/UX дизайна.
UI/UX дизайн: Введение
3/29/2023В этой статье мы начинаем знакомиться с UI/UX дизайном. Это важнейший этап в разработке любого визуального интерфейса приложений.
Знакомьтесь, Пентест
8/22/2022Начинаем рассматривать один из основных методов оценки безопасности компьютерных систем и сетей на предмет потенциальных уязвимостей - тестирование на проникновение
Сокращаем срок реализации MVP
12/8/2022Разберемся со сроками реализации MVP.
Выбираем язык программирования
3/17/2023В этой статье мы поговорим о выборе языка программирования для изучения
Тестирование концепции MVP
1/9/2023Разбираемся с тем, как не потратить бюджеты на разработку MVP впустую
Проектирование архитектуры приложений: Введение
3/6/2023В этой статье поговорим о процессе создания архитектуры ИТ-решения
Техническое задание: Структура
2/17/2023В этой публикации мы рассмотрим универсальную структуру ТЗ
Неверная оценка стоимости услуг ИТ подрядчика
9/10/2022Сегодня мы поговорим о неверной оценке стоимости разработки ИТ решений. Эта боль - одна из основных для предприятий и стартапов, включая самих ИТ подрядчиков.
Выбираем направление разработки для обучения программированию
2/5/2023В этой статье вы узнаете какие бывают направления разработки, чем они отличаются и в каком больше платят.
Уровни модели OSI
9/6/2022В этой статье мы более подробно рассмотрим каждый из уровней модели OSI
Основные типы архитектуры приложений
3/7/2023В этой публикации разберемся с тем, какие бывают архитектуры приложений
10 способов использования Rust Cargo
2/11/2023В этой небольшой статье я собрал 10 способов использования системы сборки и менеджера пакетов языка программирования Rust
Документирование кода в языке программирования Rust
8/24/2022В этой статье рассмотрим то, как происходит документирование в Rust и рассмотрим очень полезную возможность - написание тестов через документирование.
Знакомство с моделью OSI
8/19/2022В этой статье начинаем рассматривать фундаментальную модель сетевого взаимодействия - OSI
CSS анимация пульсации
8/31/2022Простой пример того, как реализовать анимацию пульсации, используя HTML и CSS
Для чего нужна ER-диаграмма в процессе разработки?
4/28/2023Обсудим в общих чертах, что такое ER-диаграмма и для чего она нужна.
От концепции к MVP
11/18/2022В этой статье вы узнаете, на примере, о том, как перейти от концепции к MVP без лишних усложнений в функционале продукта
Для чего нужны UML диаграммы?
5/23/2023В этой статье мы поговорим о том, что такое UML диаграммы, какие они бывают и где используются
Введение в написание технического задания
1/31/2023Техническое задание - это важная часть процесса разработки. В этой статье начнем погружение в данный вопрос.
Введение в разработку
10/10/2022Сегодня большинство компаний сталкивается с ИТ-разработкой и часто не получают то, чего хотят. В этой статье мы начинаем погружение в процесс создания ИТ-решений.
От идеи к концепции
10/27/2022В этой публикации мы поговорим о том, чем идея отличается от концепции. Сделаем это на примере конкретной цели
Взвешенные графы
12/26/2022В этой статье мы познакомимся со взвешенными графами, алгоритмом Дейкстры и его реализацией на языке программирования Rust.
Зачем VPN бизнесу?
9/27/2022В этой статье мы рассмотрим то, как можно обезопасить доступ к облачным ресурсам предприятия с помощью VPN