Как реализовать работу с Page Component Object с наименьшим дублированием и простой поддержки?
Cтрою страницы из блоков, обычным объявлением агрегируемых страниц в виде полей. Переходы межу страницами идут иногда через обобщенные страницы (делегированием), иногда напрямую; методы страниц возвращают либо себя, либо другую страницу (Flow).
Но как быть с незначительными отличиями некоторых страниц/блоков (и в тоже время полной идентичностью некоторых других страниц) для авторизованных и неавторизованных пользователях? Пыталась применить паттерн Стратегия, но так и не поняла куда девать класс контекст и как его использовать, ну и в самих алгоритмах для авторизованного и неавторизованного юзера мне не понятно что написать. Сейчас у меня обычные if/else и метод IsLogged() (+ методы GoToLogin(AccountData accountData), GoToLogout), а также по-сути некоторые блоки имеют замену для авторизованных пользователей (например есть HeaderForLoggedUser с кнопками "Logout", "Cart", "My Profile" и его аналог HeaderForUnLoggedUser, у которого есть только кнопка "Sign in" ). + мне надо как то написать тест на проверку разной цены на странице выдачи товаров и на странице товара для пользователей разных категорий и совсем неавторизованных.
Также для авторизованных пользователей может быть на пару страниц-блоков больше на агрегирующей странице, чем для неавторизованных.
Как это все лучше реализовать? Пыталась переделать пример с наследованием от AuthTestBase или просто TestBase, не помогло, потом начала смотреть в сторону двух разных предков AuthPageBase и PageBase, но как тоже тупик. Вариант с множеством классов для страниц кажется все равно проще..
Не могу понять, надо ли делать какое то статичное поле с данными аккаунта пользователя, под которым я зашла, и нужно ли периодически проверять, что я залогинена именно под данным "Васей", а не просто под кем-нибудь? Как это реализуется, если я все-таки решу делать нечто подобное? Каждой странице-блоку добавить свойство с данными аккаунта + метод, проверяющий под каким пользователем я авторизованна и делающим перелогин под нужным мне, если залогинена не под тем?