Domain Objects เป็นรหัสสร้างปัญหาซับซ้อน / บอบบาง:
อันดับ / ซีเรียลไลซ์
หากคุณจัดเก็บวัตถุเป็นกุญแจสำคัญจะทำให้กราฟวัตถุเป็นอนุกรมที่ซับซ้อนมาก คุณจะได้รับstackoverflow
ข้อผิดพลาดเมื่อทำการทำให้ไร้เดียงสาเป็นอนุกรมกับ JSON หรือ XML เนื่องจากการเรียกซ้ำ จากนั้นคุณจะต้องเขียน serializer แบบกำหนดเองที่แปลงวัตถุจริงเพื่อใช้รหัสของพวกเขาแทนการทำให้เป็นอันดับวัตถุอินสแตนซ์และสร้างการสอบถามซ้ำ
ส่งผ่านวัตถุเพื่อความปลอดภัยประเภท แต่เก็บรหัสแล้วคุณสามารถมีวิธีการเข้าถึงที่ขี้เกียจโหลดเอนทิตีที่เกี่ยวข้องเมื่อมันถูกเรียก การแคชระดับที่สองจะดูแลการโทรที่ตามมา
การรั่วไหลของการอ้างอิงที่ลึกซึ้ง:
หากคุณใช้โดเมนวัตถุในตัวสร้างเช่นเดียวกับที่คุณมีคุณจะสร้างการอ้างอิงแบบวงกลมซึ่งจะยากมากที่จะอนุญาตให้เรียกคืนหน่วยความจำสำหรับวัตถุที่ไม่ได้ใช้งาน
สถานการณ์ในอุดมคติ:
Id ทึบแสงเทียบกับ int / long:
id
ควรจะเป็นตัวระบุทึบแสงสมบูรณ์ที่ดำเนินการไม่มีข้อมูลเกี่ยวกับสิ่งที่จะระบุ แต่ควรเสนอการตรวจสอบว่าเป็นตัวระบุที่ถูกต้องในระบบของมัน
ประเภทดิบทำลายสิ่งนี้:
int
, long
และString
มีใช้กันมากที่สุดประเภทดิบสำหรับตัวบ่งชี้ในระบบ RDBMS มีประวัติอันยาวนานของเหตุผลเชิงปฏิบัติที่ย้อนกลับไปหลายสิบปีและพวกเขาล้วน แต่ถูกประนีประนอมซึ่งเหมาะกับการออมspace
หรือการออมtime
หรือทั้งสองอย่าง
รหัสลำดับเป็นผู้กระทำผิดที่เลวร้ายที่สุด:
เมื่อคุณใช้รหัสลำดับคุณจะเก็บข้อมูลความหมายชั่วคราวลงในรหัสโดยค่าเริ่มต้น ซึ่งไม่เลวจนกว่าจะมีการใช้งาน เมื่อผู้คนเริ่มเขียนตรรกะทางธุรกิจที่เรียงลำดับหรือกรองคุณภาพความหมายของรหัสแล้วพวกเขาก็กำลังสร้างโลกแห่งความเจ็บปวดสำหรับผู้ดูแลในอนาคต
String
เขตข้อมูลเป็นปัญหาเนื่องจากนักออกแบบที่ไร้เดียงสาจะเก็บข้อมูลลงในเนื้อหาโดยปกติจะมีความหมายทางโลกเช่นกัน
เหล่านี้ทำให้มันเป็นไปไม่ได้ที่จะสร้างระบบกระจายข้อมูลเป็นอย่างดีเพราะ12437379123
เป็นไม่ได้ทั่วโลกที่ไม่ซ้ำกัน โอกาสที่โหนดอื่นในระบบแบบกระจายจะสร้างเรกคอร์ดที่มีหมายเลขเดียวกันนั้นรับประกันได้ค่อนข้างมากเมื่อคุณได้รับข้อมูลเพียงพอในระบบ
จากนั้นแฮ็กก็เริ่มทำงานและสิ่งต่าง ๆ ทั้งหมดกลายเป็นกองนึ่ง
การเพิกเฉยระบบการกระจายขนาดใหญ่ ( กลุ่ม ) มันกลายเป็นฝันร้ายที่สมบูรณ์เมื่อคุณเริ่มพยายามแบ่งปันข้อมูลกับระบบอื่นเช่นกัน โดยเฉพาะอย่างยิ่งเมื่อระบบอื่นไม่อยู่ภายใต้การควบคุมของคุณ
คุณจบลงด้วยปัญหาเดียวกันวิธีการทำให้ id ของคุณไม่ซ้ำกันทั่วโลก
UUID ถูกสร้างและสร้างมาตรฐานด้วยเหตุผล:
UUID
สามารถประสบปัญหาทั้งหมดที่กล่าวข้างต้นขึ้นอยู่กับที่Version
คุณใช้
Version 1
ใช้ที่อยู่ MAC และเวลาในการสร้างรหัสเฉพาะ สิ่งนี้ไม่ดีเนื่องจากมีข้อมูลความหมายเกี่ยวกับที่ตั้งและเวลา นั่นไม่ใช่ปัญหาในตัวมันเองก็คือเมื่อนักพัฒนาที่ไร้เดียงสาเริ่มพึ่งพาข้อมูลนั้นสำหรับตรรกะทางธุรกิจ นอกจากนี้ยังมีการรั่วไหลของข้อมูลซึ่งอาจถูกนำไปใช้ประโยชน์ในความพยายามบุกรุก
Version 2
ใช้ผู้ใช้UID
หรือGID
และโดมิโนUID
หรือGUI
ในสถานที่ที่เวลาจากVersion 1
นี้เป็นสิ่งที่ไม่ดีเท่าVersion 1
ที่การรั่วไหลของข้อมูลและความเสี่ยงข้อมูลที่จะใช้ในตรรกะทางธุรกิจ
Version 3
คล้ายกัน แต่แทนที่ที่อยู่ MAC และเวลาด้วยMD5
แฮชของอาเรย์บางอย่างbyte[]
จากสิ่งที่มีความหมายอย่างแน่นอน ไม่มีการรั่วไหลของข้อมูลที่ต้องกังวลเกี่ยวกับคือไม่สามารถกู้คืนจากbyte[]
UUID
นี่เป็นวิธีที่ดีในการสร้างUUID
ฟอร์มอินสแตนซ์และคีย์ภายนอกของการจัดเรียงบางอย่าง
Version 4
ขึ้นอยู่กับตัวเลขสุ่มซึ่งเป็นทางออกที่ดีมันไม่มีข้อมูลความหมายอย่างแน่นอน แต่ไม่สามารถสร้างใหม่ได้อย่างแน่นอน
Version 5
เป็นเหมือนVersion 4
แต่ใช้แทนsha1
md5
คีย์โดเมนและคีย์ข้อมูลธุรกรรม
การตั้งค่าของฉันสำหรับรหัสวัตถุโดเมนคือการใช้Version 5
หรือVersion 3
หากถูก จำกัด ไม่ให้ใช้Version 5
ด้วยเหตุผลทางเทคนิคบางอย่าง
Version 3
เหมาะสำหรับข้อมูลธุรกรรมที่อาจแพร่กระจายไปในหลาย ๆ เครื่อง
ยกเว้นว่าคุณถูก จำกัด ด้วยพื้นที่ให้ใช้ UUID:
พวกเขารับประกันว่าจะไม่ซ้ำกันทิ้งข้อมูลจากฐานข้อมูลหนึ่งและโหลดลงในอีกคุณไม่ต้องกังวลเกี่ยวกับรหัสซ้ำที่จริงอ้างอิงข้อมูลโดเมนที่แตกต่างกัน
Version 3,4,5
ทึบแสงอย่างสมบูรณ์และนั่นคือวิธีที่พวกเขาควรจะเป็น
คุณสามารถมีคอลัมน์เดียวเป็นคีย์หลักที่มีUUID
และจากนั้นคุณสามารถมีดัชนีที่ไม่ซ้ำกันผสมสำหรับสิ่งที่จะได้รับคีย์หลักคอมโพสิตธรรมชาติ
การจัดเก็บข้อมูลไม่ได้จะต้องมีCHAR(36)
อย่างใดอย่างหนึ่ง คุณสามารถจัดเก็บUUID
ในฟิลด์ไบต์ / บิต / หมายเลขดั้งเดิมสำหรับฐานข้อมูลที่กำหนดตราบเท่าที่ยังสามารถจัดทำดัชนีได้
มรดก
หากคุณมีประเภทดิบและไม่สามารถเปลี่ยนพวกเขาคุณยังสามารถแยกพวกเขาออกในรหัสของคุณ
การใช้Version 3/5
ของUUID
คุณสามารถผ่านในClass.getName()
+ String.valueOf(int)
เป็น a byte[]
และมีคีย์อ้างอิงทึบแสงที่สามารถกู้คืนได้และกำหนดได้