Разработка сайта

Мы Makklays. Мы помогаем воплотить идею.

TDD и DDD


Makklays - Статьи image

eye 24

Test Driven Development (TDD) и Domain Driven Design (DDD) - это два подхода в программировании / проектировании.

TDD



TDD - программирование с написанием тестов для тестирования кода, в то время, когда реального кода ещё нет и он появляется в процессе разработки (а тесты для его тестирования уже есть). "TDD - разработка через тестирование", как часто пишут в интернете. Для написания тестов перед написанием кода, требуется от программиста большого опыта разработки, виденье приложения в целом и гибкости мышления. TDD применяется для таких видов тестирования как: функциональное тестирование, юнит тестирование, интегральное тестирование, приемочное тестирование.

Практики программисты, использующие TDD утверждают, что разработка с использованием TDD быстрее, чем без него. Но многие не использующие TDD говорят, что разработка с ним медленнее. У каждого подхода есть свои преимущества) Разработка с TDD уменьшает число ошибок, реализует более предсказуемое приложение и отсутствует излишний код. Также TDD предполагает хорошее знание типов тестирования на практике и их реализаций, другими словами - наличие опыта.


DDD



DDD - предметно-ориентированное проектирование. Образно говоря, проектируют и программируют выделяя определенные наборы и связи кода, а также предметные объекты. DDD более высокий уровень абстракции. Эти абстракции кода называют моделями предметных областей (бизнес логика со связями в приложении и кодом). Элементами DDD являются: ограниченный контекст, сущность, объект-значение, агрегат, службы предметных областей.
Предметно-ориентированное проектирование на практике не ограниченно не чем, но полноценно использует объектно-ориентированное программирование (ООП). Использует наследование, инкапсуляцию, имплементацию, представление в виде методов и классов. И так ещё раз, DDD - это проектирование с использованием его эллементов. Ниже рассмотрим детальнее DDD эллементы:

Сущность - в программировании можно выразить в виде существительного: сотрудники, машины, станки, здания и т.д. У сущностей есть набор действий над ними и возможность добавления новой сущности. На практике в ООП часто сущности выражаются как классы с их свойствами и методами.

Агрегат - специфическая сущность или другими словами, связующая сущность. К Агрегату обращаются другие сущности и получаю необходимые данные или модели поведения. На практике php в ООП, также часто реализуются как классы или набор классов, который может реализовывать определенный шаблон проектирования (например: шаблон проектирования - Фабричный класс).

Объект-значение - это свойства из предметной области, которую проектируют. У них нет реализации в виде класса. Объект-значение описывает свойство-сущности.

Ограниченный контекст - это определенная часть ответственности. В системах на предприятиях, например. Или например, система биллинга крупного банка, может иметь следующие составляющие:
- клиентская база
- система безопасности и защиты
- резервное копирование
- взаимодействие с платежными системами
- ведение отчетности
- администрирование
- система уведомлений
Эти составляющие еллементы одной большой системы. Разные составляющие системы разделяют. А те составляющие, которые выполняют разные функции, но на практике нет возможности разделить называют "Большой ком грязи" в 1999 г. Брайан Фут (Brian Foot) и Йозеф Йодер (Joseph Yoder). Предметно-ориентированное проектирование является конкретное определение контекстов и ограничение моделирования в их границах.

Службы предметных областей - это инструмент для моделирования концепций, которые есть в предметной области, и операции или процессы которых не имеют обозначения или жизненного цикла. Сам по себе термин "служба" в интернете перегружен различными значениями, но в данной тематике, это небольшой класс, который не представляет сущность предмета или сотрудника, а включает в себя какие-то процессы. Использование служб позволяет внедрить несколько моделей, многослойную архитектуру, что вносит зависимость от архитектуры.


BDD



Behavior-Driven Development (BDD) - дословно "проектирование через поведение" — это методология разработки программного обеспечения, являющаяся ответвлением от методологии разработки через тестирование (TDD).

Автор: Александр Кузив