PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
背景
在开发的过程中,我们通常需要用到数据持久化,也就是将应用程序数据存储到数据库中。这时候,我们就需要用到访问数据库的相关代码。但是,直接将数据库操作的代码写在应用程序中会导致代码耦合度高、代码冗长等问题。因此,我们需要一种将数据库操作和应用程序解耦的方式来提高代码的可读性、可维护性和可扩展性,而数据访问对象模式(DAO)便是一种解决方案。
数据访问对象模式(DAO)介绍
数据访问对象(DAO)模式是一种将数据访问和业务逻辑分离的设计模式。它将数据访问与底层数据存储技术分离开来,从而为访问数据库的代码提供了一种抽象和简单的方式。
DAO模式包含以下几个角色:
- 数据访问对象接口(DAOInterface):定义操作数据库的方法,是其它DAO实现的标准规范;
- 数据访问对象实现类(DAOImpl):实现DAOInterface接口中定义的方法,执行具体的数据库操作;
- 模型类(Model):表示数据在应用程序中的具体表现形式;
- 数据库连接(DBConfig):定义数据库连接参数,与DAOImpl实现类构成一个整体。
DAO模式的优点有:
- 简化代码结构,提高代码重用性。
- 降低业务逻辑与数据访问的耦合度,方便修改和维护。
- 利用继承或实现接口的方式,实现代码的可扩展性和灵活性,方便增加数据库的类型和访问方式。
DAO模式的实现
在PHP中,DAO模式可以用以下步骤来实现:
- 创建DAOInterface接口,定义必须实现的数据库操作方法
interface DAOInterface {
public function findAll();
public function findById($id);
}
- 创建DAOImpl实现类,实现DAOInterface接口中定义的方法,并连接数据库
class UserDaoImpl implements DAOInterface {
private $conn;
public function __construct() {
$this->conn = mysqli_connect('localhost', 'root', 'password', 'database_name');
}
public function findAll() {
$users = array();
$sql = "SELECT * FROM user";
$result = mysqli_query($this->conn, $sql);
while ($row = mysqli_fetch_assoc($result)) {
$user = new User($row['id'], $row['name'], $row['email']);
$users[] = $user;
}
mysqli_free_result($result);
mysqli_close($this->conn);
return $users;
}
public function findById($id) {
$sql = "SELECT * FROM user WHERE id=$id";
$result = mysqli_query($this->conn, $sql);
$row = mysqli_fetch_assoc($result);
$user = new User($row['id'], $row['name'], $row['email']);
mysqli_free_result($result);
mysqli_close($this->conn);
return $user;
}
}
- 创建模型类,表示数据在应用程序中的具体表现形式
class User {
private $id;
private $name;
private $email;
public function __construct($id, $name, $email) {
$this->id = $id;
$this->name = $name;
$this->email = $email;
}
public function getId() {
return $this->id;
}
public function getName() {
return $this->name;
}
public function getEmail() {
return $this->email;
}
}
- 创建数据库连接,定义连接参数
class DBConfig {
const HOST = "localhost";
const USERNAME = "root";
const PASSWORD = "password";
const DATABASE = "database_name";
}
DAO模式的用法实例分析
下面通过两个实例来演示DAO模式的使用。
实例一:查询所有用户信息
require_once 'models/User.php';
require_once 'dao/DAOImpl.php';
require_once 'dao/DAOInterface.php';
$userDao = new UserDaoImpl();
$users = $userDao->findAll();
foreach ($users as $user) {
echo "ID:" . $user->getId() . "<br/>";
echo "Name:" . $user->getName() . "<br/>";
echo "Email:" . $user->getEmail() . "<br/>";
echo "<hr/>";
}
执行上述代码,即可输出所有用户的信息。
实例二:根据ID查询用户信息
require_once 'models/User.php';
require_once 'dao/DAOImpl.php';
require_once 'dao/DAOInterface.php';
$userDao = new UserDaoImpl();
$user = $userDao->findById(1);
echo "ID:" . $user->getId() . "<br/>";
echo "Name:" . $user->getName() . "<br/>";
echo "Email:" . $user->getEmail() . "<br/>";
执行上述代码,即可输出ID为1的用户信息。
总结
关于数据访问对象模式(DAO),本文从概念、原理到实战均有详细介绍。希望本文能够对读者理解DAO模式,提升编程效率,缩小代码耦合度有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析 - Python技术站