Итак, я пишу тестовый фреймворк для большого сайта и сейчас работаю над моделированием драйвера пользовательского интерфейса.У меня есть UI Session, который абстрагирует ряд эмуляторов и драйверов для браузеров и мобильных устройств.этот объект также содержит информацию о состоянии сеанса браузера, включая историю объектов страницы, в верхней части которой находится текущая страница.Моя проблема в том, что я хочу, чтобы объекты моей страницы лениво загружали данные из браузера (свойства, установленные с помощью методов получения, которые проверяют, извлекли ли мы данные, если нет, является ли это текущей страницей, и если да, извлекают данные избраузер и кэширует его в объекте страницы), но это означает, что им нужен доступ к уровню абстракции, предоставляемому сеансом.
Первой идеей, конечно, было просто прикрепление сеанса на странице, но это создаеткруговая ссылка, что плохо.Я также подумал о том, чтобы попытаться определить несколько интерфейсов для страницы, но я не мог понять, как это будет работать слишком хорошо.Что я действительно хочу, так это иметь возможность перехватывать вызов в сеансе, а затем сеанс перенаправлять вызов вниз на страницу к скрытому получателю, который также принимает сеанс в качестве аргумента, но я не смог выяснить, как это сделать.
Есть ли хорошее решение или шаблон проектирования, который я мог бы использовать здесь, чтобы получить необходимую информацию и доступ там, где она мне нужна, без циклических ссылок или отказа от отложенной загрузки?Я не хочу усложнять интерфейс, заставляя пользователей иногда вызывать методы, а иногда вызывать свойства или члены для доступа к одной и той же информации (идея состоит в том, чтобы скрыть закулисную работу за кулисами и упростить использование инфраструктуры).
У меня действительно есть класс CurrentPage, который все, что он делает, это сохраняет current_page в переменной класса, которая устанавливается сессией при событиях навигации, поэтому я полагаю, что я мог бы сделать current_page волшебным средством доступа global-esque, которое было быединственный способ на самом деле получить данные со страницы и использовать их со специальным интерфейсом и сохранять объект сеанса, но мне это кажется неуклюжим.
У кого-нибудь есть предложения?