|
0 / 0 / 2
Регистрация: 05.11.2013
Сообщений: 6
|
|
Сделал тестовое задание, ответили что я джун плюс, объясните что я сделал не так16.09.2019, 13:39. Показов 2267. Ответов 3
Недавно попросили сделать вот это тестовое задание https://docs.google.com/docume... sp=sharing, сделал вовремя, отправил, вроде всё корректно работает, может кроме тестов, но ответ меня очень удивил, дословно:
«По коду видно что не было опыта с задачами мидл уровня. Реализация на уровне студенческой работы. На мидл уровень мы не можем взять такого кандидата, ему можно начинать с Jun+. Поэтому отказ пока что, нужен сейчас разработчик чуток сильнее». Ссылка на код https://bitbucket.org/giperilia/smartsatu-test/ Кто- нибудь может объяснить в чем может быть проблема?
0
|
|
| 16.09.2019, 13:39 | |
|
Ответы с готовыми решениями:
3
Что я сделал не так?
|
|
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
|
|
| 16.09.2019, 22:25 | |
|
Контроллеры:
1) Конструкторы дублируются. Если уж делаете какую-то общую логику то можно сделать базовый контроллер, trait, middleware... 2) Хз зачем реквест с респонсом запихали в поля класса. 3) Валидации нет. 4) Всегда отправляете http code = 200. Надо использовать хотя бы основные: 401, 403, 404, 500, 503... Я раньше не понимал зачем, но когда начинаешь настраивать логи и мониторинги, то эти статусы очень помогают. 5) Поля из реквеста берете через магические свойства, тут могут быть конфликты с уже существующими полями в реквесте + IDE наверняка ругается что не находит такие поля. 6) В каждом методе у вас произвольный формат response, это конечно можно держать в голове, но завтра придет человек который этого не знает и сделает по своему, а через неделю вы и сами забудете. Я обычно использую такую библиотеку. Сервис Order: 1) Логика совершенно не читаемая. Даже зная как оно должно быть по ТЗ, в коде этого не видно. 2) Поле $order почему-то публичное. Т.е. в любой момент можно записать туда null и сломать программу. БД: 1) Статусы заказа зачем-то в БД зашили. В задании же не сказано что нужна возможность редактировать статусы через админку. Вы просто сделали лишнюю работу, усложнили код, увеличили нагрузку на БД... 2) Транзакции не использовали. Какой-нибудь косяк в БД и целостность данных нарушена. 3) Cart какая-то сомнительная сущность. Всякие там total_price надо динамически считать. Это быстрей, надежней и место в БД не занимает. 4) Удалять что либо не рекомендуется, даже через 'set null', а cascade еще опасней. Лучше использовать мягкое удаление. Маршруты: 1) Зачем прописывать полный путь к контроллерам? 2) Почитайте чем отличаются post, put, patch и в каких ситуациях их использовать. Тесты: 1) Какой еще clearCache? Все подобное настраивается через phpunit.xml 2) Проверка на не тестинг это зачем? Неужели вы тесты запускаете в каком-то еще окружении, кроме тестового? Хотите прод сломать? 3) Почему бы не использовать http запросы, зачем вручную создавать контроллеры итп? Роуты и мидлвейры тестами не покрыты получаются. 4) Тестите removeFromCart, а вызываете addToCart. Копипаст это зло) 5) Вызывать тест из другого теста не очень хорошая практика. Так их сложней поддерживать. В данном случае можно было сделать Cart через фабрику. 6) Тесты с БД довольно медленные и их сложно поддерживать. Почитайте про моки. 7) Тесты без assert это как-то странно. Ощущение что делали чисто для вида. Прочее: 1) В коде встречаются магические числа, например ->where('status', 1). Пробежался по проекту и так не понял чему соответствует 1. Правильно будет создать Enum и писать ->where('status', CartStatus::New). Еще можно все это в scope вынести, но это уже на любителя.2) Куча всяких IF, да еще и вложенных, сложно читается. Надо рефакторить. 3) Все сделано одним большим коммитом. Не видно ход ваших мыслей. Не понятно где ваш код, а где фреймворка. 4) Консольных команд вообще нету, т.е. 33% задания не сделано. Там наверняка бы сделали ошибку и скопипастили все из контроллеров, вместо того чтобы вынести общую логику в сервисный слой. А вот вижу какой-то ConsoleController, хз что это, в ларавел это делается по другому. 5) С форматированием кода проблемы. Поставьте себе нормальную IDE и настройте автоформатирование. 6) Тут зачем то передаете $order, хотя сервис его не принимает. На этой же строке получаете реквест через функцию request(), а не из поля класса как в остальных местах. В общем вам правильно сказали, у вар уровень джун+. Потенциал есть, просто нужен опытный наставник/команда, чтобы вы увидели как сделать лучше. Самому доходить до этого довольно сложно, особенно на тестовых проектах. Видимо у компании нет пары лишних месяцев чтобы дотянуть вас до нужного уровня. p.s. Рекомендую github.
2
|
|
|
0 / 0 / 2
Регистрация: 05.11.2013
Сообщений: 6
|
||||||
| 17.09.2019, 11:59 [ТС] | ||||||
|
Круто, спасибо за ответ, я процентов 30 из того, что Вы написали сделал бы на существующем проекте, мне сказали что это простое задание на 3-4 часа, то есть им ,по идее, важна была реализация именно со статусами заказа. Я не могу тратить времени на тестовое задание больше, чем день. То есть всякий код вроде
С тестами у меня совсем опыта нет, мне было просто интересно их начать хотя бы с этого тестового задания, спасибо, почитаю то , что Вы написали. Консольные команды работают, они находятся в папке routes, но наверное Вы правы, я должен был их сделать по другому. А как стоило реализовать статусы заказа? Ну я запихнул их в базу потому что тогда это было бы более масштабируемо. В целом мне вообще разонравилась концепция тестовых заданий, потому что по идее это должно быть задание, которое выполняется за 2- 3 часа, а в итоге если не сделал кучу всего, что не входило в список требований, то тестовое задание не проходит.
0
|
||||||
|
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
|
|||||
| 17.09.2019, 13:03 | |||||
|
Хз как вы представляете масштабирование. Даже простое добавление промежуточного статуса уже смещает все остальные статусы. А более сложная логика туда вообще не залезет, например параллельная ветвь. Если в себе уверены, то можно договариваться о каких-то других проверках. Рекомендации с предыдущей работы, готовый код своих проектов, который сможете защитить, просто словами рассказать как бы вы решали такую задачу.
0
|
|||||
| 17.09.2019, 13:03 | |
|
Помогаю со студенческими работами здесь
4
что я сделал не так? что не так сделал? Что я сделал не так?
Что я сделал не так? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|