ORM มีไว้ทำอะไรหรือครับ แล้ว Doctrine มันดีอย่างไรหรือครับ

เริ่มโดย phenomfx, 03 กุมภาพันธ์ 2011, 09:37:25

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

phenomfx

Doctrine + codeigniter
Data mapper
(ผมหัดเล่น codeigniter อยู่อาจจะมีเจ้าอื่นๆอีก ที่ไม่รู้จักครับ ช่วยแน่ะนำด้วยน่ะครับ)

ส่วน Doctrine มันมีความสามารถอะไรครับ ผมดูใน tutorial จาก http://www.phpandstuff.com/articles/codeigniter-doctrine-from-scratch-day-1-install-and-setup

ประมาณว่า เพิ่ม ลบ แก้ไข ลงใน database ได้หลายเจ้าเช่น (Mysql ,Oracle,SQLite อื่นๆ)
ที่ผมดู รู้สึกโค้ดในการเขียนจะยาวอ่ะครับ (ยังหาข้อดี นอกจากเพิ่ม ลบ แก้ไข ไม่ได้ - -a )

ความรู้ภาษาอังกฤษ ก็น้อยครับ  :P รบกวนพวกพี่ๆ บอกประโยชน์ แล้วทำไมถึงต้องพัฒนามาด้วยครับ

skink


DJJome

ORM = Object-relational mapping
ผมคิดคำอธิบายอย่างเป็นทางการไม่ถูกเหมือนกันนะครับ
ขออธิบายตามที่ผมเข้าใจว่า ไอ้เจ้า ORM เนี่ย มันจะทำให้เรามองข้อมูลเป็น Object
เช่น Object User, Object Blog

ถ้าถามว่าทำไมต้องมี ก็คือเพิ่มความสะดวกและลดความซ้ำซ้อนของ code ครับ
ยกตัวอย่างเช่น User ของเรามีข้อมูลได้แก่ first_name, last_name, email, password
ถ้าไม่ใช้ ORM เวลาเราอยากเพิ่ม User เราก็จะใช้วิธี

$query = "insert into `user` (`id`, `first_name`, `last_name`, `email`, `password`)
values('', '$first_name', '$last_name', '$email', '$password')"

แต่ถ้าใช้ ORM เราจะทำแบบนี้


$user = new User();
$user->first_name = $first_name;
$user->last_name = $last_name;
$user->email = $email;
$user->password = $password;

$user->save();


ส่วนเวลาจะอัปเดต แบบสั้นที่สุดก็ทำแบบนี้


$user = Doctrine_Core::getTable('User')->find(1); // 1 หมายถึง user id, User หมายถึงชื่อตาราง
$user->first_name = $first_name;
$user->last_name = $last_name;
$user->email = $email;
$user->password = $password;

$user->save();


โดยเบื้องหลังการสร้างคำสั่ง SQL ตัว ORM จะจัดการให้ทั้งหมด

คงจะพอเห็นภาพนะครับ

DJJome

ตอนนี้ผมใช้ทั้ง Doctrine+CI, Doctrine+Zend นะครับ
สาเหตุที่ต้องใช้คือ ลูกค้าต่างชาติระบุมา
สบายขึ้นเป็นกอง เพราะเราพูดภาษาเดียวกัน
ไม่ต้องมาแปล SQL กันให้เมื่อยตุ้ม