Trước hết, những gì học thuyết đang nói gì vậy, 1 hoặc 2?
Có một sự khác biệt rất lớn. Điều duy nhất mà cả hai có điểm chung là chúng đều là ORM-s chính thức. Nếu không thì thực sự không có mối liên hệ nào giữa hai người.
Học thuyết 1 dựa trên ActiveRecords, Học thuyết 2 dựa trên Trình ánh xạ dữ liệu mẫu.
Cả hai đều có thể làm những điều tương tự, nhưng có một số khác biệt đáng kể giữa hai loại.
Nói chung dữ liệu mapper ít "nhà phát triển thân thiện", nhưng nên có hiệu suất tốt hơn. Tại sao? Trên thực tế nó là khá đơn giản. Với các bản ghi hoạt động, mỗi thực thể biết mọi thứ "xung quanh", quan hệ với các thực thể khác. Với trình ánh xạ dữ liệu, các thực thể là câm và nhẹ, có một thực thể trung tâm (EntityManager/UnitOfWork trong Doctrine2) xử lý tất cả ánh xạ quan hệ. Vì vậy, về mặt sử dụng bộ nhớ và hiệu suất Bộ lập bản đồ dữ liệu sẽ nhanh hơn.
Các Doctrine guys nói rằng Doctrine2 nhanh hơn Docstine1 ít nhất 50% (có những khác biệt khác nữa, không chỉ là mẫu thiết kế).
Nếu bạn cảm thấy lên cho nó, bạn thậm chí có thể thực hiện ActiveRecords qua Doctrine2 mapper dữ liệu. Nhìn vào đây blog post. Tôi đang sử dụng phương pháp này chỉ dành cho giai đoạn phát triển, để giữ ít mã nhất có thể. Khi nó được đưa vào sản xuất, tôi sẽ giết lớp ActiveRecords bổ sung và quay trở lại trình ánh xạ dữ liệu mặc định của Doctrine2.
Vì vậy, kết luận là bạn có thể làm mọi thứ với cả hai, nhưng trong cùng một cách bạn có thể nói rằng bạn có thể làm mọi thứ với SQL thô. Nếu bạn là một người mới bắt đầu trong thế giới ORM, tôi sẽ đề nghị đi với ActiveRecords, bởi vì nó là đơn giản và (thường) đòi hỏi ít mã hơn. Mặt khác, nếu bạn đang xây dựng một mô hình lớn, phức tạp, tôi nghĩ rằng người lập bản đồ dữ liệu là lựa chọn tốt hơn.
Có lẽ tôi đã nhận được điều gì sai, nhưng đây là cách tôi hiểu nó.
Đối với sự so sánh giữa CodeIgniters ActiveRecords và Doctrine (1 hoặc 2), tôi không thể thực sự nói, bởi vì tôi không bao giờ sử dụng CodeIgniter. Một điều tôi chắc chắn là, Doctrine có nhiều tính năng hơn ORM mặc định của CodeIgniters. Ví dụ: kết quả hydrat hóa, kế thừa (bảng đơn, bảng lớp), tìm nạp trước, tải chậm, tải thêm lười, mở rộng, hành vi, tối ưu hóa, proxy, xử lý datetime ... Đó là một ORM lớn và chính thức với rất nhiều các tính năng, trong khi trải nghiệm của tôi với bất kỳ "khung công tác ORM mặc định" nào là mục tiêu chính của họ là đơn giản nhất có thể, vì vậy một người mới có thể dễ dàng nhận được nó. Giáo lý là một con thú hùng mạnh, và chắc chắn có thể làm được nhiều thứ một cách hiệu quả và/hoặc hợp lý hơn so với việc xây dựng trong CodeIgniter ORM. Nhược điểm là, phải mất nhiều thời gian hơn để tìm hiểu và mã hóa, và nó là một thư viện khổng lồ, với hàng ngàn tệp, vì vậy chỉ để mọi thứ chạy thêm một số chi phí so với một giải pháp thay thế nhẹ hơn.
Học thuyết là một ORM chính thức thực hiện mẫu bản ghi đang hoạt động. Lớp bản ghi hoạt động của CodeIgniter là một trình tạo truy vấn dựa trên phiên bản "sửa đổi" của mẫu. – birderic
Hi birderic, Cảm ơn câu trả lời nhanh. Bạn có thể cho tôi một ví dụ mà điều này sẽ đi vào chơi? Chúng ta đang nói về những thứ như hoạt động của CRUD? – MatthewSchenker
Tôi sẽ viết một câu trả lời dài hơn. Tôi không có kinh nghiệm với Doctrine nhưng tôi sẽ cố hết sức để so sánh cả hai. – birderic