Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

ธุรกรรม Master Ruby on Rails:5 วิธีปฏิบัติการออกแบบที่จำเป็น

ปัญหาความสมบูรณ์ของข้อมูลเป็นหนึ่งในปัญหาฐานข้อมูลที่พบบ่อยที่สุดที่นักพัฒนา Rails เผชิญ นอกจากช่วยให้ตรวจสอบได้อย่างเหมาะสมแล้ว การบล็อกธุรกรรมที่ออกแบบอย่างถูกต้องยังช่วยให้มั่นใจได้ว่าข้อมูลของคุณไม่ได้ถูกสร้างหรืออัปเดตเพียงบางส่วน

อย่างไรก็ตาม ธุรกรรมยังสามารถเป็นอันตรายต่อแอปพลิเคชันของคุณ — หรือแม้แต่ทำลายฐานข้อมูลทั้งหมดของคุณ — เมื่อไม่ได้รับการออกแบบอย่างเหมาะสม

บทความนี้เสนอชุดแนวทางปฏิบัติที่ดีสำหรับการทำงานกับธุรกรรม เคล็ดลับนั้นค่อนข้างเรียบง่าย แต่จะช่วยให้ธุรกรรมของคุณกันกระสุน อ่านได้ และค่อนข้างปลอดภัย

มาดำดิ่งกันเถอะ!

1. ใช้วิธี Bang ใน Rails เมื่อเป็นไปได้

ใน Rails เวอร์ชันของเมธอดที่มี 08 สามารถให้ความมั่นใจว่าจะเกิดข้อผิดพลาดขึ้นเมื่อมีบางอย่างผิดพลาด

ตัวอย่างเช่น 13 วิธีการก็มีอยู่ใน 27 รุ่น คุณอาจต้องการใช้เวอร์ชันนี้ในคอนโทรลเลอร์หากคุณไม่ต้องการแจ้งข้อผิดพลาดใดๆ:

 

วิธีการข้างต้นใช้ไม่ได้ผลดีในการทำธุรกรรม โดยใช้ 30 เราไม่สามารถย้อนกลับกระบวนการได้เมื่อเกิดข้อผิดพลาด นั่นเป็นสาเหตุว่าทำไมการใช้ 43 จึงเป็นสิ่งสำคัญ เวอร์ชันของวิธีการ:

 

จากที่กล่าวมาข้างต้น ธุรกรรมจะสำเร็จแม้ว่าจะไม่ได้สร้างบันทึกการเป็นสมาชิก และเราจะจบลงด้วยโครงสร้างข้อมูลที่เละเทะในฐานข้อมูล

หากคุณใช้เวอร์ชันต่อไปนี้ ธุรกรรมจะคืนกลับเนื่องจาก 59 ข้อผิดพลาด:

 

2. จัดการข้อผิดพลาดในธุรกรรม Rails อย่างเหมาะสม

เมื่อพูดถึงข้อผิดพลาดในการทำธุรกรรม มีกฎสองสามข้อที่คุณควรเคารพ เมื่อปฏิบัติตามกฎเหล่านี้ คุณจะมีโค้ดที่อ่านง่ายและทำงานได้ดีซึ่งจะไม่สร้างความสับสนในหมู่นักพัฒนารายอื่นหรือมีพฤติกรรมแปลกๆ ที่แก้ไขจุดบกพร่องได้ยาก

อย่าช่วยเหลือจาก 62

70 เป็นข้อผิดพลาดพิเศษที่เกิดขึ้นเมื่อมีบางสิ่งในระดับฐานข้อมูลผิดพลาด อย่าช่วยเหลือจากข้อผิดพลาดนี้ คุณควรได้รับแจ้งอย่างชัดเจนเสมอเมื่อมีสิ่งผิดปกติเกิดขึ้นกับการสืบค้นฐานข้อมูล

หลีกเลี่ยงรหัสต่อไปนี้:

 

ใช้การช่วยเหลือในระดับที่เหมาะสม

หากคุณใช้การช่วยเหลือในระดับต่อไปนี้ คุณจะพบข้อผิดพลาด:

 

