ฉันต้องการได้ยินจากผู้ที่ใช้ Doctrine 2 (หรือใหม่กว่า) และ Propel 1.5 (หรือใหม่กว่า) การเปรียบเทียบส่วนใหญ่ระหว่างผู้ทำแผนที่เชิงสัมพันธ์ของวัตถุทั้งสองนั้นอ้างอิงจากเวอร์ชันเก่า - Doctrine 1 เทียบกับ Propel 1.3 / 1.4 และ ORM ทั้งสองผ่านการออกแบบที่สำคัญในการแก้ไขล่าสุดของพวกเขา ตัวอย่างเช่นการวิพากษ์วิจารณ์ส่วนใหญ่ของ Propel นั้นดูเหมือนจะอยู่กึ่งกลางของคลาส"ModelName Peer " ซึ่งถูกคัดค้านใน 1.5 ทุกกรณี
นี่คือสิ่งที่ฉันได้สะสมจนถึงขณะนี้ (และฉันพยายามทำให้รายการนี้สมดุลเท่าที่จะเป็นไปได้ ... ):
- ขับเคลื่อน
- ข้อดี
- เป็นมิตรกับ IDE อย่างยิ่งเนื่องจากมีการสร้างรหัสจริงแทนที่จะใช้วิธีเวทมนต์ PHP ซึ่งหมายความว่าฟีเจอร์ IDE เช่นการทำให้โค้ดสมบูรณ์มีประโยชน์จริง ๆ
- เร็ว (ในแง่ของการใช้ฐานข้อมูล - ไม่มีการทำวิปัสสนาบนฐานข้อมูล)
- ล้างการโยกย้ายระหว่างเวอร์ชันสกีมา (อย่างน้อยใน 1.6 เบต้า)
- สามารถสร้างแบบจำลอง PHP 5.3 (เช่นเนมสเปซ)
- เชื่อมโยงหลายสิ่งเข้าไว้ในฐานข้อมูลแบบสอบถามเดียวได้อย่างง่ายดายด้วยสิ่งต่างๆเช่น
useXxx
วิธีการ (ดูวิดีโอ "การเติมโค้ด" ด้านบน)
- จุดด้อย
- ต้องการขั้นตอนการสร้างพิเศษคือการสร้างคลาสโมเดล
- รหัสที่สร้างต้องสร้างใหม่เมื่อใดก็ตามที่มีการเปลี่ยนแปลงเวอร์ชันของ Propel การตั้งค่าจะเปลี่ยนไปหรือเปลี่ยนสคีมา
สิ่งนี้อาจไม่ได้ใช้งานง่ายสำหรับบางวิธีและวิธีการที่กำหนดเองที่ใช้กับโมเดลนั้นสูญหายไป (ฉันคิดว่า?)- ไม่จริง; วิธีการที่กำหนดเองจะไม่สูญหายไปเนื่องจากคลาสที่สร้างขึ้นเป็นคลาสพื้นฐาน Propel จัดเตรียมคลาสเอนทิตีสำหรับการขยายโดยเฉพาะ - คุณลักษณะที่มีประโยชน์บางอย่าง (เช่นลักษณะการทำงานของเวอร์ชันการโยกย้ายแบบแผน) อยู่ในสถานะเบต้า
- ข้อดี
- หลักคำสอน
- ข้อดี
- นิยมมากขึ้น
- Doctrine Query Language สามารถแสดงความสัมพันธ์ที่ซับซ้อนระหว่างข้อมูลได้ง่ายกว่าด้วยกลยุทธ์ ActiveRecord ของ Propel
- เพิ่มพฤติกรรมที่ใช้ซ้ำได้ง่ายกว่าเมื่อเปรียบเทียบกับ Propel
- การแสดงความคิดเห็นโดยใช้ DocBlock เพื่อสร้างสคีมาจะถูกฝังใน PHP จริงแทนที่จะเป็นไฟล์ XML แยกต่างหาก
- ใช้ PHP 5.3 Namespaces ได้ทุกที่
- จุดด้อย
- ต้องเรียนรู้ภาษาการเขียนโปรแกรมใหม่ทั้งหมด (Doctrine Query Language)
- ดำเนินการในแง่ของ "วิธีการวิเศษ" ในหลายสถานที่ทำให้การเติมข้อความอัตโนมัติ IDE ไร้ค่า
- ต้องการการวิปัสสนาฐานข้อมูลจึงช้ากว่า Propel เล็กน้อยตามค่าเริ่มต้น การแคชสามารถลบสิ่งนี้ แต่การแคชเพิ่มความซับซ้อนมาก
- พฤติกรรมที่น้อยลงจะรวมอยู่ใน codebase หลัก คุณสมบัติหลายอย่างที่ Propel นำเสนอนอกกรอบ (เช่นชุดซ้อน) มีให้ผ่านทางส่วนขยายเท่านั้น
- ขนาดใหญ่ของ Freakin :)
- ข้อดี
สิ่งนี้ฉันได้รวบรวม แต่ผ่านการอ่านเอกสารที่มีให้สำหรับเครื่องมือทั้งสอง - ฉันยังไม่ได้สร้างอะไรเลย
ฉันต้องการได้ยินจากผู้ที่ใช้เครื่องมือทั้งสองเพื่อแบ่งปันประสบการณ์ของพวกเขาเกี่ยวกับข้อดี / ข้อเสียของแต่ละไลบรารีและคำแนะนำของพวกเขาคืออะไร ณ จุดนี้ :)