Oop 用户类负责身份验证吗?

Oop 用户类负责身份验证吗?,oop,design-patterns,Oop,Design Patterns,我有一个名为User的类,它有用户名、密码、名字等字段。将身份验证(用户名、密码)方法放入其中是否合适?理想情况下,不,这应该是控制器的工作。用户类应该只是一个数据类,控制器(业务逻辑类)使用它来评估诸如身份验证等内容 说明: 您需要模块化您的代码(将其分解为组件),每个组件都应该是一个独立的实体,但需要其他组件来提供整个系统 您的问题表明您希望在DO(数据对象)类中执行一些业务层操作。这是可以做到的,但绝不推荐,因为它扼杀了分离关注点的想法 对于控制器,您可以执行以下操作 拥有对象/实体级别

我有一个名为
User
的类,它有用户名、密码、名字等字段。将
身份验证(用户名、密码)
方法放入其中是否合适?

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

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

您的问题表明您希望在DO(数据对象)类中执行一些业务层操作。这是可以做到的,但绝不推荐,因为它扼杀了分离关注点的想法

对于控制器,您可以执行以下操作

  • 拥有对象/实体级别的管理器,也就是说,对于每个实体,您都有一个管理器来处理其业务逻辑内容。假设一个用户类有一个UserManager

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


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

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

      您的问题表明您希望在DO(数据对象)类中执行一些业务层操作。这是可以做到的,但绝不推荐,因为它扼杀了分离关注点的想法

      对于控制器,您可以执行以下操作

      • 拥有对象/实体级别的管理器,也就是说,对于每个实体,您都有一个管理器来处理其业务逻辑内容。假设一个用户类有一个UserManager

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


      如果您绝对希望将验证封装在
      用户
      类中,您可以在
      用户
      类中使用方法
      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在上面的例子中?没有什么。但是为它创建装饰结构并不难。