GithubHelp home page GithubHelp logo

beejee-job-challenge's Introduction

Демо: http://nur-beejee.zzz.com.ua/

Уважаемая команда BeeJee, перед проверкой данного тестового задания прошу учесть информацию ниже.

Перед выполнением задания, мною был задан вопрос: Нужно вообще всё сделать на PHP? Включая построение таблицы задач, пагинацию, сортировку по полю, валидацию? Или же эти вещи надо/можно делать на JS, а на PHP сделать только бэкенд - получение запроса, сохранение задачи в БД, отправка ответа.

На что был получен ответ: Построение таблиц вы можете реализовать на фронтенде. Однако пагинация и т.д. должна быть однозначно на беке. Ведь не имеет смысла тянуть все данные из бд и обрабатывать их на фронте. А если их будет тысячи и больше? С другой стороны- если вы реализуете корректное апи и работу с бд- то можно использовать ваш подход.

Я сделал по второму предложенному вами варианту: реализовал корректное API в духе REST, и корректную, четкую работу с БД. Считаю данный подход максимально современным, а также в наибольшей мере демонстрирующим мои знания.

Другие мои комментарии после выполнения задания:

  • В БД использованы индексы, и аккуратно подобраны типы значений. Используются индексы Foreign Key, для консистентности.
  • Алгоритм проверки пароля приближен к реальному, основан на генерации хеша и сравнении с хранимым.
  • Приложение выполнено по правилам REST: используются методы GET, POST, PATCH, DELETE. Приложение чётко разделено на Frontend и Backend (папка server/).
  • Для проверки исходного кода фронтенда, пожалуйста смотрите в папку src/, а не public/out/ (так как используется TypeScript).
  • (на что потратил 70% времени) Фронтенд сделан без библиотек и фреймворков, но я простыми средствами сделал что-то вроде React+Redux. В итоге получилась такая же надежная система в духе Unidirectional Data Flow. Из минусов: не мог себе позволить тратить время на правильный Change Detection, поэтому при изменении состояния (state) ре-рендерятся все компоненты.
  • JQuery мною не используется (только Vanilla JS), и я бы не подключал его вовсе, но к сожалению он нужен для работы модального окна Bootstrap.
  • Используются менеджеры зависимостей Composer и npm, система импорта классов PSR-4. Для копирования статических ассетов из папки node_modules/ используется Gulp.
  • Попробуйте пагинацию - работает хорошо при любом количестве задач и страниц. То же самое с сортировкой.
  • Экспортированный SQL находится в файле anurbol.sql в корне проекта.
  • В коде почти нет комментариев, так как считаю что и нет сложных для понимания вещей. Более-менее сложная часть - самодельный фронтенд-движок, но для среднего TS/JS-разработчика, на мой взгляд, код сам себя объясняет
  • Уже много после окончания задания, подумал, что, возможно, формальным упущением моей реализации является отсутствие M/Model в MVC, если подразумевается такая модель как например в Laravel/Kohana/CodeIgniter и т.д. Честно говоря просто забыл про этот момент, фокусируясь на выполнении тестового протокола. Но! В самом начале хотел сделать полноценный ORM с моделями Task/User/Session но в виду относительной простоты задания и лишь одним Relationship (Session::HasOne(User)) решил что это оверинжиниринг (цитата из задания: "Этому приложению не нужна сложная архитектура, решите поставленные задачи минимально необходимым количеством кода").

beejee-job-challenge's People

Contributors

anurbol avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.