Khi tôi hỏi một câu hỏi về quy ước đặt tên số ít/số nhiều ngày hôm qua, tôi đã gặp phải khái niệm về Mô hình miền. Như tôi đã hiểu cho đến nay, Mô hình miền chỉ đơn giản là một đối tượng đại diện cho một thực thể trong ứng dụng của tôi.Mô hình miền PHP, DAO và cách triển khai
Để sử dụng một ví dụ rất đơn giản, một cái gì đó như thế này:
class User {
private $name;
public setName() {}
public getName() {}
}
Bây giờ, câu hỏi nói đến cái tâm, làm thế nào để cư này "Domain Model", hoặc từ một số nguồn đầu vào, từ một cơ sở dữ liệu hoặc nguồn dữ liệu?
Khi đọc về Mô hình miền, tôi đã có ấn tượng rằng sẽ không có gì khác hơn là biểu diễn khái niệm Miền được đề cập bên trong. Vì vậy, bây giờ tôi cũng sẽ cần một lớp (DAO?) Chịu trách nhiệm tương tác với nguồn dữ liệu, trong trường hợp này là một bảng cơ sở dữ liệu có tên là "Người dùng". Lớp DAO của tôi sẽ xử lý chèn, cập nhật, xóa và tìm nạp nhiều lần.
tôi đã đưa ra phương pháp này để Populating một tài khoản Domain Model từ đầu vào, trong trường hợp bài này dữ liệu, và sau đó lưu các bản ghi cơ sở dữ liệu, với một lớp UserDAO:
/**
* Populating Domain Model from input, and saving to database
*/
/** Instantiate User Domain Model, and populate it from input */
$user = new User();
$user->setName($_POST['name']);
/** Creating a new database record from User Domain Model */
$userdao = new UserDAO($pdo);
$userdao->insert($user);
Và đây là cách Tôi đã dự đoán tương tác với cơ sở dữ liệu khi tôi cần tìm nạp dữ liệu, trong trường hợp này nhiều hồ sơ người dùng:
/**
* Fetching data from database to populate User Domain Models in an array
*/
/** Instantiate new UserDAO object to interact with User table */
$users = new UserDAO($pdo);
$users->findAll();
$user_collection = [];
/** Loop UserDAO object set to populate user collection array */
foreach ($users as $user) {
/** Create new User domain object from row, and add to collection array */
$user = new User($user);
$user_collection[$user->name()] = $user;
}
Có vẻ như lợi ích thực sự duy nhất ở đây là tổ chức.
Lần lặp hiện tại của tôi về cơ bản có lớp Người dùng đảm nhận tất cả trách nhiệm của lớp UserDAO ở trên và trả về mảng dữ liệu trực tiếp từ cơ sở dữ liệu mà tôi sử dụng trong "Bộ điều khiển"/"Trình bày" của tôi thông qua các lượt xem (thụ động) của tôi.
Những gì tôi đang tự hỏi là:
Tôi có đi đúng hướng?
Xác thực đầu vào ở đâu? Tôi cho rằng nó phải nằm trong Mô hình miền, nếu tôi đúng trong các giả định của tôi cho đến nay?
Lợi ích của việc sử dụng kỹ thuật này, ngoài việc giúp tổ chức các khái niệm cơ bản mà ứng dụng sẽ dựa vào và hoạt động là gì? Tại sao tôi cần thêm lớp này thay vì hoạt động trực tiếp trên kết quả mảng từ DB?
Tôi gọi các lớp DAO của tôi là 'Trình xử lý' tức là 'User_handler'. Các trình xử lý này điền các mô hình miền và chấp nhận các bộ dữ liệu để chèn hoặc cập nhật. Việc xác thực đầu vào đang được thực hiện trong bộ điều khiển của tôi. – Timmetje
* strong * related: http://stackoverflow.com/questions/5863870/how-should-a-model-be-structured-in-mvc/5864000#5864000 – ircmaxell