用户类是否负责身份验证?

时间:2014-12-30 16:41:47

标签: oop design-patterns

我有一个名为User的类,它有像username,password,firstName ......这样的字段。将authenticate(username, password)方法放入其中是否合适?

4 个答案:

答案 0 :(得分:3)

理想情况下,不应该是控制器的工作。用户类应该只是一个数据类,控制器(业务逻辑类)使用它来评估Authenticate等内容。

说明:

您需要模块化您的代码(将其分解为组件),每个组件应该是一个独立的实体,但需要其他组件来提供系统的整体情况。

您的问题似乎是要在DO(数据对象)类中执行某些业务层操作。它可以完成,但绝不推荐,因为它会破坏关注点分离的想法。

对于控制器,您可以执行类似

的操作
  • 拥有对象/实体级别管理器,即,您拥有经理来处理其业务逻辑内容的每个实体。假设您有UserManager的用户类。

  • 拥有概念级控制器。这意味着您拥有处理系统特定模块的控制器(整个概念)。例如,如果您的网站需要对用户进行身份验证,则可以使用AuthenticationController。 现在,身份验证不一定只映射到一个表/对象,尽管它的唯一目标似乎是(逻辑上)你的用户表/类等,它可能正在做其他事情并访问其他实体(取决于要求)等。因此,通过使用概念级控制器使用的实体级别管理器,您可以简化开发。

答案 1 :(得分:1)

我会说不。更好的方法是使用用户名和密码的登录方法建立连接并创建用户:

class Connection{
public:
 Connection(string connectionString);
 User login(string userName, string Password);
};

答案 2 :(得分:1)

这将打破MVC(模型视图控制器)结构。为了代码的优雅,可读性和可维护性,最好将这三者分开。一个简单的例子就是Java:

型号:

public class User {

   private String username;
   private String password;
   (...)

}

控制器:

import yourmodelpackage;

public class MyController {

   public static boolean authenticate(String username, String password) {
      //your logic
   }

}

查看:

//call your authenticate() method through the controller
MyController control = new MyController();
boolean b = control.authenticate(username, password);

有一些设计模式可以最大限度地利用此结构的继承。我建议您查看Decorator Design Pattern

答案 3 :(得分:0)

如果您绝对想要在该类中封装验证,那么您可以在hasPassword(string password)类上使用方法User