CodeIgniter: принятие решения о создании библиотеки и помощника в CodeIgniter - PullRequest
44 голосов
/ 02 марта 2010

После некоторой разработки в CodeIgniter я затрудняюсь принимать решения, когда создавать пользовательскую библиотеку, а когда - создавать пользовательский помощник.

Я понимаю, что оба позволяют использовать бизнес-логику и могут повторно использоваться в рамках фреймворка (вызов с другого контроллера и т. Д.)

Но я твердо верю, что тот факт, что разработчики ядра CI отделяют библиотеки от помощников, должна быть причина для этого, и я думаю, это причина, которая ждет меня, чтобы обнаружить и получить просветление.

Разработчики CI там, пожалуйста, посоветуйте.

Я думаю, что лучше привести пример.

Я мог бы иметь

class notification_lib {
   function set_message() { /*...*/}

   function get_message() {/*...*/}

   function update_message() {/*...*/}
}

Кроме того, я мог бы также включить все функции в помощник.

В файле notification_helper.php я включу set_message(), get_message(), update_message() ..

Где в любом случае, он все еще может быть использован повторно. Так что это заставило меня задуматься о том, когда нужно принимать решение о том, когда именно мы создадим библиотеку и помощника, особенно в CI.

В обычном php-приложении (без фреймворка) выбор очевиден, поскольку нет помощника, вам просто нужно создать библиотеку для повторного использования кодов. Но здесь, в CI, я хотел бы понять, как разработчики ядра разделяют библиотеки и помощников

Ответы [ 6 ]

57 голосов
/ 02 марта 2010

Ну, выбор зависит от набора функций или класса. Выбор почти такой же, как у экземпляра класса против статического класса.

Если у вас есть просто группа функций, вам нужно всего лишь создать группу функций. Если эти группы функций совместно используют много данных, то вам нужно создать класс, у которого есть экземпляр для хранения этих данных между вызовами метода (функции класса).

У вас есть много общих или частных объектов для хранения, относящихся к вашим уведомлениям?

Если вы используете класс, вы можете установить несколько сообщений через систему, тогда get_messages () может вернуть приватный массив сообщений. Это сделало бы ее идеальной библиотекой.

28 голосов
/ 02 марта 2010

Принимая решение, я задаю себе вопрос, который, я думаю, также поможет вам. Вопрос в том, предоставляю ли я какую-либо функцию моей структуре или консолидирую?

Если у вас есть функция, которую вы добавляете в свою инфраструктуру, то вы захотите создать для нее библиотеку. Например, проверка формы - это функция, которую вы добавляете в платформу. Даже если вы можете выполнить проверку формы без этой библиотеки, вы создаете стандартную систему проверки, которая является функцией.

Однако, есть также помощник по формам, который помогает вам создавать HTML форм. Большим отличием от библиотеки проверки форм является то, что помощник по формам не создает новую функцию, это просто набор связанных функций, которые помогают правильно писать HTML форм.

Надеюсь, эта дифференциация поможет вам, как и я.

7 голосов
/ 02 марта 2010

Прежде всего, вы должны быть уверены, что понимаете разницу между библиотекой CI и вспомогательным классом. Вспомогательный класс - это все, что помогает любой готовой вещи, такой как array, string, uri и т. Д .; они уже есть, и PHP уже предоставляет для них функции, но вы все равно создаете помощника, который добавляет им больше функциональности.

С другой стороны, библиотека может быть чем-то похожим на то, что вы создаете в первый раз, любое решение, которое не обязательно уже существует.

Как только вы полностью поймете эту разницу, принятие решения не должно быть таким трудным.

3 голосов
/ 06 мая 2013

Помощник содержит группу функций, которые помогут вам выполнить определенную задачу.

Доступные помощники в CI

Библиотеки обычно содержат функции, не относящиеся к CI. Как библиотека изображений. Нечто переносимое между приложениями.

Доступные библиотеки в CI

Источник ссылка

2 голосов
/ 24 августа 2016

Если кто-то спросит меня, как вы поступите, когда придет время создавать помощников или библиотек.

Я думаю, что эти различия:

  • Класс. В двух словах, Класс - это план объекта. И объект инкапсулирует концептуально связанные Состояние и Ответственность чего-либо в вашем Приложении и обычно предлагает программный интерфейс для взаимодействия с ними. Это способствует повторному использованию кода и улучшает удобство обслуживания.
  • Функции: функция - это фрагмент кода, который принимает еще один ввод в виде параметра, выполняет некоторую обработку и возвращает значение. Вы уже видели много функций, таких как fopen (), fread () и т. Д. Они являются встроенными функциями, но PHP также позволяет создавать собственные функции.

Итак, перейдите к Классу , т.е. к библиотекам, если какая-либо одна точка соответствует

  1. глобальную переменную нужно использовать в двух или более функциях или даже в одной, я ненавижу использовать ключевое слово Global
  2. инициализация по умолчанию в соответствии с каждым вызовом или загрузкой
  3. некоторые задачи являются частными для сущности, не являющейся публично открытой, подумайте о функциях, никогда не имеющих общедоступных модификаторов, почему?
  4. функция для работы с зависимостями, т.е. задачи разделены, но для двух или более задач это необходимо. Подумайте о проверке validate_email только для сценария отправки электронной почты для to, cc, bcc и т. Д. все это нужно validate_email.
  5. И, наконец, не в последнюю очередь все связанные задачи, то есть функции должны быть помещены в один объект или файл, это проще для справки и запоминания.

Для помощников: любая точка, которая не совпадает с библиотеками

1 голос
/ 02 марта 2010

Лично я использую библиотеки для больших вещей, скажем, созданную мной FTP-библиотеку, которая работает намного быстрее, чем библиотека CodeIgniters. Это класс с множеством методов, которые обмениваются данными друг с другом.

Я использую помощников для небольших задач, которые не связаны со многими другими функциями. Маленькие функции, такие как декорирование строк, могут быть примером. Или рекурсивное копирование каталога в другое место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...