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

时间:2011-08-02 12:54:10

标签: 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() 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.
}

这是一种伪代码。实际的代码一直工作到现在,没有任何问题。不过,我觉得有些不对劲,因为它看起来很循环。我认为可以采取一些措施来改进代码并消除循环依赖。有人可以提出什么建议吗?

我几乎打算提出语言和平台无关的问题。但我看到我无法解释它。 基本上,页面独立于我的班级。我正在开发的库,需要一个网站并浏览其页面。我只是想在网站中自动执行任务。所以,我正在谈论的登录页面和其他页面都在我要浏览的网站的上下文中。该库自动化浏览。我希望我现在很清楚。

3 个答案:

答案 0 :(得分:0)

你根本没有提到技术堆栈,但它的实际情况是有一个单独的登录页面和主页面。我不确定NavigateToPage(loginPage)是否有意义,因为必须为任何通常是登录页面的应用程序提供默认页面。

答案 1 :(得分:0)

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

login()方法应该只验证user / passwd,并使用您选择的ID设置Session / http标头,让服务器知道有效会话是ON。 (有了这个,没有更多的周期; - ))

NavigateToPage()可以重命名为validateUserSession(),并且只验证用户是否已挂起。如果使用Java,那么validateUserSession()应该在servletFilter中,因此每次请求到服务器时,都会进行验证。

希望有所帮助

答案 2 :(得分:0)

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

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