php – MVC,模型和数据访问对象
我有一个理论问题,我希望有人能帮助我弄明白.
我目前正在使用MVC设计模式在PHP中编写一个简单的Web应用程序.我已经看过并阅读了一些关于这个主题的教程,但它们通常要么过于复杂,要么过于简单. 所以我目前所拥有的是一个简单的用户模型: class User { private $username; private $group; //user,admin,etc // getters } 我还有一个简单的Database类来实现这个类: interface DatabaseInterface { public function connect(); public function disconnect(); public function prepare($sql = null); public function execute($params = array()); public function rowCount(); public function fetch(); } 我的问题是我应该如何通过填充我的User类链接这个Database类? 我目前所拥有的是另一个名为UserDAO的类,它在它的构造函数中传递了Database类的引用,它有一个名为ValidateUser()的函数,然后使用上面的接口方法来检查用户对数据库. class UserDAO { private $database; public function __construct($database) { $this->database = $database; } public function validateUser($username,$password) { $this->database->prepare('SELECT * FROM users WHERE...'); .... return true/false; } } 现在我通过构造函数将UserDAO对象传递给User类,并在User类中添加另一个ValidateUser()方法,它基本上只调用UserDAO类中的ValidateUser()方法. 新的User类: class User { private $username; private $group; //user,etc private $userDAO; public function __construct($userDAO) { $this->userDAO = $userDAO; } public function validateUser($username,$password) { if($this->userDAO->validateUser($username,$password)) { // set stuff that i need return true; } return false; } // getters } 关于这一点对我来说感觉不对.有人能帮我理解这个过程通常流动的方式吗? 此外,Database类通常保持静态,所以我可以使用Database :: instance()之类的东西调用连接吗?现在我正在PHP页面的开头创建一个数据库对象并传递它. 如果有什么不清楚的话,请随时给我发表评论,我会尽快修复它. 感谢您对帖子的长度感到满意. 解决方法
这取决于您的解决方案应该是最新的.
独生子 “最旧的”版本是在任何地方都有一个静态连接.你通过使用单例来实现这一点: class database { private $instance = NULL; private function __construct() public function getDb() { return $this->instance?: $this->instance = new database(); } } 注册处 第二个更新的解决方案是使用注册表: $this->getRegistry()->getDb 通常,注册表在脚本的开头填充,例如在引导程序中. 依赖注入 依赖注入的第三个“最新”和最好的方法. 这样您就可以轻松定义“用户需要DB和Redis.商店需要DB,Config和FTP”…… 如果您曾经升级到多个DB(例如一个主服务器和多个服务器),DI非常适合,因为您可以为代码的每个部分提供完成工作所需的数据库,而无需更改单行代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |