Как правильно организовать PHP-код на CodeIgniter? Здравствуйте!
Работаю над проектом на CodeIgniter. Суть проекта - сайт составления определенных планов.
Постараюсь коротко и ясно описать, что уже есть, и где, как мне кажется, я что-то делаю неправильно или не понимаю чего-то.
Есть следующее:контроллер Activities (+модель, + вьюв), который работает с сущностями Activity (план определенного действия юзера IRL - с названием, датой-временем, описанием)контроллер Destinations (+модель, + вьюв), который работает с сущностями Destination (это план визита в какой-то город - с датами и описанием)
Каждому Activity соответствует какой-то один Destination, т.е. каждое запланированное действие происходит в заранее запланированном месте.
На данный момент всё реализовано так: помимо указанных контроллеров созданы классы Destination, Activity, а также Location (это база городов без привязки к планам юзера). Соответственно, объект класса Activity имеет свойство, которое в его конструкторе инициализируется объектом класса Destination. В то же время, объект класса Destination имеет свойство, инициализирующееся объектом класса Location.
В итоге, в контроллере Activities, почти в каждом методе, имеем примерно следующее:// подгружаем класс работы с активностями
$this->load->library('activity');
// подгружаем класс работы с дестинейшенами
$this->load->library('destination');
// подгружаем класс работы с локациями
$this->load->library('location');
Т.е. поскольку в моделях проходят операции с объектами класса Activity, то необходимо подключать библиотеку Activity, а также Destination и Location. В итоге, в каждом методе контроллера дублируются три эти строчки. И мне кажется, что я что-то делаю неправильно :)
Оцените, пожалуйста, грамотность моего решения об организации кода и посоветуйте, как эту организацию можно улучшить.
То есть, если сформулировать вопрос конкретнее:Является ли мой подход к созданию классов Destination, Activity и Location корректным, в смысле вложенности объектов?Является ли мой подход к созданию классов Destination, Activity и Location корректным, в смысле помещения взаимозависимых сущностей в разные библиотеки?Является ли мой подход к подключению библиотек корректным?.UPD:
На сайте с документацией по CodeIgniter нашел некоторые примеры моделей:public function insert_entry()
{
$this->title = $this->input->post('title');
$this->content = $this->input->post('content');
$this->date = time();
$this->db->insert('entries', $this);
}
Здесь мне особо нравится последняя строчка, поскольку, как и отметил @evnuh, модель фактически представляет из себя строку в БД.
В моем же случае, в таблице activities есть поле destination_id (связь с таблицей destinations). А в коде я хотел реализовать это так, чтобы при инициализации Activity одним из ее свойств был объект Destination (уже содержащий всю информацию).
Как это лучше реализовать? Добиться полного соответствия "модель=строка в БД", или в конструкторе модели activities_model инициализировать ее свойство, создав объект класса destinations_model?

21 Авг 2019 в 07:07
191 +1
0
Ответы
1

Для улучшения организации кода в вашем проекте на CodeIgniter, я бы посоветовал следующее:

Организуйте связанные классы (Destination, Activity, Location) в отдельные модели. Таким образом, каждый класс будет отвечать за конкретную сущность и их взаимодействие.

Используйте концепцию автозагрузки библиотек в CodeIgniter. В файле config/autoload.php вы можете добавить классы, которые автоматически будут загружаться при загрузке приложения. Например, вы можете добавить 'activity', 'destination', 'location' в массив $autoload['libraries'], чтобы не повторять их загрузку в каждом методе контроллера.

Если вам необходимо получить все данные о Destination по его ID, я бы порекомендовал в методе модели Activity_model использовать соответствующий метод из модели Destination_model для получения объекта Destination.

При работе с базой данных в моделях, следуйте принципу "модель = строка в БД". Это поможет поддерживать структуру базы данных и кода согласованными.

По возможности старайтесь избегать вложенности объектов в другие объекты в конструкторе класса, это может усложнить структуру вашего кода.

По результатам анализа вашего подхода к организации кода, я бы порекомендовал рассмотреть вышеуказанные пункты для улучшения структуры и согласованности вашего проекта на CodeIgniter. Если у вас возникнут дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь обращаться.

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир