Ответ на все эти вопросы: зависит . Лично я считаю, что именно гибкость делает программирование таким интересным.
Как правило, я стараюсь, чтобы все мои классы содержали менее 500-700 строк кода, а функции - менее 20 строк кода. Если мой класс становится больше, я обычно начинаю новый. С учетом вышесказанного, контроллеры, с которыми я в порядке, больше, так как проверка формы и логика ответов могут занимать довольно много строк.
Итак, давайте рассмотрим пример: система аутентификации пользователя
У меня будет контроллер, содержащий функции для входа в систему, регистрации, забытого пароля и активации; другой контроллер для управления пользователями, который содержит функции для удаления, запрета, отмены, активации и создания новых пользователей; а затем еще один контроллер для профиля пользователя, который содержит функции для редактирования их данных и изображения профиля.
Теперь, когда системы управления пользователями и аутентификации, как правило, многократно используются, библиотека лучше, чем использование модели или моделей; но скажем, мы используем модели. Я хотел бы иметь модель для каждого из контроллеров, описанную в вышеупомянутом параграфе, а затем модель для общих «полезных» функций, таких как проверка, вошел ли пользователь в систему .etc.
В целом
Вы должны решить:
- Сколько кода слишком много для контроллера / модели?
- (с указанным выше) Ожидается ли рост моего кода? Если это так, то я должен учитывать, сколько при определении (1).
- Как мне группировать функции? Для этого имейте в виду разделение интересов, например, функции аутентификации не должны группироваться с функциями резервного копирования базы данных.
- Я слишком много делаю в конкретной функции / модели? Если да, то как мне отделить эти элементы, чтобы я соответствовал принципам СУХОЙ (скорее всего, какой-то код можно использовать в другом месте, хотя его функциональные возможности по своей сути различны).
- (с выше) Если этот код действительно так полезен в другом месте, я должен превратить его в библиотеку / помощник?
(и есть множество других вещей, которые нужно учитывать).
Я думаю, что важно понимать (особенно как новичок), что ваш стиль кодирования, а также используемые вами "методы" и навыки организации будут постоянно развиваться, как и ваш код. Хотя приятно видеть, что вы хотите изучить лучшие практики - многое из этого будет зависеть от того, чего вы хотите достичь с помощью приложения , и от того, какой уровень мастерства вы используете в своей карьере программиста. Попробуйте взглянуть на более широкую картину и поймите, что через год или два, когда вы снова посмотрите на свой код, вы, вероятно, скажете: «О чем я тут вообще думал?».
Дополнительное примечание: вы можете исследовать подход ORM к моделям (Laravel и множество других фреймворков используют его), но CI использует более «любой» подход практически ко всему. Если принуждение работать определенным образом заставляет вас чувствовать себя в большей безопасности, вы можете изучить другие «более продвинутые» и «более новые» фреймворки.