romy4
invoke [brain]
Политика доступа к методам.
ЗАДАЧА
Не вдаваясь в детали реализации доступа к контроллеру и к обработчикам, интересует некоторый теоретический аспект по вопросу: как гибче и/или надёжнее реализовывать доступ к методам класса-обработчика собитий.
Пускай реализован класс-обработчик какого-то события N, который может быть injected в контроллер. Сам класс содержит в основном защищённые методы, но реализация вызова этого класса из контроллера позволяет к ним обращаться. В данной реализации это сделано для того, чтобы класс нельзя было использовать за пределами контроллера. На выбор есть два варианта решения:
а) разрешается доступ ко всем методам класса (по-умолчанию ко всем), но перегружая механизм вызова контроллера, можно создавать обработчик, который бы разрешали или запрещал доступ к определённым методам.
б) в конструкторе обработчика вызывается метод контроллера, в который передаётся список разрешённых или запрещённых функций класса-обработчика.
Вопрос состоит в том, что лучше выбрать: (а) или (б)?
------------------------------------------
РЕШЕНИЕ
В итоге реализация вышла следующей: осталась возможность перегружать механизм вызова из контроллера (что даёт возможность иметь функции с динамическими именами или просто динамические функции, которые могут быть доступны в то или иное время выполнения), но по-умолчанию список доступных функций теперь пуст и неободимо при инициализации драйвера указывать этот список.
ЗАДАЧА
Не вдаваясь в детали реализации доступа к контроллеру и к обработчикам, интересует некоторый теоретический аспект по вопросу: как гибче и/или надёжнее реализовывать доступ к методам класса-обработчика собитий.
Пускай реализован класс-обработчик какого-то события N, который может быть injected в контроллер. Сам класс содержит в основном защищённые методы, но реализация вызова этого класса из контроллера позволяет к ним обращаться. В данной реализации это сделано для того, чтобы класс нельзя было использовать за пределами контроллера. На выбор есть два варианта решения:
а) разрешается доступ ко всем методам класса (по-умолчанию ко всем), но перегружая механизм вызова контроллера, можно создавать обработчик, который бы разрешали или запрещал доступ к определённым методам.
б) в конструкторе обработчика вызывается метод контроллера, в который передаётся список разрешённых или запрещённых функций класса-обработчика.
Вопрос состоит в том, что лучше выбрать: (а) или (б)?
------------------------------------------
РЕШЕНИЕ
В итоге реализация вышла следующей: осталась возможность перегружать механизм вызова из контроллера (что даёт возможность иметь функции с динамическими именами или просто динамические функции, которые могут быть доступны в то или иное время выполнения), но по-умолчанию список доступных функций теперь пуст и неободимо при инициализации драйвера указывать этот список.