Oop 用户类负责身份验证吗?
我有一个名为Oop 用户类负责身份验证吗?,oop,design-patterns,Oop,Design Patterns,我有一个名为User的类,它有用户名、密码、名字等字段。将身份验证(用户名、密码)方法放入其中是否合适?理想情况下,不,这应该是控制器的工作。用户类应该只是一个数据类,控制器(业务逻辑类)使用它来评估诸如身份验证等内容 说明: 您需要模块化您的代码(将其分解为组件),每个组件都应该是一个独立的实体,但需要其他组件来提供整个系统 您的问题表明您希望在DO(数据对象)类中执行一些业务层操作。这是可以做到的,但绝不推荐,因为它扼杀了分离关注点的想法 对于控制器,您可以执行以下操作 拥有对象/实体级别
User
的类,它有用户名、密码、名字等字段。将身份验证(用户名、密码)
方法放入其中是否合适?理想情况下,不,这应该是控制器的工作。用户类应该只是一个数据类,控制器(业务逻辑类)使用它来评估诸如身份验证等内容
说明:
您需要模块化您的代码(将其分解为组件),每个组件都应该是一个独立的实体,但需要其他组件来提供整个系统
您的问题表明您希望在DO(数据对象)类中执行一些业务层操作。这是可以做到的,但绝不推荐,因为它扼杀了分离关注点的想法
对于控制器,您可以执行以下操作
- 拥有对象/实体级别的管理器,也就是说,对于每个实体,您都有一个管理器来处理其业务逻辑内容。假设一个用户类有一个UserManager
- 具有概念级控制器。这意味着您拥有处理系统特定模块(整个概念)的控制器。例如,如果您的网站需要对用户进行身份验证,则可以使用AuthenticationController。 现在,身份验证不一定只映射到一个表/对象,尽管它的唯一目标似乎是(逻辑上)您的用户表/类等,但它可以做其他事情并访问其他实体(取决于需求)等。因此,通过让概念级控制器使用实体级管理器,你可以放松你的发展
- 拥有对象/实体级别的管理器,也就是说,对于每个实体,您都有一个管理器来处理其业务逻辑内容。假设一个用户类有一个UserManager
- 具有概念级控制器。这意味着您拥有处理系统特定模块(整个概念)的控制器。例如,如果您的网站需要对用户进行身份验证,则可以使用AuthenticationController。 现在,身份验证不一定只映射到一个表/对象,尽管它的唯一目标似乎是(逻辑上)您的用户表/类等,但它可以做其他事情并访问其他实体(取决于需求)等。因此,通过让概念级控制器使用实体级管理器,你可以放松你的发展
- 理想情况下,不,这应该是控制器的工作。用户类应该只是一个数据类,控制器(业务逻辑类)使用它来评估诸如身份验证等内容
说明:
您需要模块化您的代码(将其分解为组件),每个组件都应该是一个独立的实体,但需要其他组件来提供整个系统
您的问题表明您希望在DO(数据对象)类中执行一些业务层操作。这是可以做到的,但绝不推荐,因为它扼杀了分离关注点的想法
对于控制器,您可以执行以下操作
用户
类中,您可以在用户
类中使用方法hasPassword(字符串密码)
。您可以在用户
类中使用方法hasPassword(字符串密码)
,如果您确实想将验证封装在该类中。我会说不。最好是建立连接,并使用带有用户名和密码的登录方法创建用户:
class Connection{
public:
Connection(string connectionString);
User login(string userName, string Password);
};
我会说不。最好是建立连接,并使用用户名和密码的登录方法创建用户:
class Connection{
public:
Connection(string connectionString);
User login(string userName, string Password);
};
这将打破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
}
}
视图:
有一些设计模式可以最大限度地利用此结构的继承。我建议研究一下会破坏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
}
}
视图:
有一些设计模式可以最大限度地利用此结构的继承。我建议您研究一下。谢谢您的回答,我如何使用Decorator来处理这个结构?您用什么语言编写代码?我承认我的PHP非常生疏。我可以提供一个Java或C语言的快速示例,如果您认为可以破译它并将其翻译成PHP。至少我可以在web上为您指出一个PHP示例,但是这个想法与大多数面向对象语言中的想法是一样的。在这个例子中你在装饰什么?@JosiahYoder在上面的例子中?没有什么。但是为它创建decorator结构并不难。谢谢你的回答,我如何使用decorator来实现这个结构?你用什么语言编写代码?我承认我的PHP非常生疏。我可以提供一个Java或C语言的快速示例,如果您认为可以破译它并将其翻译成PHP。至少我可以在web上为您指出一个PHP示例,但是这个想法与大多数面向对象语言中的想法是一样的。在这个例子中你在装饰什么?@JosiahYoder在上面的例子中?没有什么。但是为它创建装饰结构并不难。