ReenExeCodeReview / WebCodeReview

MIT License
0 stars 0 forks source link

Код нужно писать в одном стиле

В PHP сообществе существует два стандарта оформления PSR-1 и PSR-2

Переводы на русский PSR-1 и PSR-2

Есть инструменты для проверки стандартов которые легко подключить в проект через composer

На стыке JS & HTML

Пример:
    <ul id="js-basket-list">
        <li class="js-basket-item" data-basket-id="17">
            ...
        </li>
    <ul>

Лучшие практики

Явные

1 Операции фильтрации данных (иногда обработки) лучше делать на стороне БД

$sql = <<<'SQL'
    SELECT DISTINCT `status`
    FROM ...
SQL;

$list = fetchAll($sql);

Вместо

$sql = <<<'SQL'
    SELECT `status`
    FROM ...
SQL;

$list = array_unique(fetchAll($sql));

2 Использование встроенных функций

if (strcasecmp($requestAlias, $storedAlias) === 0) {
    ...
}

вместо

if (strtolower($requestAlias) === strtolower($storedAlias)) {
    ...
}

3 Тонкий контроллер, толстая модель

Код нужно писать в сервисах или моделях, а контроллер уже использует их

Плохие запахи

1 Запросы к БД в цикле

        $result = [];
        foreach ($baskets as $basket) {
            $result[$basket->getId()] = fetchProduct($basket->getProductCode());
        }

Лучше:

        $productCodes = [];
        foreach ($baskets as $basket) {
            $productCodes[] = $basket->getProductCode();
        }

        $result = fetchProducts($productCodes);

2 Лишние конструкции else | elseif | else if

public function iHaveCookie($nameCookie)
{
    if ($this->getSession()->getCookie($nameCookie)){
        return true;
    } else {
        throw new \Exception("Cookie with name $nameCookie not found");
    }
}

Лучше:

public function iHaveCookie($nameCookie)
{
    if ($this->getSession()->getCookie($nameCookie)){
        return true;
    }

    throw new \Exception("Cookie with name $nameCookie not found");
}

В больших функциях - это ранее возвращение результата early return

3 Перемешаны методы и свойства с разными областями видимости

    private function resolve()
    {
        ...
    }

    public function find()
    {
        ...
    }

    private function findByCode()
    {
        ...
    }

    private $id;

4 Двойные проверки

if (isset($variable) && $variable) {
    ...
}

правильнее заменить

if (!empty($variable)) {
    ...
}

5 Проверки с двойным отрицанием

$variable = getSomeThing();
if (!empty($variable)) {
    ...
}

правильнее заменить

$variable = getSomeThing();
if ($variable) {
    ...
}

Приведение значений к "bool" прямое, через конструкции или функции

Все свойства и константы нужно объявлять сверху Дальше public методы Дальше protected и private

Покрытие тестами

Основной функционал нужно покрывать тестами и учитывать это время при обсуждении задачи и оценке

Пример для интернет магазинов - это добавления в корзину и оформления заказа

Контроль версий

В коммитах нужно размещать ссылку на задачу: Примеры:

Можно дополнительно глянуть: