Получение сертификата Spryker Foundation Developer

Получение сертификата Spryker Foundation Developer

Проживая уже год в Германии и разрабатывая интернет-магазины на Spryker, я решил получить сертификат. Я долго обдумывал, стоит ли продолжать работу с этим фреймворком, взвешивая все его плюсы и минусы. Я изучил статьи и документацию, необходимые для экзамена, и понимал, что экзамен не будет легким, но я решил его сдать.

В этой статье я хочу поделиться своими наблюдениями, перечислить некоторые вопросы, которые мне попались на экзамене, а также рассказать о преимуществах и недостатках этого фреймворка.

Spryker - это почти готовый интернет-магазин с самым современным стэком технологий (Mysql, Redis, ElasticSearch, PHP8.1). Некоторые называют его фреймворком, но я отношу его к CMS. Это мощный и хорошо настраиваемый инструмент, который может использоваться для создания сложных интернет-магазинов с возможностью внесения значительных изменений. Работая с ним на проекте по созданию B2B магазина, я пришел к выводу, что система очень гибкая и обладает большим функционалом.

Преимущества Spryker:

  • Интернет-магазин очень быстрый. После установки сайт по умолчанию не обращается к базе данных при открытии страницы, что позволяет быстро загружать сайт.
  • Слоистая архитектура - это одна из причин, которая меня привлекла в Spryker. Я активно использовал ее на Laravel, когда работал над другими проектами. Приложение разбито на следующие слои: Glue API (для взаимодействия с магазином через другие приложения), Yves (фронтенд самого магазина), Zed (админ-панель и бэкенд). Фронтэнд часть по умолчанию не взаимодействует с базой данных, а берет данные из кэша. Для получения данных из базы используется посредник - Client. Бэкенд часть также разделена на слои: Persistence (для взаимодействия с БД), Business (там, где хранится бизнес-логика), Presentation (для отображения интерфейса).
  • Использование стандарта Json:API для взаимодействия по API. Это приятно, когда API использует четко определенный стандарт. В своих проектах на Laravel я уже активно его использовал и мне он кажется очень понятным и простым.
  • Большое количество точек расширения. Сайт можно дополнить своим функционалом, не влезая в ядро. На каждую возможную операцию присутствуют так называемые плагины. Например, как только вы добавили товар в корзину, на сам этот процесс можно написать плагин, чтобы совершить какую-то дополнительную операцию.
  • Наличие предустановленных скриптов по форматированию кода, статических анализаторов стандартизирует проект.
  • Всё заведено в докер, при этом можно также установить и на виртуальную машину. Лично я предпочитаю пользоваться Vagrant.
  • Очень простой для понимания код.
  • Хорошо структурированный и просто расширяемый фронтэнд. Для структуризации используется подход Atom.

Конечно же, как и у любого фреимворка, здесь есть свои нюансы:

  • Автоматически генерируемые DTO и модели. Очень странно и непривычно было для меня увидеть, что dto обхявляются в файлах xml и затем из них генерируются консольной командой php классы. До сих пор не смог привыкнуть к такому подходу.
  • Использование в качестве библиотеки для работы с БД Propel. На чём был основан этот выбор, мне не понятно.
  • Часто не актуальная документация, которая редко обновляется. При этом существует большое количество видео и код тоже очень понятный, но чтобы новичку понять общие основы по какому-то пункту, требуется большое количество времени.
  • Не такое развитое сообщество. Если появлась какая-то проблема, её так просто не загуглить.
  • Сложно и проблематично писать тесты. Нет такого большого количества простых и удобных хелперов, как в Laravel. Пока их написание отнимает много времени.
  • На фронте используется шаблонизатор Twig. Отношу это к минусам, чисто мои личные предпочтения.

Теперь к самому процессу сдачи экзамена. Вас будут ожидать 100 вопросов, на сдачу даётся 90 минут. Для успешного прохождения нужно ответить на 70 вопросов.

