Tôi quan tâm đến DDD (Thiết kế Driven Miền) trong những ngày qua, nhưng tôi không thể tìm ra trách nhiệm của người tạo và xác thực các thực thể. Ill phá vỡ câu hỏi này để bao gồm các kịch bản khác nhau.DDD - Trách nhiệm tạo và xác nhận thực thể
Thực thể thường xuyên (Có thể có đối tượng giá trị). Ví dụ: cho phép một người dùng được nhận dạng bằng Email. Tôi có một UserFactory nhận được một mảng dữ liệu (có thể từ POST mẫu), và trả lại cho tôi một UserEntity mới. Nhà máy có nên xác thực tính toàn vẹn của dữ liệu (ví dụ: chuỗi được đưa ra dưới dạng Email là một email thực, mật khẩu trong trường mật khẩu 1 và trường khớp 2 và v.v.) không? Nhà máy có nên xác nhận rằng không có người dùng nào tồn tại (chúng tôi không muốn đăng ký hai người dùng với cùng một email)? Nếu có thì nó có tự làm hay sử dụng UserRepository không?
Thực thể tổng hợp. Giả sử chúng ta có một thực thể Post và các thực thể Comments. Tôi muốn nhận được bài đăng 12 với tất cả các nhận xét của mình, vì vậy tôi thực hiện một số nội dung như
$ post = $ postRepository-> getById (12);
Cách getById nên được triển khai? như thế này:
public function getById($id) {
$postData = $this->magicFetchFromDB($id);
$comments = (new CommentRepository())->getForPost(12);
return new PostEntity($postData, $comments);
}
Hoặc có thể đăng bài chịu trách nhiệm về lười biếng tạo nhận xét của mình, một cái gì đó như:
class PostEntity {
public function getComments() {
if(is_null($this->_comments)) $this->_comments = (new CommentRepository())->getForPost($this->_id);
return $this->_comments;
}
}
? Tôi bị lạc ở đây và không có đủ thông tin với các ví dụ về DDD trong PHP, vì vậy mọi trợ giúp sẽ được đánh giá cao!
Cảm ơn bạn rất nhiều, skwee.
Cảm ơn bạn đã bình luận! A) Tôi không chắc chắn về việc xác thực trong thực thể. Bạn có xem xét xác thực captcha là một phần của logic nghiệp vụ không? Và điều gì sẽ xảy ra nếu tôi có bảng điều khiển quản trị để thêm người dùng theo cách thủ công mà không cần captcha? B) Có, tôi có thể, nhưng câu hỏi là ai có trách nhiệm? Lớp xác nhận? Nhà máy? Kho? C) Ok nhưng nếu tôi có Người dùng có bài đăng có nhận xét, liệu có phải thông minh để tải tất cả dữ liệu này để hiển thị trang tiểu sử người dùng không? –
a) nó phụ thuộc vào nhu cầu của bạn thực sự, tôi đã tìm thấy nó "dễ dàng hơn" để có xác nhận trong thực thể chính nó bằng cách sử dụng các lớp helper. nhưng thêm một lớp xác nhận là hoàn toàn tốt đẹp. b) tôi sẽ nói đó là trách nhiệm của lớp xác nhận. nếu hai Tài khoản không thể có cùng một số và bạn cố gắng thêm một số với một số đã tồn tại, điều đó có nghĩa là thực thể đó là ** không hợp lệ **, hoặc ít nhất đó là những gì tôi nghĩ. – jere
c) điều này cũng phụ thuộc vào những gì bạn muốn. nếu bạn sẽ hiển thị tất cả thông tin đó cùng một lúc trên trang hồ sơ thì có, tải tất cả thông tin trong một cuộc gọi. nhưng nếu bạn hiển thị, cho phép nói, chỉ các bài đăng và khi bạn nhấp vào một bài đăng, bạn nên tải các nhận xét trong thời điểm đó, có thể sử dụng ajax – jere