Я самоучка, начинающий программист, поэтому я прошу прощения, если я не прибил программиста на жаргоне.
Я работаю над проектом, в котором я предоставляю данные, которые будут постоянно обновляться, разработчикам, которые по сути создадут инструмент для создания отчетов по запросам к данным.
Кажется, что все участники думают, что им нужно жестко закодировать значения данных (не схему, а сами домены / значения) в программу генерации отчетов.
Например, предположим, что мы отчитывались о персонале; отчет будет разбит на категории с заголовками для каждого отдела, а затем под каждым заголовком отдела будут подзаголовки названий должностей, а затем под каждым подзаголовком будет список сотрудников. Разработчики хотят жестко кодировать отделы и должности. С другой стороны, я бы подумал, что они могут / будут запрашивать эти вещи во время выполнения, сортировать записи по ним и динамически генерировать заголовки отчетов в зависимости от имеющихся значений.
Поскольку список потенциальных значений со временем будет изменяться (например, отделы будут создаваться / переименовываться, будут добавляться новые названия должностей), код необходимо будет постоянно обновлять. Мне кажется, что мы могли бы пропустить шаги обслуживания кода и динамически организовать отчеты.
Поскольку я не разработчик, мне интересно, что мне не хватает. Какие преимущества могут быть у жесткого кодирования значений в таком инструменте? Это типично, как программы разработаны?
Ответы:
Википедия:
Жесткое кодирование считается антипаттерном.
Иногда вы не можете избежать этого, но это должно быть временным.
Единственное преимущество жесткого кодирования - быстрая доставка кода.
источник
В самом деле? Нет возможных допустимых случаев использования?
Хотя я согласен с тем, что жесткое кодирование обычно является анти-паттерном или, по крайней мере, очень неприятным запахом кода , во многих случаях это имеет смысл:
Все еще анти-паттерн ? Так что Over-Engineering ! Это о продолжительности жизни вашего программного обеспечения!
Не то чтобы я говорил, что есть все веские причины, и в целом я бы возражал против жестко закодированных ценностей. Но некоторые могут легко получить пропуск по уважительным причинам.
И не стоит упускать из виду первый, касающийся простоты / YAGNI , думая, что это тривиально: вероятно, нет смысла реализовывать сумасшедший анализатор и средство проверки значений для простого сценария, который очень хорошо выполняет одну работу для узкого варианта использования.
Трудно найти баланс. Иногда вы не предвидите, что программное обеспечение будет расти и работать дольше, чем простой сценарий, в котором оно было запущено. Тем не менее, часто все наоборот: мы перерабатываем вещи, и проект откладывается быстрее, чем вы можете прочитать на Pragmatic Programmer. Вы потратили впустую время и силы на вещи, которые не требовались раннему прототипу.
Это анти-паттерны: они присутствуют в обеих крайностях спектра, и их внешний вид зависит от чувствительности человека, который просматривает ваш код.
источник
Department = ['IT', 'Sales', 'Operations', 'HR', 'Finance']
. Также было бы гораздо сложнее поддерживать массив с жестким кодом в случае введения нового отдела или названия.Бывают моменты, когда все в порядке с жесткими кодами. Например, есть несколько чисел, таких как 0, или одно или различные значения n ^ 2-1 для битовых масок, которые должны быть определенными значениями для алгоритмических целей. Разрешение таких значений настраиваемому не имеет значения и только открывает возможность проблем. Другими словами, если изменение значения только сломает вещи, оно, вероятно, должно быть жестко закодировано.
В приведенном вами примере я не вижу, где было бы полезно жесткое кодирование. Все, что вы упомянули, уже должно быть в базе данных, включая заголовки. Даже вещи, которые управляют презентацией (например, порядок сортировки), могут быть добавлены, если их там нет.
источник
Реализация надежного решения, которое учитывает значения, которые в противном случае могли бы быть жестко запрограммированы, вместо того чтобы конфигурироваться конечными пользователями, требует надежной проверки этих значений. Они вставили пустую строку? Они вставили что-то не числовое, где это должно было быть число? Они делают инъекцию SQL? И т.п.
Жесткое кодирование позволяет избежать многих из этих рисков.
Это не означает, что жесткое кодирование всегда или даже часто является хорошей идеей. Это только один из факторов, которые необходимо учитывать.
источник