ธุรกรรมไม่ย้อนกลับเนื่องจากคุณตรวจพบข้อผิดพลาด ปล่อยให้ข้อผิดพลาดเกิดขึ้นและตรวจจับได้นอกบล็อกธุรกรรม:

 

ในแนวทางข้างต้น ธุรกรรมจะย้อนกลับในกรณีที่เกิดข้อผิดพลาด และคุณตรวจพบข้อผิดพลาด นี่เป็นแนวทางที่ถูกต้องในการตรวจจับข้อผิดพลาดที่เกิดขึ้นภายในธุรกรรมโดยไม่ต้องเขียนทับพฤติกรรมของธุรกรรม

อย่าจับข้อผิดพลาดทั่วไป

คุณควรหลีกเลี่ยงการตรวจจับข้อผิดพลาดทั่วไป เช่น 80 หรือ 95 . นี่เป็นเหมือนกฎทั่วไปสำหรับโค้ดที่อ่านและทดสอบได้ง่าย แต่ก็คุ้มค่าที่จะกล่าวถึง

การจับข้อผิดพลาดเหล่านี้อาจทำให้การดีบักยากขึ้น เนื่องจากตำแหน่งอื่นๆ ในโค้ดอาจทำให้เกิดข้อผิดพลาดได้ การดำเนินการนี้อาจทำให้ปัญหาร้ายแรงบางอย่างในแอปของคุณเงียบลง ซึ่งไม่จำเป็นต้องเกี่ยวข้องกับสถานที่ที่คุณช่วยเหลือ

ใช้ข้อผิดพลาดการย้อนกลับเริ่มต้นของ ActiveRecord อย่างชาญฉลาด

ActiveRecord มีคลาสข้อผิดพลาดเฉพาะที่คุณสามารถใช้ภายในธุรกรรมเพื่อทำการย้อนกลับโดยไม่โต้ตอบ คุณย้อนกลับธุรกรรมโดยการเพิ่ม 103 ข้อผิดพลาด แต่ข้อผิดพลาดจะไม่เกิดขึ้นภายนอก เช่นเดียวกับที่เกิดขึ้นกับข้อผิดพลาดอื่นๆ โปรดคำนึงถึงพฤติกรรมนี้และใช้อย่างชาญฉลาด

3. รู้ว่าเมื่อใดควรหลีกเลี่ยงการใช้ธุรกรรมใน Rails

เช่นเดียวกับสิ่งอื่นๆ คุณไม่ควรใช้ธุรกรรมมากเกินไปในโค้ดของคุณ ตัวอย่างเช่น ข้อผิดพลาดทั่วไปคือการรวมคำถามเพียงคำเดียวไว้ในธุรกรรมของคุณ สิ่งนี้ไม่สมเหตุสมผลเพราะหากการสืบค้นไม่สำเร็จ ก็ไม่จำเป็นต้องย้อนกลับสิ่งใดเลย

ข้อผิดพลาดทั่วไปอีกประการหนึ่งคือการห่อโค้ดที่ไม่เกี่ยวข้องกับการเรียกฐานข้อมูลของคุณลงในธุรกรรม คุณควรหลีกเลี่ยงวิธีการดังกล่าว เนื่องจากธุรกรรมจะระงับการเชื่อมต่อ เว้นแต่ว่าโค้ดภายในบล็อกจะดำเนินการ จำกัดรหัสภายในบล็อกให้เรียกเฉพาะฐานข้อมูลของคุณ หากเป็นไปได้

4. ทำความเข้าใจข้อเสียของธุรกรรม

ธุรกรรมช่วยรักษาความสมบูรณ์ของข้อมูลภายในฐานข้อมูล แต่คุณควรคำนึงถึงข้อเสียด้วย ตัวอย่างเช่น การสืบค้นที่อยู่ในบล็อกธุรกรรมจะใช้ทรัพยากร DB มากกว่าการสืบค้นเดี่ยว

ข้อเสียเปรียบอีกประการหนึ่งของการใช้ธุรกรรมคือทำให้โค้ดซับซ้อนมากขึ้น ธุรกรรมอาจทำให้รหัสของคุณอ่านน้อยลงเมื่อใช้อย่างไม่ถูกต้อง