Вопросы будут такого рода (публикую их на английском языке, в оригинале):

  1. How can you extend a Spryker core class?
  2. Search query debugging.
  3. Where the conversion from Quote to Order happens?
  4. What is a step in the Spryker’s Checkout?
  5. What Component is Spryker's main Dependency Injection mechanism?
  6. What is the major result of the StepEngine?
  7. What Component is Spryker's main Dependency Injection mechanism?
  8. Is the order of QueryExpanders is important?
  9. Why do we use DependencyProviders?
  10. What plugin stacks executes the CheckoutWorkflow?
  11. Why do we divide applications into frontend and backend?
  12. What is the order of configuration loading?
  13. Why do we use Plugins in Spryker?
  14. What kind of component is at the beginning of each pipeline?
  15. What's the difference between `include` and `embed`?
  16. In what layer is the Facade located?
  17. Why do we separate Process and Pipeline?
  18. Where do you define the order of the steps in the checkout?
  19. Where can you add new PHP modules to your project?
  20. What is the default behavior after adding a relationship plugin to the Glue DependencyProvider?
  21. What's the difference between an `atom` and a `molecule`?
  22. What's a `template` in Atomic Design?
  23. Why does Spryker enable you to export the documentation for the current API status quo?
  24. How is data collected during the checkout process?
  25. Is the re-calculated after every change you make to it?
  26. What's BEM?
  27. What stages are there by default in Middleware?
  28. How to efficiently run webpack watchers?
  29. Why should you try to reduce the number of Zed calls to a single one?
  30. What is a TranslatorFunction in Middleware?
  31. What are the main functions for every step in the checkout process?
  32. In what format is the API documentation exported?
  33. Is every stage can pass on its report to the overall import report?
  34. How is the order of results determined?
  35. Where is communication from the frontend applications to the Spryker Commerce OS happens?
  36. What is Jenkins used for in Publish&Synchronize?
  37. What is the synchronize step responsible for?
  38. Where are TransferObjects defined?
  39. What's the correct order of loading for styles, in order to enforce cascading rules, overwrite (and avoid code smells)?
  40. How do you create a database table in Spryker?
  41. How can you most easily debug Workers?
  42. Is CMS pages can have different content per locale and store?
  43. Why do we rely on custom tag `{% define data = {...} %}`?
  44. How does searching through Zed Tables work?

Буду рад ответить на ваши вопросы, а также новым проектам на Spryker!

Популярное

Самые популярные посты

Как быть максимально продуктивным на удалённой работе?
Business

Как быть максимально продуктивным на удалённой работе?

Я запустил собственный бизнес и намеренно сделал всё возможное, чтобы работать из любой точки мира. Иногда я сижу с своём кабинете с большим 27-дюймовым монитором в своей квартире в г. Чебоксары. Иногда я нахожусь в офисе или в каком-нибудь кафе в другом городе.

Привет! Меня зовут Сергей Емельянов и я трудоголик
Business PHP

Привет! Меня зовут Сергей Емельянов и я трудоголик

Я программист. В душе я предприниматель. Я начал зарабатывать деньги с 11 лет, в суровые 90-е годы, сдавая стеклотару в местный магазин и обменивая её на сладости. Я зарабатывал столько, что хватало на разные вкусняшки.

Акция! Профессиональный разработчик CRM за 2000 руб. в час

Выделю время под ваш проект. Знания технологий Vtiger CRM, SuiteCRM, Laravel, Vue.js, Golang, React.js. Предлагаю варианты сотрудничества, которые помогут вам воспользоваться преимуществами внешнего опыта, оптимизировать затраты и снизить риски. Полная прозрачность всех этапов работы и учёт временных затрат. Оплачивайте только рабочие часы разработки после приемки задачи. Экономьте на платежах по его содержанию разработчика в штате. Возможно заключение договора по ИП. С чего начать, чтобы нанять профессионального разработчика на full-time? Просто заполните форму!

Telegram
@sergeyem
Telephone
+4915211100235