php DAL - 单独的实体和数据库?

ran*_*zer 5 php database oop model

我一直在研究和阅读很多关于在PHP中使用单独的层来创建可维护和可读的代码.但是,我看到很多代码将实体和数据库访问放在一个类中.例如:

class User{
     public $id;
     public $username;
     public $database;

     function add(){
           $database->query ....
     }
}
Run Code Online (Sandbox Code Playgroud)

我觉得这很奇怪,因为在这里你将User类与数据库元素混合在一起,这使得维护起来更加困难.

我喜欢这样工作:

  • 一个单独的数据库类
  • 用户类
  • 一个userData类

这样工作如下:

$database = new Database();
$database->openConnection();
$dataUser = new DataUser($db);
$user = new User(1,"myname");
$dataUser->saveUser($user);
Run Code Online (Sandbox Code Playgroud)

所以我想知道,我是以正确的方式工作还是第一种创建代码的更好方法?我发现可能很容易维护,因为你有一个单独的实体和一个单独的数据库类来处理数据库操作.

web*_*ave 1

易于维护,因为您有一个单独的实体和一个单独的数据库类

您似乎是在说您希望从Active Record方法转向数据映射器/实体/存储库方法。这是一个很好的发展方向,因为它采用了更好的关注点分离。您可以自己构建它,但您可能想看看像Doctrine这样的解决方案,它允许您执行以下操作:

$product = new Product();
$product->setName($newProductName);
$entityManager->persist($product);
Run Code Online (Sandbox Code Playgroud)

$product实体只是一个 POPO(普通旧 PHP 对象),它包含记录数据,并且不知道它是如何持久化的,并且当需要持久化时,将其传递到实体管理器来负责存储。