Для графического изображения моделей потоков данных существует две нотации: одну разработали Крис Гейн и Триш Сарсон, а другую — Том де Марко и Эд Йордан.
Ни одна из них не лучше другой, но нотация Гейна-Сарсона используется более широко, поэтому в этом уроке вы познакомитесь с ней подробнее.
Процесс
В нотации Гейна-Сарсона каждый процесс имеет:
- номер,
- имя (фраза с глаголом и существительным),
- как минимум один выходной поток данных и/или как минимум один входной поток данных.
Процесс изображается на диаграмме в виде прямоугольника с закруглёнными краями. Примерами процессов могут быть обработка входных документов и выпуск отчётности, редактирование данных пользователя и прочие.
Диаграмма контекстного уровня — исключение, в котором вся система рассматривается как процесс, имя которого соответствует названию системы, а номер всегда будет нулевым.
Построим диаграмму сервиса по заказу такси. На логическом уровне мы выделим процессы, которые будут происходить в системе: регистрация пассажира, заказ поездки и отчёт о поездке.
Внешняя сущность
На диаграмме внешняя сущность отображается прямоугольником с именем (существительное) внутри него. Внешними сущностями могут быть заказчик, клиент, склад, другая система и прочие.
В примере с такси внешними сущностями могут быть пассажир, который использует систему для заказа машины, водитель, который использует сервис для выполнения заказа, и банк, с помощью которого происходит оплата поездки. Все они находятся вне рамок системы, но влияют на неё, являясь источниками или потребителями данных.
Хранилище данных
Хранилище данных в нотации Гейна-Сарсона отображается в виде неполного прямоугольника (без одной стороны) с ярлыком. У каждого хранилища данных в DFD есть номер с буквой D (Data), который указывается на «ярлыке», имя (существительное), один или несколько входных или выходных потоков данных.
Хранилищами данных могут быть ящик в картотеке, таблицы в базе данных, жёсткий диск.
В примере с системой заказа такси может понадобиться хранить данные о пассажирах, поездках и произведённых платежах для оплаты поездок, поэтому на диаграмме нужно отобразить три хранилища данных.
Поток данных
У каждого потока данных есть имя (существительное, отражающее набор передаваемых данных), описание и как минимум одно «подключение» к какому-либо процессу. То есть каждый поток данных должен входить и/или выходить из процесса. Поток данных на диаграмме отображается в виде направленной стрелки, над которой указывают имя. Если одинаковые потоки данных двигаются в обе стороны, стрелка может изображаться в двух направлениях.
Потоками данных могут быть информация, передаваемая по кабелю между двумя устройствами, пересылаемые по почте письма, сообщения между двумя микросервисами и так далее.
Рассмотрим пример процесса регистрации нового пользователя. Для того чтобы зарегистрироваться в системе, пользователю нужно ввести свои данные, а системе переместить их в хранилище и отправить ответ о статусе регистрации пользователю. Элементы, которые будут присутствовать:
- Внешняя сущность — «Пользователь».
- Процесс — «Зарегистрировать пользователя».
- Хранилище данных — «Пользователи».
- Потоки данных — «Данные пользователя», «Статус регистрации» и «Пользователи». Поток «Пользователи» будет изображаться в виде двунаправленной стрелки, так как одинаковый набор данных будет передаваться из процесса в хранилище данных и обратно.
На диаграмме это будет отображаться так:
Для построения полной диаграммы нужно подумать обо всех функциях (процессах), которые система будет выполнять. Она позволяет пассажиру:
- зарегистрироваться;
- заказать поездку;
- получить отчёт о поездке.
Для поездки необходимо, чтобы пассажир сделал заказ, а водитель принял его. После выполнения заказа деньги автоматически спишутся с карты клиента. Клиент также может отменить поездку, поэтому требуется обмен статусами между клиентом и системой.
Контекстная диаграмма потоков данных Отобразим на диаграмме логического уровня процессы и потоки данных, предусмотренные системой по заказу такси, собрав воедино все элементы.
Логическая диаграмма потоков данных