ActiveRecord ต่างกับ Repository pattern ยังไง?

ActiveRecord Pattern ,Repository Pattern (Data Mapper pattern) คือวิธีการที่ใช้ต่อ Database ซึ่งใน Framework ต่างๆจะมีส่วนที่ใช้ ORM (Object Relational Mapping) โดยทั่วไปแล้วจะใช้อยู่ 2 Pattern

ตัวอย่าง ActiveRecord Pattern

Entity e = Entity.create();
e.setSomeField("abc");
e.save();

ตัวอย่าง Repository Pattern

Entity e = Entity.create();
e.setSomeField("abc");
repository.save(e);

ลักษณะโดยทั่วไป ActiveRecord Pattern

เขียนง่าย โค้ดน้อย ใช้เพียง 1 Entity class ต่อ 1 Table รวม business logic อยู่ใน Entity Class และ Entity Class รู้จักกับ Persistence Layer โดยตรง สังเกตจะเรียกคำสั่ง e.save() ได้เลย ส่วนใหญ่ PHP,Ruby Framework จะเลือก Pattern นี้โดย default

ลักษณะโดยทั่วไป Repository Pattern

แบ่งแยก Entity class ให้ไม่รู้จักกับ Persistence Layer โดยเพิ่ม Repository class เข้ามาเป็นส่วนของ Persistence Layer และย้าย business logic ออกไปที่ service layer เข้ามาจัดการเรื่อง Seperation of concern แยกสัดส่วนการทำงานอย่างชัดเจน ทำให้เขียน Unittest ได้ง่าย ส่วนใหญ่แล้ว C#,Java Spring จะเลือก Pattern นี้โดย default

และ TypeORM TypeORM – Amazing ORM for TypeScript and JavaScript ออกแบบมารองรับทั้ง 2 Pattern เลย

แล้วอะไรดีกว่ากัน?

Project งานที่เป็นระบบใหญ่ทำงานเป็นทีมใหญ่ อาจมีการเปลี่ยน Database Persistence Layer เช่น H2 หรือ sqllite เป็นการเรียกข้อมูล API แทน ให้เลือก Repository Pattern เพราะว่าได้มีการออกแบบแยกการทำงานเป็นสัดส่วน เราสามารถแก้ในส่วน Persistence Layer เป็นการเรียก API ได้ ในขณะที่ ActiveRecord ทำไม่ได้

Project งานที่ระบบเล็ก ทำคนเดียว ก็จะเหมาะกับ ActiveRecord เพราะต้องการความไวในการทำงาน ไม่ต้องมี Unittest และคงไม่มีการเปลี่ยน Database Persistence Layer ไปใช้ API เต็มที่ก็เปลี่ยน driver เช่นจาก MySQL เป็น Postgresql เป็นต้น

Related posts:

This entry was posted in ไม่มีหมวดหมู่. Bookmark the permalink.