Dependencies 类中两个方法之间的循环依赖关系

Dependencies 类中两个方法之间的循环依赖关系,dependencies,anti-patterns,circular-dependency,Dependencies,Anti Patterns,Circular Dependency,我有一个库类,它包含两个方法,比如Login()和NavigateToPage()。 现在,为了导航到页面,必须登录会话。此外,要登录,首先需要导航到登录页面。 到目前为止,我的解决办法是: Login() { NavigateToPage(LoginPage); // log in and do validation stuff. // set IsLoggedIn to true for further methods (also for NavigateToPage()

我有一个库类,它包含两个方法,比如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.
}
这是一种伪代码。到目前为止,实际的代码一直工作,没有任何问题。尽管如此,我还是觉得有点不对劲,因为它看起来是循环的。我认为可以做一些事情来改进代码并消除循环依赖性。有人能提出什么建议吗

我本来打算让问题语言和平台不可知。但我看我无法解释。
基本上,页面独立于我的类。我正在开发的图书馆,拥有一个网站并导航其页面。我只是想把网站上的任务自动化。所以,我所说的登录页面和其他页面都是在我想要浏览的网站的上下文中。图书馆使浏览自动化。我希望我现在明白了。

您根本没有提到技术堆栈,但事实上它有一个单独的登录页面和主页。我不确定NavigateToPage(loginPage)是否有意义,因为任何应用程序都需要一个默认页面,通常是登录页面。

在您的示例中,登录方法不应该重定向到登录页面!因为当用户在登录页面中点击submit时,可能会调用此方法

login()方法应该只验证user/passwd,并使用您选择的id设置Session/http头,以便让服务器知道有效的会话已打开。 (使用此选项,不再循环;-))

NavigateToPage()可以重命名为validateUserSession(),并且只能验证用户是否登录。如果使用Java,validateUserSession()应该位于servletFilter中,因此每次请求到达服务器时,都会进行验证


希望它对您有所帮助

使用您现有的伪逻辑,我将重构代码,并介绍一种导航到登录页面的显式方法

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.
}

通常登录可以由web框架处理。你能告诉我们你使用的是哪种网络框架吗?@Jack:我已经编辑了我的问题。请再检查一遍。嗯..我本来打算让这个问题语言不可知。但我看我无法解释。您在错误的上下文中读取了页面。基本上,页面独立于我的类。我的班级建立了一个网站并浏览它的网页。我只是想把网站上的任务自动化。所以,我所说的登录页面和其他页面都是在我想要浏览的网站的上下文中。我发布的代码包含在一个自动浏览的类中。我希望我现在清楚了。我想这应该足够了….Login(){NavigateToPage(LoginPage);//登录并执行验证工作//将IsLoggedIn设置为true以获得进一步的方法(也用于NavigateToPage()方法)。IsLoggedIn=true;}NavigateToPage(PageType PageType){if(PageType==LoginPage){//导航到登录页。返回;}是的。我现在基本上保留了这个代码。我仍然担心其中可能存在循环依赖性;或者只是代码看起来像这样?你说的方式是不同的上下文。当网站是我的代码时,你说的是有效的。在我的情况下,我使用网站作为操作对象。这意味着我将知道用户只有在点击“提交”按钮后才能成功登录,登录页面将更改为只有成功登录后才会显示的页面。我将用这种方式识别成功。我希望您了解上下文。正如我在问题中所说,我正在自动完成网站中的一些任务。