Содержание
- 2. SkyEng Skyeng — это онлайн-школа английского языка нового поколения. В школе работают профессионалы, помогающие жителям современных
- 4. Маркетинг Ма́рке́тинг (от англ. marketing «рыночная деятельность») — организационная функция и совокупность процессов создания, продвижения и
- 5. Маркетинг Тратить меньше (на продвижение и предоставление) Получать больше (увеличение аудитории, создание новых продуктов) Деньги!
- 7. Что требуется от разработки Качественно Быстро Дешево
- 8. Пример
- 9. Задачка Надо сделать виджет Дизайн есть! Пользователь оставляет заявку В календаре выбирает дату и время вводного
- 10. Вводный урок Что это?
- 11. Задачка Надо сделать виджет Дизайн есть! Пользователь оставляет заявку В календаре выбирает дату и время вводного
- 13. Как будем делать тех. ревью? От базы/интеграций От api фронтенда От проблемы бизнеса
- 14. И от базы/интеграций и от api Сервис букинга — получить, выбрать, отменить Фронтовое api — получить,
- 17. Чего хочет бизнес от разработки. Качественно — не терять сценарии и лучше понимать бизнес проблемы Быстро
- 18. Что дальше? Опишем сервис Пробуем удовлетворить все 3 потребности Посмотрим со стороны гексагональной архитектуры
- 19. «Allow an application to equally be driven by users, programs, automated test or batch scripts, and
- 20. Hexagonal architecture / Ports and adapters Пользователь Программы Тесты Скрипты Базы Внешние Апи Доп. устройства Приложение
- 21. Попробуем описать сервис — Application Приложение
- 22. class SelfTrialBookingService { ... public function __construct( OperatorsServiceInterface $operatorsService, BookingServiceInterface $bookingService, SelfTrialRepositoryInterface $selfTrialRepository ) { $this->operatorsService
- 23. interface OperatorsServiceInterface { public function holdCall(int $educationServiceId, DateInterval $interval, string $reason): void; public function disableCall(int $educationServiceId,
- 24. interface BookingServiceInterface { public function bookSlot(string $slotId, string $reason): void; public function cancelSlot(string $slotId, string $reason):
- 25. interface SelfTrialRepositoryInterface { public function save(SelfTrial $selfTrial); public function getSelfTrialByEducationServiceId(int $educationServiceId): ?SelfTrial; } Сохранить Получить
- 26. public function startSelfTrialProcess(int $educationServiceId): void { $this->operatorsService->holdCall( $educationServiceId, new DateInterval(self::HOLD_CALL_INTERVAL), 'self_trial' ); $selfTrial = SelfTrial::start($educationServiceId); $this->selfTrialRepository->save($selfTrial);
- 28. public function bookSlot(int $educationServiceId, string $slotId, string $reason): void { $selfTrial = $this ->selfTrialRepository ->getSelfTrialByEducationServiceId($educationServiceId); //Валидация
- 30. public function cancelSelfTrial(int $educationServiceId, string $reason): void { $selfTrial = $this ->selfTrialRepository ->getSelfTrialByEducationServiceId($educationServiceId); //Валидация и DomainException
- 31. Да
- 32. Application Качественно — не терять сценарии и лучше понимать бизнес проблемы Быстро — быстро описывать сценарии
- 33. Насколько это гибко? Вот тут будет кнопка отмены!!!
- 34. Да
- 35. Насколько это гибко?
- 36. public function bookSlot(int $educationServiceId, string $slotId, string $reason): void { $selfTrial = $this ->selfTrialRepository ->getSelfTrialByEducationServiceId($educationServiceId); //Валидация
- 37. + обновление деталей звонка Да
- 38. При чем тут DDD? Ubiquitous Language (единый язык) Можно показать заказчику Если не поймет, покрыть BDD
- 39. Hexagonal architecture / Ports and adapters Пользователь Программы Тесты Скрипты Базы Внешние Апи Доп. устройства Приложение
- 40. Более красивая картинка ;) https://herbertograca.com/2017/09/14/ports-adapters-architecture/
- 41. Зачем Позволяет концентрироваться на домене Выделение бизнес логики Тесты Заменяемые элементы Дисциплина (именование папок, куда что
- 42. Заметки на полях Что с атомарностю (@synchronized)? Почему не ивенты из модели? Где эксепшены?
- 44. Скачать презентацию