Что следует иметь в виду при проведении такого рода рефакторинга ...
Обычно в моих моделях будут функции Model-> getSomethingAndSomethingElse.
Эти функции являются общедоступными и предназначены для вызова в качестве замены для выполнения сложных (или любых) вызовов поиска из контроллера.
Затем я обычно собираю в модели небольшую коллекцию частных функций.
В вашем случае у меня может быть что-то вроде ...
Студент-> getStudentAssigmentsWithQuestions
, который затем вызывает некоторые частные функции, т.е.
Student-> getStudent, который может вызывать Student-> joinStudentAssignment, который, в свою очередь, может вызывать Assignment-> joinAssignmentQuestion и т. Д.
Префиксы двойного подчеркивания были удалены, так как уценка хочет выделять жирным шрифтом из-за них. Если вы используете php5, подчеркивание не так уж важно в любом случае, если вы используете ключевые слова "private" или "protected".
По сути, я использую открытый метод в качестве контейнера для группы очень специфических построений запросов или частных построений ассоциаций в моделях. Это позволяет мне получить API, который возвращает сложные данные, но я строю запрос или набор результатов (в зависимости от типа данных, взаимосвязей или сложности запроса) из небольших частей - которые в идеале могут быть предназначены и использоваться в более чем один публичный вызов функции.