Кохана, имитирующая множественное наследование? - PullRequest
1 голос
/ 04 сентября 2011

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

Я использую платформу KohanaТаким образом, архитектурный образец MVC.Вот как я структурировал приложение прямо сейчас.

                      Controller
                          |
              --------------------------
              |                        |
            Public                 Dashboards
        ------|------                  |
        |           |                  |
      Login  Recover Password          |
                                       |
                         -------------------------------
                         |             |               |
                     Students     Universities      Clinics

Таким образом, в публичном разделе пользователи могут либо войти в систему или восстановить свой пароль.

Раздел Dashboard доступен после того, как пользовательвойдя в систему, в зависимости от типа учетной записи пользователя у них будет панель мониторинга для студента, университета или клиники.Теперь из трех типов панелей мониторинга каждая панель будет иметь свой набор контроллеров для действий, которые могут выполнять пользователи.Таким образом, приведенная выше диаграмма на самом деле также представляет наследование контроллера.Контроллер, являющийся частью информационной панели ученика, имеет следующее наследование для одного из своих разделов информационной панели:

Dashboard Section -> Student Dashboard -> Dashboard -> Controller

Теперь все в порядке, если каждый из различных Dashboard Section для каждого типа панели мониторинга уникален.Например, все действия, которые являются частью этого контроллера, требуются только для этого конкретного контроллера.

Однако дело в том, что некоторые типы панелей мониторинга имеют общие контроллеры.Например, каждый тип Dashboard имеет контроллер account.Этот контроллер позволяет пользователю управлять своей учетной записью.Проблема в том, что я не хочу писать один и тот же код контроллера для каждого контроллера account под инструментальными панелями Student, University и Clinic.

Теперь было бы хорошо, если бы каждый контроллер accountможет не только наследовать от соответствующего типа панели мониторинга (Student, University или Clinic), но также может наследовать методы из отдельного класса (возможно, с именем Account_Controller), где я реализую соответствующие действия для учетной записиcontroller.

Конечно, PHP не имеет множественного наследования.Итак, какой будет правильный шаблон проектирования для реализации, чтобы мой код был очень СУХИМ?

Прямо сейчас у меня есть защищенный метод в классе Dashboard с именем account_update, который я просто вызываю в каждом из Account контроллеры для каждого типа приборной панели.Однако это кажется действительно грязным.Кроме того, существуют другие ситуации, когда контроллеры, которые являются общими для панелей мониторинга, будут иметь более одного действия.

1 Ответ

0 голосов
/ 04 сентября 2011

Я думаю, вы ищете общие классы.

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