Giả sử tôi có mô hình này. (Tôi đã làm cho nó rất đơn giản cho mục đích trình diễn.)Xác thực mẫu trong PHP yêu cầu tương tác với cơ sở dữ liệu
class User
{
public $id;
public $email;
public $password;
public $errors = [];
public function isValid()
{
if (strpos($this->email, '@') === false) {
$this->errors['email'] = 'Please enter an email address';
}
// ...
return !$this->errors;
}
}
Và giả sử tôi có DAO này để truy xuất, thêm, cập nhật và xóa người dùng.
class UserDAO
{
public function getUsers() { ... }
public function getUserById($id) { ... }
public function addUser(User $user) { ... }
public function updateUser(User $user) { ... }
public function deleteUser($id) { ... }
public function isEmailUnique($email) { ... }
}
Khi tôi xử lý một hình thức, tôi thường làm một cái gì đó như thế này:
$userDAO = new UserDAO();
$user = new User();
$user->email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
$user->password = filter_input(INPUT_POST, 'password');
if ($user->isValid()) {
if ($userDAO->addUser($user)) {
// ...
} else {
// ...
}
} else {
// do something with $user->errors
}
Bây giờ, giả sử phần xác nhận của tôi sử dụng nên kiểm tra xem email là duy nhất, làm thế nào để làm cho nó một phần của mô hình Người dùng? Vì vậy, khi $user->isValid()
được gọi, nó cũng kiểm tra xem email có phải là duy nhất không? Hoặc tôi làm điều này tất cả sai?
Từ sự hiểu biết yếu kém của tôi về DAO, DAO chịu trách nhiệm về mọi tương tác với cơ sở dữ liệu. Vậy làm thế nào để làm cho mô hình làm việc với cơ sở dữ liệu từ bên trong?
Các câu trả lời của S.Lott có thể giúp bạn http://stackoverflow.com/a/198032/3904215. Và đây là một mô tả từ tutorialspoint: http://www.tutorialspoint.com/design_pattern/data_access_object_pattern.htm – AMartinNo1