Имеется скрипт, назовем его "многопользовательская система".
На сервере имеется "ядро".
Там же организованы каталоги с пользовательскими конфигами и темплейтами.
У каждого пользователя своя база данных.
схематично выглядит так:
site.com
│
├── app
│ ├─ controllers
│ └─ classes
│
├── user_1
│ ├─ config
│ └─ template
│
├── user_2
│ ├─ config
│ └─ template
│
└── user_n
├─ config
└─ template
Пользовательская версия доступна по субдомену user_name.site.com
user_name.site.com/index.php инклюдит свои конфиги, прописывает пути к своим темплейтам и инклюдит основное приложение из app
Все работает, все довольны.
Вопрос в следующем:
Как наиболее грамотно организовать механизм "индивидуализации" логики системы.
Т.е. иногда необходимо, чтобы для определенного пользователя какой-либо метод класса или контроллер (в общем-то тоже метод класса ControllerName) из центрального приложения вел себя иначе.
Cобственно говоря то, что называется перегрузкой методов, что так застенчиво отсутсвует в php
Пока вижу 2 варианта:
1. При необходимости, у пользователя будет класс IndBaseClass с соответсвующим индивидуальным методом, а центральное приложение, после отработки своего метода, будет проверять, существует ли пользовательский, и если да, то вызывать его.
Минус данного решения - зачастую придется полностью игнорировать результаты работы метода центрального приложения и делать повторные запросы к базе.
2. Сразу проверять, существует ли индивидуальный класс с соответсвующим методом, если да, то вызывать его.
Минус данного решения - дублирование кода. При внесении глобальных изменений (актуальных для всех пользователей) в логику метода центрального приложения, придется
следить, чтобы все соответсвующие индивидуальные методы у пользователей так же были изменены.
_____________
[продано копирайтерам]