ProGress กับ DenoGres
ภาพรวมโดยย่อของ Deno
Deno เป็นรันไทม์ JavaScript, TypeScript และ WebAssembly ที่เกิดขึ้นใหม่อย่างรวดเร็วซึ่งสร้างขึ้นใน Rust บนเอ็นจิ้น V8 ของ Chrome พร้อมค่าเริ่มต้นที่ปลอดภัย เครื่องมือในตัว และการนำเข้า URL สำหรับการจัดการการพึ่งพา ได้รับการแนะนำโดย Ryan Dahl ผู้สร้าง Node ที่งาน JSconf EU ในปี 2018 ระหว่างการพูดคุยของเขาที่มีชื่อว่า “ 10 Things I Regret About Node ” ”
ทำไมต้อง ORM?
สำหรับผู้ที่ไม่คุ้นเคย ORM ย่อมาจาก Object-Relational Mapper "นั่นหมายความว่าอย่างไร?" คุณอาจถาม พูดง่ายๆ ก็คือ ORM ช่วยให้นักพัฒนาสามารถทำงานกับฐานข้อมูลเชิงสัมพันธ์ผ่านวัตถุ แทนที่จะใช้สตริงการสืบค้น การสลับระหว่างการเขียนโปรแกรมเชิงวัตถุและไวยากรณ์การประกาศของ SQL อาจกลายเป็นเรื่องน่าเบื่อและขัดจังหวะเวิร์กโฟลว์ระหว่างการพัฒนา ORM อนุญาตให้นักพัฒนาโต้ตอบกับฐานข้อมูลเป็นคลาสและอินสแตนซ์ เพื่อประโยชน์ของเรา มีเครื่องมือ ORM มากมายให้เลือกใช้ — น่าเสียดายที่ตัวเลือกโอเพ่นซอร์สที่ออกแบบโดยรองรับ TypeScript ระดับเฟิร์สคลาสนั้นมีจำกัด และยิ่งมีน้อยที่ได้รับการออกแบบมาสำหรับรันไทม์ Deno
DenoGres โซลูชัน
DenoGres มี TypeScript ORM สำหรับนักพัฒนาที่ทำงานกับ PostgreSQL ในรันไทม์ Deno เครื่องมือนี้ทำงานโดยพิจารณาฐานข้อมูลของผู้ใช้ รวมถึงป้ายกำกับ ประเภท และข้อจำกัด และย้ายตารางแต่ละตารางไปยังคลาสที่ขยายคลาส "Model" ที่เป็นนามธรรม สิ่งนี้ทำให้คลาสตารางเหล่านี้เข้าถึงชุดของคุณสมบัติแบบสแตติกและเมธอดที่จัดการการสืบค้นฐานข้อมูลได้อย่างปลอดภัยภายใต้ประทุน ในขณะที่ผู้ใช้สัมผัสกับการโต้ตอบของฐานข้อมูลผ่านกลไกที่คุ้นเคยของ OOP
หากต้องการเริ่มทำงานกับ DenoGres ในโปรเจ็กต์ Deno ของคุณ ให้ทำตามพร้อมท์บรรทัดคำสั่งเหล่านี้:
นำเข้า DenoGres ในโครงการของคุณ:
deno install --allow-read --allow-write --allow-net --allow-env
--allow-run --name denogres https://deno.land/x/denogres/mod.ts
denogres --init
ตรวจสอบฐานข้อมูลของคุณและสร้างแบบจำลอง:
denogres --db-pull
denogres --gui
คุณสมบัติ DenoGres 4.0
DenoGres 4.0 นำการอัปเดตที่หลากหลายมาสู่ ORM ที่ทรงพลังอยู่แล้ว บางทีสิ่งที่น่าตื่นเต้นที่สุดคือการเพิ่มธุรกรรมและฟังก์ชันการย้อนกลับเพื่อให้ผู้ใช้สามารถแบทช์ข้อความค้นหาหลายชุด รักษาความสมบูรณ์ของธุรกรรมและความสอดคล้องของกรด
Atomicity ซึ่งเป็นหลักการข้อแรกในตัวย่อของ ACID เป็นกฎที่ว่าเมื่อทำการแบทช์ข้อความค้นหาหลายรายการไปยังฐานข้อมูล การเปลี่ยนแปลงทั้งหมดควรเกิดขึ้นหรือไม่มีเลย สิ่งนี้จะปกป้องตารางที่สำคัญในฐานข้อมูลจากการเปลี่ยนแปลงที่ไม่ต้องการในกรณีของการหยุดทำงาน ปัญหาการเชื่อมต่อ หรือการสืบค้นที่ไม่สำเร็จ
หากต้องการใช้ธุรกรรมใน DenoGres ผู้ใช้สามารถเชื่อมโยง .transaction() กับส่วนท้ายของวิธีการสืบค้นอื่นๆ เพื่อสร้างหรือทำธุรกรรมต่อได้ สามารถใช้ธุรกรรมในหลายๆ รุ่นเพื่อสอบถามแบบกลุ่มได้ ซึ่งช่วยให้คุณมั่นใจได้ว่าตารางสำคัญจะซิงค์กันอยู่เสมอ เมื่อการจัดการกับตารางหนึ่งขึ้นอยู่กับอีกตารางหนึ่ง หากต้องการสิ้นสุดการทำธุรกรรม ให้เชื่อมโยง .endTransaction() กับข้อความค้นหาสุดท้าย หากการสอบถามในธุรกรรมล้มเหลว การสืบค้นก่อนหน้านี้ทั้งหมดจะถูกย้อนกลับและตารางเหล่านั้นจะกลับสู่สถานะเดิม
นี่คือตัวอย่าง:
await Person.insert('name = Alex').transaction();
await Animal.delete().where('name = Spot').transaction();
await Person.insert('nae = Rachel').endTransaction();
// throws an error since 'nae' isn't a column, rolls back all previous queries and returns the error for the query that failed
DenoGres 4.0 ยังเพิ่มความครอบคลุมของโค้ดอย่างมากเพื่อให้แน่ใจว่าจะได้รับประสบการณ์ที่คล่องตัวสำหรับทั้งผู้ใช้และนักพัฒนา มีการให้ความสนใจอย่างเข้มงวดกับกรณีการใช้งานที่อาจเกิดขึ้น ซึ่งหมายความว่าผู้ใช้สามารถใช้ DenoGres เพื่อสืบค้นข้อมูลที่ซับซ้อนมากขึ้นโดยไม่ต้องกังวลว่าข้อมูลจะหลุดจากการถอดรหัส
อนาคตของ DenoGres
เนื่องจาก DenoGres เป็นผลิตภัณฑ์โอเพ่นซอร์สที่พัฒนาภายใต้ OSLabs เครื่องมือจึงได้รับการปรับปรุงให้ดีขึ้นเรื่อย ๆ และมีคุณสมบัติมากมายที่รอคอยในอนาคต:
- ฟังก์ชันการทำงานของ SavePoint จะช่วยให้ผู้ใช้สามารถทำธุรกรรมที่ใหญ่ขึ้นซึ่งสามารถแบ่งส่วนออกได้ และอนุญาตให้มีการย้อนกลับธุรกรรมบางส่วนไปยังจุดเซฟพอยต์ สิ่งนี้มีประโยชน์สำหรับการดำเนินการกู้คืนข้อผิดพลาดที่ซับซ้อน
- เมธอด setter ที่สามารถผนวกเข้ากับโมเดลเมื่อสร้างการเชื่อมโยงกับโมเดลอื่น ทำให้สามารถเพิ่มแถวที่เกี่ยวข้องได้อย่างรวดเร็ว
- ฟังก์ชัน manyToMany จะสร้างตารางเชื่อมต่อใหม่ ทำให้ผู้ใช้ ORM สามารถเริ่มต้นความสัมพันธ์ที่ซับซ้อนมากขึ้นระหว่างตารางได้
DenoGres 4.0 ผู้ร่วมให้ข้อมูล:
- ราเชล เชแมน | LinkedIn | GitHub
- เจค็อบ มาร์ติน | LinkedIn | GitHub
- เมียกัสเซ่น | LinkedIn | GitHub
- อเล็กซานเดอร์ ลิน | LinkedIn | GitHub





































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)