Skip to content

VitalyLitvinov74/HR365-test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестовое задание для HR365.ru

Задачей было разработать небольшой модуль, который бы работал с апи транспортных компаний, и по запросу выгружал стоимость доставки груза определенной массы.

Информацию необходимо было предоставить списоком транспортных компаний с соответствующей стоимостью.

Особенности: нужно было сделать "безболезненное" добавление последующих ТК в рабочий код.

Решение

В основном использовались такие паттерны как декоратор, фабрика/фабричный метод.

В решении проблемы я исходил из следующего соображения, мы должны быстро подстраиваться под бизнес, и часто меняющиеся бизнес требования следовательно наш код должен быть легко расширяем, заменяем, при этом без ущерба для архитектуры, и без изменения старой логики, без изменения старого кода. т.е. чтобы соблюдался принцип открытости/закрытости. Для меня это один из самых важных приниципов который позволяет писать устойчивое к ошибкам ПО. В целом код должен соответствовать принципам SOLID, GRASP. Приведу пример:

new WithError ( //Добавляем обработку ошибок
    new WithPrintedSlowCost( //С распечатанной стоимостью
        new SlowPackage( //сделанная как медленное отправление
            $packageObj //дефолтная посылка
        ),
        $factory
    )
)
  • Если бизнесу необходимо будет ввести новый функционал, например, акции, то мы добавим новый декоратор акций, например PromotionPackage (...) и уже в этом декораторе будем определять какую либо акцию.

  • Если нужно будет внести в систему новый тип посылок, то сделаем новый декоратор, например NormalPackage, и опишем его свойства.

  • Если нам нужно убрать поле error из вывода, и вообще отключить вывод всех ошибок достаточно убрать декоратор WithError.

  • Если наоборот необходимо добавить обработку специфических ошибок, например ошибки валидации данных то можем создать еще 1 декоратор, например ValidatedPackage. Но задачу валидации я решаю в своих проектах несколько иначе. Там у меня сама форма валидирует данные я только обращаюсь к ней, и говорю "дай мне провалидированные поля", если в валидации ошибка, кидается исключение и обрабатывается.

Как видим, на вызовы бизнеса мы можем реагировать достаточно быстро. при этом код соответствует (насколько я понимаю) принципам солид.


Рабочее окружение

Чтобы запустить модуль в своей среде необходимо:

  1. Установить Docker-compose
  2. Перейти в дирректорию docker
  3. Создать файл .env (можно скопирвоать из образца)
  4. Добавить в hosts файл домен указанный в .env файле, связать его с ип 127.0.0.1
  5. Запустить docker-compose up -d
  6. Для быстрого доступа к апи, используйте postman https://www.postman.com/solar-robot-131180/workspace/hr365/collection/2231425-4377a6dd-0932-4d68-b9ec-b13101c56e13?action=share&creator=2231425

После установки всех зависимостей модуль будет доступен по указанному вами домену, у меня это hr365.my:83

миграции и пр. применятся автоматически.

About

Тестовое задание для HR365

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published