5. ใช้บล็อกธุรกรรมในบริบทที่ถูกต้อง

คุณสามารถใช้วิธีการทำธุรกรรมเมื่อคลาสสืบทอดมาจาก 113 ชั้นเรียน นี่ไม่ได้หมายความว่าเวอร์ชันที่คุณใช้ไม่สำคัญ แม้ว่ามันอาจจะไม่สำคัญจากมุมมองด้านการใช้งาน แต่มันสำคัญในแง่ของการทำให้แน่ใจว่าโค้ดของคุณสามารถอ่านได้

เวอร์ชันทั่วไปสามเวอร์ชันใช้วิธีการธุรกรรม:

 

เมื่อคุณใช้หลายโมเดลและผสมผสานการเรียกใช้เมธอดอินสแตนซ์กับคลาสภายในบล็อก คุณควรใช้ 121 :

 

หากคุณจัดการกับโค้ดที่เป็นของโมเดลที่กำหนดเป็นส่วนใหญ่ ให้เรียกใช้วิธีธุรกรรมในคลาส:

 

เมื่อคุณดำเนินการบนอินสแตนซ์แบบจำลอง คุณควรเรียกใช้วิธีธุรกรรมในระดับอินสแตนซ์:

 

แน่นอนว่ากฎเหล่านี้ไม่เป็นทางการ เป็นเพียงคำแนะนำเพื่อทำให้โค้ดอ่านง่ายขึ้น

ขั้นตอนถัดไป:ตรวจสอบธุรกรรมในโครงการ Ruby on Rails ของคุณ

ฉันหวังว่าคุณจะพบว่าเคล็ดลับเหล่านี้ในการทำงานกับธุรกรรมใน Ruby on Rails มีประโยชน์

เราได้ครอบคลุมถึงความสำคัญของการออกแบบธุรกรรม Rails อย่างเหมาะสมเพื่อปรับปรุงความสมบูรณ์ของข้อมูลและรับรองว่ากระบวนการของคุณดำเนินไปโดยไม่มีผลข้างเคียงที่น่าแปลกใจ

อย่างไรก็ตาม นโยบายการจัดการข้อผิดพลาดที่เหมาะสมไม่เพียงแต่มีประโยชน์เมื่อใช้ธุรกรรมเท่านั้น แต่ยังช่วยปรับปรุงโค้ดเบสทั้งหมดของคุณด้วย โปรดทราบว่าในครั้งต่อไปที่คุณคาดว่าโค้ดของคุณจะแสดงข้อผิดพลาด

ตอนนี้เป็นเวลาที่ดีในการตรวจสอบธุรกรรมในการออกแบบโปรเจ็กต์ Ruby on Rails ของคุณเพื่อหลีกเลี่ยงข้อผิดพลาด ออกแบบเพื่อการสื่อสารที่มีประสิทธิภาพและเชื่อถือได้กับฐานข้อมูลของคุณเพื่อทำให้แอปพลิเคชันของคุณมีเสถียรภาพมากขึ้น

ขอให้สนุกกับการเขียนโค้ด!

ปล. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่เผยแพร่ สมัครรับจดหมายข่าว Ruby Magic ของเราและไม่พลาดแม้แต่โพสต์เดียว! ธุรกรรม Master Ruby on Rails:5 วิธีปฏิบัติการออกแบบที่จำเป็น

ปาเวล ดอมบรอสกี้

Paweł ผู้เขียนรับเชิญของเราเป็นแฟนตัวยงของโอเพ่นซอร์สและผู้แสวงหาการเติบโต โดยมีประสบการณ์มากกว่าทศวรรษในการเขียนสำหรับทั้งมนุษย์และคอมพิวเตอร์ เขาเชื่อมโยงทุกจุดเพื่อสร้างซอฟต์แวร์คุณภาพสูงและสร้างความสัมพันธ์อันมีค่ากับผู้คนและธุรกิจ

บทความทั้งหมดโดย Paweł Dębrowski