Круговая зависимость между двумя методами в классе - PullRequest
0 голосов
/ 02 августа 2011

У меня есть класс библиотеки, который содержит два метода, скажем, Login () и NavigateToPage ().Теперь, чтобы перейти на страницу, необходимо войти в сеанс. Кроме того, чтобы войти, сначала нужно перейти на страницу входа.На данный момент мой обходной путь:

Login()
{
   NavigateToPage(LoginPage);
   // log in and do validation stuff.
   // set IsLoggedIn to true for further methods (also for NavigateToPage() method.)
   IsLoggedIn = true;
}

NavigateToPage (PageType pageType)
{
    if (pageType == LoginPage)
    {
       // navigate to login page.
       return;
    }
    if (! IsLoggedIn) Login();

    // switch case for navigation to other page types.
}

Это своего рода psuedocode.Фактический код работал до сих пор, без каких-либо проблем.Тем не менее, я чувствую, что что-то не так, поскольку это выглядит циклично.Я думаю, что есть что-то, что можно сделать, чтобы улучшить код и убрать циклическую зависимость.Может кто-нибудь что-нибудь предложить?

Я собирался сделать вопрос и язык независимым от платформы.Но я вижу, что не могу это объяснить.В основном, страницы не зависят от моего класса.Библиотека, которую я разрабатываю, берет веб-сайт и просматривает его страницы.Я просто пытаюсь автоматизировать задачи на сайте.Итак, страница входа и другие страницы, о которых я говорю, находятся в контексте того сайта, который я хочу просмотреть.Библиотека автоматизирует этот просмотр.Я надеюсь, что теперь все ясно.

Ответы [ 3 ]

0 голосов
/ 02 августа 2011

В вашем примере метод входа не должен перенаправлять на страницу входа!Так как этот метод, вероятно, будет вызван, когда пользователь нажмет submit на странице входа в систему.

Метод login () должен только проверять user / passwd и устанавливать заголовок Session / http с идентификатором по вашему выбору, чтобы позволить серверузнает, что действительный сеанс включен.(при этом цикл больше не будет; -))

NavigateToPage () можно переименовать в validateUserSession () и только проверять, вошел ли пользователь в систему.Если вы используете Java, validateUserSession () должен быть в servletFilter, поэтому каждый раз, когда запрос поступает на сервер, проверка будет выполняться.

Надеюсь, это поможет

0 голосов
/ 02 августа 2011

Используя вашу существующую псевдологию, я просто реорганизую код и введу явный метод перехода на страницу входа

Login()
{
   NavigateToLoginPage();
}
NavigateToLoginPage()
{
   // navigate to login page.
   // log in and do validation stuff.
   // set IsLoggedIn to true for further methods 
   IsLoggedIn = true;
}
NavigateToPage (PageType pageType)
{
    if (! IsLoggedIn) NavigateToLoginPage();

    // switch case for navigation to other page types.
}
0 голосов
/ 02 августа 2011

Вы вообще не упомянули технологический стек, но по умолчанию он имеет отдельную страницу входа и главные страницы.И я не уверен, имеет ли смысл NavigateToPage (loginPage), так как необходимо иметь страницу по умолчанию для любого приложения, которая обычно является страницей входа.

...