2009-12-27 26 views
1

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

EG:

用户启动程序 - 需要登录

用户想要观看加密数据 - 密码的确认需要

用户想要改变密码 - 确认要求的当前密码的。

那么实现这个的好方法是什么?

欢迎任何建议?

回答

1

也许不是最简单的解决方案来实现,但你可以看看使用Aspect Oriented Programming。然后您可以注释每个需要用户登录的方法。这使得代码干净可读。

[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返回一个布尔值,而不是例外的。这是另一个讨论,并取决于您的应用程序。如果您在较低的代码层中拒绝操作,则需要执行异常。 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) 
{ 
} 
1

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

所以当以往任何时候都需要检查用户是否被允许执行请求的操作您拨打电话:

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

此方法将保存用户的详细信息,并提示输入密码,并检查他们反对数据库。如果细节匹配,则返回true并继续。

在启动时不会设置用户名,所以对话框也可以提示。

这是aspect orientated programmingcross-cutting concerns的示例。

0

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

如果您需要根据您调用的上下文略有不同的功能,可以编写相应的构造函数,或者在显示对话框之前通过适当的方法初始化对话框。

相关问题