Как правильно организовать 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
212 +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 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир