parierk
Senior Member
dùng 1 câu sql load lên hết thì sao n + 1 dc b. Ở ORM b cứ include hết các entity liên quan đến aggregate root để load tất cả lên hết trong 1 query.Cho mình hỏi định nghĩa của Aggregate Root trong DDD là như này. Nếu như theo định nghĩa, với ví dụ trong Case-Activity Management System. Khi load data Case của 1 user, theo đúng định nghĩa của DDD về Aggrerate Root, thì mình phải load toàn bộ Case - Activities, Activity Types lên từ database. Vậy chẳng lẽ cái này bị N + 1 khi dùng ORM???
Còn ý nghĩa tại sao load aggregate root thì phải load hết entity thì để đảm bảo toàn vẹn cho business use case đó. Vd bạn làm ecommerce, và lưu 1 Order của người dùng, thì khi load 1 aggregate root là Order, b phải cùng lúc load hết các OrderLineItems của nó lên thì lúc đó 1 cụm Order mới có ý nghĩa (tương ứng với việc nếu muốn query coi 1 user Order gì, thì bắt buộc trong cục Order đó phải có ít nhất 1 item).
Và ngược lại, nếu b đang design OrderLineItem k phải aggregate root, k có nghiệp vụ quanh nó thì b chỉ được load nó lên chung với 1 Order nhất định (tương ứng với việc shopee k có chức năng nghiệp vụ nào cho phép người dùng xem tất cả Order item riêng lẻ, muốn xem đã order gì thì phải load cả Order chứa Item trong đó).
DDD nếu apply đúng nó sẽ dễ hiểu và phản ánh thực tế vậy đó b.