ทำไมโปรแกรมเมอร์จำนวนมากถึงเกลียดชังความแพร่หลายของวัตถุ?


9

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

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

ข้อควรระวังที่จำเป็นสำหรับการทำงานนี้คือ:

  • อย่าปล่อยให้การอ้างอิงวัตถุที่ไม่แน่นอนหนีออกมาหรือเข้าสู่ชั้นความชุก คุณต้องการพร็อกซีหรือแผน OID บางประเภทราวกับว่าคุณกำลังทำ RPC (นี่เป็นความผิดพลาดที่พบบ่อยของมือใหม่ที่ชื่อเล่นว่า ' ปัญหาการล้างบาป ')
  • ตรรกะทั้งหมดที่เข้าถึงได้จากการโทรต้องกำหนดอย่างสมบูรณ์และต้องไม่ทำการโทร I / O หรือ OS ที่มีความหมายทางธุรกิจ การเขียนไปยังบันทึกการวินิจฉัยอาจเป็นไปได้ แต่การได้รับเวลาของระบบหรือการเปิดใช้งานตัวแทนไม่ตรงกัน นี่คือเพื่อให้เจอร์นัลรีเพลย์เหมือนกันแม้ว่าจะถูกกู้คืนบนเครื่องอื่นหรือในเวลาอื่น (รหัสความชุกส่วนใหญ่ให้การโทรเวลาอื่นเพื่อรับการบันทึกเวลาธุรกรรม)
  • การทำงานพร้อมกันของนักเขียนแนะนำความคลุมเครือในการตีความวารสารดังนั้นจึงเป็นสิ่งต้องห้าม

เป็นเพราะ ...

  • คนที่ได้รับการพัฒนารสชาติที่ไม่ดีสำหรับพวกเขาหลังจากที่พยายามที่จะใช้หนึ่งในโครงการที่ไม่เหมาะสมเป็นอย่างดี*ไปได้หรือไม่
  • เคลาส์ Wuestefeld ของการสนับสนุนพร่า หันคนออก ?
  • คนที่ชอบโมเดลการเขียนโปรแกรมแบบบังคับนั้นไม่ชอบการแยก I / O ออกจากการคำนวณเลือกที่จะใช้ interleave การคำนวณด้วย I / O และการเรียกเธรด?
  • เลเยอร์ความชุกนั้นเป็นแนวคิดที่เรียบง่ายและผูกพันกับลักษณะของเฟรมเวิร์กที่พวกเขาอาศัยอยู่โดยปกติพวกมันจะถูกรีดแบบกำหนดเองสำหรับโครงการ
  • มันยากเกินไปที่จะทำตามสิ่งที่คุณต้องระวังไม่ให้ทำ
  • หัวของมือใหม่ดูเหมือนจะระเบิดเมื่อเผชิญหน้ากับสิ่งที่ไม่ใช่แอพขับเคลื่อนฐานข้อมูลแบบสองชั้นที่พวกเขาเรียนรู้ที่จะเขียนในโรงเรียน ;)

* ทั้งเหมาะกับชุดข้อมูลในแรม , คุณไม่จำเป็นต้องเห็นพ้องด้วยนักเขียนและคุณไม่ต้องทำเฉพาะกิจแบบสอบถามรายงานหรือส่งออกไปยังคลังข้อมูล ด้วยความขอโทษต่อ SQLite ความชุกคือการปรับปรุงไฟล์บันทึกไม่ใช่การแทนที่สำหรับ Oracle


เอเอชเอ ฉันสงสัยว่ามันมีชื่อหรือไม่ มันทำให้รู้สึกถึงฉันเสมอฉันไม่เคยมีชื่อมัน
greyfade

9
คุณกำลังพูดเรื่องอะไร
TheLQ

นี่เป็นครั้งแรกที่ฉันได้ยินเรื่องนี้ มันคืออะไร?
Jonn

เพิ่มคำอธิบายแล้ว
Jeffrey Hantin

1
Ohhh .. ฉันรู้แนวคิด แต่ฉันไม่เคยทำแบบนี้มาก่อน ดูดีสวยสำหรับฉัน ฉันค่อนข้างแน่ใจว่ามันไม่ใช่สิ่งที่ devs มาก "เกลียดอย่างแน่นอน"
Jonn

คำตอบ:


6

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

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

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


11

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


ใช่ฉันสับสนเล็กน้อย พวกเขาดูเหมือนเครื่องมือที่ดีถ้าคุณใช้พวกเขาด้วยเหตุผลที่ถูกต้อง
Matt Olenik

ฉันแค่พูดแบบนี้เพราะฉันรู้สึกเศร้าใจอย่างมากกับเพื่อนร่วมงาน
Jeffrey Hantin

1
@Jeffrey Hantin: พวกเขาฟังดูขี้เกียจและปิดใจ
Steven Evers

1
โอ้และสิ่งสำคัญที่แท้จริงของรูปแบบคือc2.com/cgi/wiki?TransactionTape
Jeffrey Hantin

4

คำตอบของคำถามคือในขณะที่ทฤษฎีนั้นง่าย แต่การฝึกฝนไม่ใช่

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

การตรวจสอบการทำธุรกรรมใด ๆ เช่น CICS, Tuxedo, Weblogic, Websphere, JBOSS หรือ. NET จะให้สิ่งอำนวยความสะดวกทั้งหมดในลักษณะที่สะอาดและผ่านการทดสอบ และฐานข้อมูลใด ๆ จะให้การทำธุรกรรม / การคงอยู่ "พอ" สำหรับแอปพลิเคชันส่วนใหญ่

ส่วนใหญ่มันเป็นกรณีของล้อที่ถูกคิดค้นและสมบูรณ์แบบมานานแล้ว


สิ่งนี้และแนวโน้มของ "สถาปนิก" หลายคนที่จะได้รับ "รสนิยม" ที่พวกเขาต้องการที่จะผลักดันให้เข้ากับอะไรก็ตามไม่ว่าการออกแบบนั้นจะไม่เหมาะสมสำหรับปัญหาที่ต้องแก้ไข
jwenting

@ jwenting ดังนั้นสิ่งที่ตกอยู่ภายใต้จุด
Jeffrey Hantin

2

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.