Я использую CodeIgniter, и у меня есть модель, которая извлекает, скажем, все рецепты, где вы можете установить смещение и предел. Должен ли я распространять эту функцию для получения одного рецепта? Это хорошая практика?Должен ли я выполнять многоцелевые функции?
0
A
ответ
2
Ваша цель должна заключаться в том, чтобы свести к минимуму дублирование кода и максимизировать понятность. Эти два часто расходятся. Вы можете в конечном итоге с минимальным дублированием кода, но иметь 12 необязательных параметров для функции. Итак, некоторые общие советы:
- Рассмотрите возможность упаковки общей функциональности в третью функцию, а затем две функции могут оба вызвать это по мере необходимости;
- Использование объекта или массива аргументов, если функция имеет более 3-4 параметров;
- Уничтожение кода должно быть сведено к минимуму, а не полностью устранено. Иногда самое четкое решение предполагает некоторое дублирование кода;
- Назначение функции или объекта должно быть четким. Если все, что он делает, полностью изменяется в зависимости от параметра, то вы, вероятно, будете путать людей.
С вашего конкретного случая, я полагаю, вы хотите, чтобы в конечном итоге что-то вроде:
function get_recipes($offset, $limit) {
// execute query and get resource
$ret = array();
while ($row = mysql_fetch_assoc($rs)) {
$ret[] = build_recipe($row);
}
return $ret;
}
function get_recipe($id) {
// execute query and get row object
return build_recipe($row);
}
function build_recipe($row) {
// construct a recipe object from the row
}
1
В общем, для ясности, функция должна выполнять одну задачу. Однако «получение N строк» - единственная задача - даже когда N == 1; поэтому я бы сказал, что этот случай квалифицируется, т. е. функция НЕ действительно «многоцелевая»!)
-1
Ответ на этот вопрос прост.
Просто помните, что Worse is better
Смежные вопросы
- 1. Должен ли я выполнять ICloneable?
- 2. Где я должен выполнять свои функции?
- 3. Должен ли я выполнять функции с использованием $ scope или директивы?
- 4. Должен ли я выполнять мои функции как можно более общие?
- 5. Многоцелевые задания
- 6. Должен ли я выполнять функцию NSDecimalCompact() для каждого созданного NSDecimal?
- 7. Почему я не должен выполнять функции в цикле?
- 8. Где я должен выполнять общие функции в Polymer?
- 9. Как я должен выполнять функции тестирования с множеством подфункций?
- 10. Должен ли я выполнять центрирование данных перед применением SVD?
- 11. Должен ли я выполнять свои обещания по JavaScript?
- 12. Должен ли я выполнять сервис для общих зависимостей Docker?
- 13. Должен ли я выполнять единичный тест в разработке Android?
- 14. Должен ли я выполнять все упражнения в K & R?
- 15. Должен ли я выполнять численные вычисления в базе данных?
- 16. Должен ли я выполнять аутентификацию OpenID? Американские/японские пользователи
- 17. Должен ли я выполнять собственные тайм-ауты сокетов TCP/IP?
- 18. Какую аутентификацию Facebook я должен выполнять?
- 19. Должен ли я украсить функцию?
- 20. Должен ли я использовать PHP SQLSRV-функции?
- 21. Должен ли конструктор C++ выполнять настоящую работу?
- 22. Должен ли ActionResult выполнять другие задачи тоже
- 23. Должен ли мой сервлет выполнять Serializable?
- 24. Многоцелевые деревья решений
- 25. Многоцелевые сложные синглтоны
- 26. Vue многоцелевые компоненты?
- 27. Должен ли я установить errno?
- 28. Должен ли я выполнять уравнения в своих запросах или выполнять их локально и обновлять db
- 29. Должен ли я сначала собирать файлы, а затем выполнять задачу или выполнять задачи при сборе?)
- 30. Должен ли я позвонить CoInitialize в функции обратного вызова таймера
На самом деле я объединил get_recipe и get_recipes. если идентификатор установлен, а остальные параметры равны нулю, он возвращает только одно поле и т. д., нормально? – alimango
Я думаю, что это потенциально немного запутанно, но трудно сказать без особых деталей. Как правило, я предпочитаю схему, подобную той, которую я сделал, которая имеет четко названные функции (хотя эти три могут быть названы лучше), которые используют функциональную декомпозицию для уменьшения дублирования. – cletus
Я согласен с cletus в разделении 'get_recipe' с' get_recipes'. Это будет проще для того, кто будет поддерживать ваш код, чтобы понять ваш код. – Randell