Как часто вы путешествуете? Мне приходится иногда отправляться в путь на очередную конференцию или выступление и мне очень нравится приезжать на вокзал или в аэропорт за 20-30 минут до отбытия. Обычно я нахожу уютное место, включаю музыку и представляю, что будет происходить сразу, как только я десантируюсь в месте моего назначения.
Этот ритуал, несомненно, проходит под шипение газировки и хруст упаковки с бисквитными пирожными. Их я беру из удобных автоматов, в которые я могу загрузить наличку и получить мои маленькие радости, но больше всего я люблю оплачивать покупки картой.
К сожалению, наш мир сложней, нежели компьютерная программа, и выдача продукта заключается не только в переключение флага “IsOrderComplete”. Автомату необходимо произвести некоторые механические действия для того, чтобы его содержимое было доставлено пользователю в руки или хотя бы в отделение, до которого может дотянуться покупатель.
Бывают ситуации, когда аппарат сделал все необходимые действия, но по той или иной причине товар не был доставлен. Например, при горизонтальном падении он может встать под углом.
В таком случае автомату нужен надежный механизм для контроля наличия выдачи. В разных ситуациях это может происходить по-разному и каждое решение обладает как преимуществами, так и недостатками. А также, в некоторых ситуациях можно выбрать более дешевое средство, если контекст сглаживает недостатки.
Представьте, что вы тот разработчик, который пишет программный код для этой машины. Ваше техническое задание написано на той же салфетке, на которой вам написали сумму вознаграждения за выполненный проект.
Выглядит оно примерно так:
Из неё мы понимаем,что:
- Аппарат должен уметь принимать карты и монеты. Иногда кардридер может быть не подключён, аппарат должен не паниковать при этом;
- Есть разные контроллеры доставки. Их будут разрабатывать другие разработчики. Но их будет много и они будут меняться;
- Покупатель может забрать сдачу;
- Есть разные хранилища, которые доставляют товар до отдела выдачи. Они также разрабатываются другими разработчиками;
Представили всё это? А теперь давайте полностью погрузимся в нашего вымышленного аватара и попробуем решить эту задачу.