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