Русский
Русский
English
Статистика
Реклама

Не решают ли программисты противоречащие задачи (архитектура кода)

Допустим, у нас есть сайт с товарами. У нас есть метод Product::getProducts возвращает массив товаров.

Затем к нам пришел менеджер и сказал: хотим сделать акции на сайте (скидки, распродажи). В каждой акции будут прикреплены товары. Мы написали метод Action::getProductsByActionId(actionId)

Затем к нам снова пришел менеджер и сказал что нужны еще статьи, к которым прикреплены товары. Добавим метод Article::getProductsByArticleId(arcticleId).

Вы скажите давайте сделаем 1 метод с параметрами. Ок, мы до этого дойдем.

И тут внимание: к нам пришел менеджер и говорит мы хотим иметь возможность отключать товары на сайте. Т.е. необходимо добавить флаг active для товаров, имеющий значение true/false. Товары с флагом false не должны отображаться на сайте.

Итог: нам надо найти в коде все места, которые достают товары и везде добавить логику, чтобы возвращались только товары с флагом active=true. Т.е. надо поправить 3 метода:

Product::getProducts,

Action::getProductsByActionId(actionId),

Article::getProductsByArticleId(arcticleId)

То, что нам надо поправить код не в 1 месте, пораждает ошибки в каком-то месте забыли поправить.

Что же, давайте сделаем так, чтобы у нас было только 1 место, откуда доставать товары. Тогда такой ошибки не будет.

Опять та же ситуация: достаем товары для основного каталога сайта, акций и статей: пишем метод Product::getProducts(actionId = null, articleId = null). Если не задан ни один параметр, то достаются товары как в Product::getProducts раньше, если задан articleId, то достаются товары Action::getProductsByActionId(actionId), и т.д.

Пока остановимся на том моменте, что мы не включали флаг активации товаров, т.е. менеджер с таким требованием не приходил.

Приходит менеджер и говорит: хотим показывать товары в складской программе. Ок. Мы уже поняли, что будет, если мы добавим метод Store::getProducts в какой-то момент доработки программы мы можем просто про него забыть, и не внести в него необходиму логику. По-этому переиспользуем метод Product::getProducts. На складе должны показываться абсолютно все товары (вообще всегда все, это может быть не складская программа, а какая-нибудь админка или другая бек-система для персонала), по-этому мы вызываем этот метод без параметров.

И тут внимание: приходит менеджер и говорит: хотим сделать активные и неактивные товары, флаг active. Чтобы на сайте показывались только активные товары. Ок. У нас есть 1 метод Product::getProducts и мы правим его и добавляем чтобы из него возвращались только товары с флагом active=true.

Мы вносим изменения в единственный метод. И опять нам надо посмотреть везде где этот метод используется. И если в 1 месте мы забыли посмотреть, то это приведет к ошибке на складе пропадает часть товаров. Хотя там по ТЗ должны отображаться вообще все товары. Мы просто забыли, что наш универсальный метод Product::getProducts используется еще и в бек-системах, где флаг active не должен применяться к товарам. Получается при написании 1 метода тоже возникает ошибка.

Вывод

Получается что написать 1 метод это приведет в определенной ситуации к ошибке, и написать несколько методов это приведет в другой ситуации к ошибке. Получается сколько методов не напиши всегда когда-нибудь, при изменении бизнес-требований будет ошибка. Получается программист решает нерешаемую без ошибок задачу. Тогда становится понятно, почему идеального кода не бывает.

Источник: habr.com
К списку статей
Опубликовано: 05.12.2020 14:09:17
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Программирование

Ошибки в коде

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru