代码之家  ›  专栏  ›  技术社区  ›  Tony The Lion

程序设计不同部分所需的对话框

  •  1
  • Tony The Lion  · 技术社区  · 15 年前

    我有一个对话框,身份验证对话框,这将在我的应用程序的不同部分中需要。在程序的不同点高效地调用对话框及其背后的逻辑(分离类)的最佳设计实践是什么?

    如:

    用户启动程序-需要登录

    用户希望查看加密数据-需要确认密码

    用户想要更改密码-需要确认当前密码。

    那么,什么是实现这一点的好方法呢?

    有什么建议吗?

    3 回复  |  直到 15 年前
        1
  •  1
  •   Mikael Svenson    15 年前

    也许不是实现的最简单的解决方案,但是您可以考虑使用面向方面的编程。然后,您可以对每个需要用户登录的方法进行注释。这使得代码清晰易读。

    [ConfirmUser(ErrorMethod=... RequireUsername=false, RequirePassword=true )]
    public void ViewData()
    {
       // your code
    }
    

    AOP框架将编织所需的代码来处理您方法中的用户确认。

    或者在方法内部手动执行相同的操作:

    public void ViewData()
    {
      ConfirmUser();
       // your code
    }
    
    public void ConfirmUser()
    {
       if( !DoLoginPage() ) throw new SecurityException("Incorrect credentials");
    }
    

    您可以让confirmuser返回bool而不是异常。这是另一个讨论,取决于您的应用程序。如果您拒绝在较低的代码层中执行操作,那么异常就是解决方法。Try/Catch使您将错误处理放在函数的底部,而返回的bool需要和if语句放在顶部。

    public void ViewData()
    {
      try
      {
         ConfirmUser();
         // your code
      }
      catch( SecurityException )
      {
         //handle error
      }
    }
    

    VS

    public void ViewData()
    {
       if( !ConfirmUser() )
       {
          //handle error
          return;
       }
       // your code
    }
    

    您可以同时实现confirmuser和confirmpassword,或者在同一个方法中同时使用两个参数,也可以使用枚举来说明需要验证的内容。

    [Flags]
    public enum Requires
    {
        Username,
        Password
    }
    
    public bool ConfirmUser( Requires requiresField )
    {
    }
    
        2
  •  1
  •   ChrisF    15 年前

    一种方法是创建“用户认证”方法。

    因此,当您需要检查是否允许用户执行请求的操作时,可以进行调用:

    if (UserAuthenticated())
    {
        // Perform action
    }
    

    此方法将保存用户的详细信息并提示输入密码,并根据数据库检查这些信息。如果细节匹配,返回 true 继续进行下去。

    启动时,不会设置用户名,因此对话框也会提示输入用户名。

    这是一个例子 aspect orientated programming cross-cutting concerns .

        3
  •  0
  •   Doc Brown    15 年前

    一般来说,与设计任何其他可重用类相比,设计可重用表单没有真正的区别——将要重用的类放入一个或多个程序集中,并从希望重用的位置引用它们。它既适用于窗体,也适用于任何其他可重用类。

    如果您需要窗体的稍有不同的功能,这取决于您调用它的上下文,例如,您可以编写适当的构造函数,或者在显示对话框之前通过适当的方法初始化它。