Я работаю над системой управления движением, и у меня будет как минимум 5 двигателей, каждый из которых будет иметь такие параметры, как «передаточное число», «число оборотов в минуту», «Kp», «Ki», «Kd» и т. Д. при постройке экземпляров моторов.
Мой вопрос к StackOverflow: как мне организовать эти числа? Я знаю, что это, скорее всего, преференциальная вещь, но, будучи новичком в кодировании, я полагаю, что могу получить от вас несколько хороших мнений.
Я сразу вижу три подхода:
Запись в вызове конструктора, либо через переменные, либо через числа — PROS: ограниченное кодирование, может быть реализовано таким образом, что его легко изменить, но, возможно, сложнее, чем в # define
Используйте # define для достижения аналогичных целей — PROS: наименьшее количество кода, легко изменить (при условии, что вы хотите посмотреть на исходный код)
Загрузите файл (возможно, с именем «motorparameters.txt»), загрузите параметры в массив и заполните из этого массива. Если бы я действительно хотел, я мог бы добавить подход GUI для изменения этого файла, а не вручную. — PROS: проще всего изменить без погружения в исходный код.
Эти параметры могут со временем меняться, и, хотя в компании есть другие кодеры, я бы хотел оставить их так, чтобы их было легко настроить. Кто-нибудь из вас видит конкретное преимущество #define против переменных? У меня уже есть файл «constants.h», в который я мог бы легко добавить #defines, или я мог бы добавить переменные рядом с вызовом конструктора.
Похоже, что мне нужно сделать следующее:
Напишите гибкий моторный класс, который может обрабатывать любые значения (в пределах разумного), даже если в настоящее время вас интересует только 5 различных наборов значений.
Определите компонент, который возвращает «правильные» значения для 5 двигателей в вашей системе (или который строит 5 двигателей для вашей системы, используя «правильные значения»)
Первоначально реализовать этот компонент, чтобы использовать некоторые жестко закодированные значения из файла заголовка
Сохраните возможность замены этого компонента в будущем реализацией того же API, но он считывает значения из файла ресурсов, текстового файла, файла XML, взаимодействия графического интерфейса с пользователем, из Интернета, отправляя запросы оборудованию для выясните, какие двигатели, по его мнению, имеют, что угодно.
Я говорю это на основе того, что вы минимизируете ожидаемое усилие, добавляя точку настраиваемости, где вы подозреваете, что вы захотите (чтобы избежать большой работы, когда вы измените ее позже), но реализуете простейшую вещь, которая удовлетворяет вашим текущим определенные требования.
Некоторые люди могут сказать, что на самом деле не стоит вводить (а), чтобы определить компонент, лучше просто построить 5 двигателей в main()
(б) использовать константы из заголовочного файла, лучше просто ввести числовые литералы в main()
, (Б) люди широко презираются как разносчики «магических констант» (что не означает, что они обязательно неправильно относительное общее время программирования со стороны разработчика и будущих сопровождающих, они просто, вероятно,), и (а) люди разделяют мнение. Я склонен считать, что определение такого рода вещей занимает несколько минут, поэтому мне все равно, стоит оно того или нет. Загрузка значений из файла включает указание формата файла, о котором я мог бы пожалеть, как только столкнусь с реальный Причина для настройки, так что лично я не могу быть обеспокоен этим, пока не возникнет требование.
Есть принцип, известный как ЯГНИ (Тебе это не нужно) который говорит: сначала делай самое простое, а потом меняй его, когда (если) твои требования расширятся.
Основная идея состоит в том, чтобы отделить части вашего кода, которые будут отличаться от тех, которые не будут. Чем более вероятно что-то изменить, тем больше вам нужно, чтобы его было легко изменить.
Если вы создаете коммерческое приложение, в котором сотни или тысячи пользователей будут использовать множество различных двигателей, возможно, имеет смысл кодировать пользовательский интерфейс и сохранять данные в файле конфигурации.
Если это код разработки, и эти параметры вряд ли изменятся, то, вероятно, стоит добавить их в файл #defines в вашем файле constants.h.
Номер 3 — отличный вариант, если у вас нет проблем с безопасностью или IP. Каждый раз, когда вы или кто-то другой касается вашего кода, вы вводите возможность регрессий. Сохраняя ваши параметры в текстовом файле, вы не только облегчаете себе жизнь, но и сокращаете количество возможных ошибок в будущем.