我有一个名为User
的类,它有像username,password,firstName ......这样的字段。将authenticate(username, password)
方法放入其中是否合适?
答案 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
。