@Valentine5

Что неправильного в моем коде?

Да днях написал тестовое. Вот, что получилось: https://drive.google.com/drive/folders/1mqeDM1vxQT...
Не дописал, попросил еще немного времени. Мне его не дали, сказали, что в целом код недостаточно профессионально написан. Что я не так делаю?
673b31a7e596f129347977.png
673b31afc9f9c049142497.png
Задача была: загружать через форму файл json со списком команд, а потом сводить эти команды в турнируную таблицу с условиями (гость, хозяин), круг 1, круг 2 и еще 5-6 условий, которые влияют на список. Сколько раз должны встречаться между собой.

Файл json содержит следующие данные:

{
  "teams": [
    { "id": 1, "title": "Ливерпуль" },
    { "id": 2, "title": "Челси" },
    { "id": 3, "title": "Тоттенхэм Хотспур" },
    { "id": 4, "title": "Арсенал" },
    { "id": 5, "title": "Манчестер Юнайтед" },
    { "id": 6, "title": "Эвертон" },
    { "id": 7, "title": "Лестер Сити" },
    { "id": 8, "title": "Вест Хэм Юнайтед" },
    { "id": 9, "title": "Уотфорд" },
    { "id": 10, "title": "Борнмут" },
    { "id": 11, "title": "Бернли" },
    { "id": 12, "title": "Саутгемптон" },
    { "id": 13, "title": "Брайтон энд Хоув Альбион" },
    { "id": 14, "title": "Норвич Сити" },
    { "id": 15, "title": "Шеффилд Юнайтед" },
    { "id": 16, "title": "Фулхэм" },
    { "id": 17, "title": "Сток Сити" },
    { "id": 18, "title": "Мидлсбро" },
    { "id": 19, "title": "Суонси Сити" },
    { "id": 20, "title": "Дерби Каунти" }
  ]
}
  • Вопрос задан
  • 247 просмотров
Пригласить эксперта
Ответы на вопрос 3
delphinpro
@delphinpro Куратор тега PHP
frontend developer
Вы получили простое задание, но это не значит, что код нужно написать абы как, лишь бы результат был =). Элементарные вещи стоило бы использовать,как то: автозагрузка классов, шаблонизация.

0. Код на облачном диске. Почему не гитхаб? Это же удобнее (и плюс в карму=).
1. Инклуд файлов, вместо автозагрузки классов. Написать автозагрузчик - дело пяти минут. Даже одна минута, если использовать composer.
2. Разделение мух и котлет. Код отдельно, html-разметка отдельно. Простейший php-шаблонизатор - это тоже пять-десять минут.
Вот так вообще нельзя писать: echo '<tr><th scope="col">Первый круг</th></tr>';
3. Разделение обязанностей. У вас один класс и файлы загружает, и читает загруженные, и турнирную таблицу рассчитывает и рендерит ее.
4. range(0, 19); Почему 20 элементов? Почему не 30? Откуда это число взялось? Его не должно быть в коде.
5.
$probablePairsArr[] = range(0, 19);
$probablePairsArr = $probablePairsArr[0];

Интересный финт. В чём его сакральный смысл - не ясно. Да и использование локальной переменной здесь не требуется. Можно сразу создавать массив в свойстве класса.

Наверное всё. Больше там ничего нет.
Ответ написан
Как минимум, Вы не вникли в задачу. Я вот в футболе практически не разбираюсь - получив такое задание, я пошёл бы в гугл узнавать, как проводятся матчи в турнирах, когда команда играет на своём поле, а когда - нет. Даже по своим скудным знаниям могу кое-что предположить:
1) Первый круг: команды надо разбить на пары случайным образом. Это shuffle() + array_chunk() . У Вас этого нет.
1.1) Учесть ситуацию, когда команд - нечётное количество. Этого тоже нет.
2) в парах какую-то команду назначить хозяином. Соответственно, в выводе в колонке "Хозяева" должно быть не повторение "Хозяева", "Хозяева", "Хозяева", а имена команд
3) дальше надо смотреть, на каких условиях проводится второй круг, кто в него попадает, на своём поле играют или на чужом..

Получается, из этого:
загружать через форму файл json со списком команд, а потом сводить эти команды в турнируную таблицу с условиями (гость, хозяин), круг 1, круг 2 и еще 5-6 условий, которые влияют на список
Вы выполнили только "загружать через форму файл json", причём зачем-то этот файл сохраняете на диск, а потом немедленно читаете обратно.

Сергей Вам справедливо указал на "разделение обязанностей", то бишь первую букву в SOLID - Single Responsibility Principle. Даже если оставить на месте выверт с сохранением на диск, получается:
  1. Repository - хранилище данных
  2. метод контроллера, отвечающий за приём данных именно в виде сабмита формы и сохранение их Repository
  3. Генератор текущего круга
  4. View, который отвечает за генерацию html-разметки круга,
  5. метод контроллера, который может извлечь данные из Repository, скормить их генератору, получить результат и скормить его во View.


И не факт, что методы из 2 и 5 пункта принадлежат одному классу.
Ответ написан
Комментировать
402d
@402d
начинал с бейсика на УКНЦ в 1988

сводить эти команды в турнируную таблицу с условиями (гость, хозяин), круг 1, круг 2 и еще 5-6 условий, которые влияют на список.


Заглянул в код, думаю прочитаю, что там за 5-6 условий таких. И где ?
Класс генерации у вас занимается чем угодно (контролер,модель,вьюшка), но не умеет "строить турнирнирную таблицу".
Ну почитайте вы о предметной области до написания кода. Эти ваши 5-6 условий помогли бы Вам определить какой алгоритм нужен для построения. Что там команды должны отыграть сезон (каждый должен встретиться с каждым и дважды в роли хозяина и во второй раз как гость). Игры на выезде по хорошему должны стоять так чтобы команды успели доехать, отдохнуть, провести там тренировку.

Или это турнир на вылет. Опять разные варианты. После 1го или 2х поражений.
Там этих уже придуманных схем много и врядли Вам дали уж совсем что-то уникально придуманное.

Но из куцего вашего описания можно предположить, что вылетов после первого нет. Так как 2 круг спланировать заранее было бы не возможно.

Второе. Не знаю в какую контору Вы собеседовались, но стоило поискать какие фреймворки они используют. Или это было прям заданием "писать на чистом PHP". тогда нужно было следовать советам из "правильный путь"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы