การผูกขาดเป็นปีศาจและซิงเกิลที่มีสถานะที่ไม่สามารถอ่านได้ / ไม่แน่นอนเป็นปัญหาที่เกิดขึ้นจริง ...
หลังจากอ่านSingletons เป็น Liars ทางพยาธิวิทยาตามคำแนะนำในคำตอบของ jasonฉันได้พบชิ้นอาหารอันโอชะเล็ก ๆ น้อย ๆ นี้ซึ่งเป็นตัวอย่างที่ดีที่สุดในการนำเสนอว่า singletons ถูกใช้ในทางที่ผิดอย่างไร
โลกไม่ดีเพราะ:
- มันทำให้เกิดความขัดแย้ง namespace
- ข มันเผยให้เห็นรัฐในแบบที่ไม่รับประกัน
เมื่อพูดถึง Singletons
- วิธี OO ที่ชัดเจนในการเรียกพวกเขาป้องกันความขัดแย้งดังนั้นให้ชี้ ไม่ใช่ปัญหา
- ข ซิงเกิลที่ไม่มีรัฐคือ (เช่นโรงงาน) ไม่ใช่ปัญหา Singletons ที่มีสถานะสามารถอยู่ในสองหมวดหมู่อีกครั้งซึ่งไม่เปลี่ยนรูปหรือเขียนหนึ่งครั้งและอ่านจำนวนมาก (ไฟล์ config / คุณสมบัติ) สิ่งเหล่านี้ไม่เลว Singletons ที่ไม่แน่นอนซึ่งเป็นชนิดของผู้อ้างอิงเป็นคนที่คุณพูดถึง
ในคำสั่งสุดท้ายเขาอ้างถึงแนวคิดของบล็อกของ 'ซิงเกิลตันเป็นคนโกหก'
สิ่งนี้นำไปใช้กับการผูกขาดได้อย่างไร
ในการเริ่มเกมผูกขาด:
- เราสร้างกฎก่อนเพื่อให้ทุกคนอยู่ในหน้าเดียวกัน
- ทุกคนได้รับการเริ่มต้นที่เท่าเทียมกันตั้งแต่เริ่มเกม
- มีการนำเสนอกฎชุดเดียวเท่านั้นเพื่อหลีกเลี่ยงความสับสน
- กฎไม่ได้รับอนุญาตให้เปลี่ยนตลอดทั้งเกม
ตอนนี้สำหรับใครก็ตามที่ไม่ได้เล่นผูกขาดจริงๆมาตรฐานเหล่านี้เหมาะที่สุด ความพ่ายแพ้ในการผูกขาดเป็นเรื่องยากที่จะกลืนเพราะการผูกขาดเป็นเรื่องเกี่ยวกับเงินถ้าคุณแพ้คุณต้องระวังผู้เล่นที่เหลือในเกมจนจบอย่างระมัดระวังและการสูญเสียมักจะรวดเร็วและแหลก ดังนั้นกฎมักจะได้รับการบิดในบางจุดเพื่อให้บริการผลประโยชน์ของตัวเองของผู้เล่นบางคนค่าใช้จ่ายของผู้อื่น
ดังนั้นคุณกำลังผูกขาดกับเพื่อน ๆ บ๊อบโจและเอ็ด คุณกำลังสร้างอาณาจักรของคุณอย่างรวดเร็วและแย่งส่วนแบ่งตลาดในอัตราที่ชี้แจง คู่แข่งของคุณอ่อนกำลังลงและคุณเริ่มได้กลิ่นเลือด (เปรียบเปรย) บ๊อบคู่หูของคุณนำเงินทั้งหมดของเขาไปใช้กับคุณสมบัติที่มีมูลค่าต่ำที่สุดในการสร้างกริดให้ได้มากที่สุดเท่าที่จะทำได้ แต่เขาไม่ได้รับผลตอบแทนจากการลงทุนสูงอย่างที่เขาคาดไว้ บ๊อบเป็นคนโชคไม่ดีเดินทางมาที่ Boardwalk และตัดตอนมาจากเกม
ตอนนี้เกมเริ่มต้นจากการทอยลูกเต๋าอย่างเป็นมิตรกับธุรกิจที่จริงจัง บ๊อบเป็นตัวอย่างของความล้มเหลวและโจและเอ็ดไม่ต้องการที่จะจบลงเช่น 'ผู้ชายคนนั้น' ดังนั้นการเป็นผู้เล่นชั้นนำของคุณในทันทีกลายเป็นศัตรู Joe และ Ed เริ่มฝึกฝนการเทรดภายใต้โต๊ะหลังการอัดฉีดเงินการแลกเปลี่ยนบ้านโดยไม่คำนึงถึงคุณค่าและโดยทั่วไปทุกอย่างจะทำให้คุณอ่อนแอในฐานะผู้เล่นจนกว่าจะมีผู้เล่นคนใดคนหนึ่งขึ้นไปด้านบน
จากนั้นแทนที่จะเป็นหนึ่งในผู้ชนะกระบวนการเริ่มต้นใหม่ทั้งหมด ทันใดนั้นกฎที่ จำกัด ได้กลายเป็นเป้าหมายที่เคลื่อนไหวและเกมจะเสื่อมถอยลงในรูปแบบของการโต้ตอบทางสังคมที่จะสร้างรากฐานของรายการทีวีเรียลลิตี้ทุกรายการตั้งแต่ผู้รอดชีวิต ทำไมเนื่องจากกฎมีการเปลี่ยนแปลงและไม่มีมติเกี่ยวกับวิธี / ทำไม / สิ่งที่พวกเขาควรจะเป็นตัวแทนและที่สำคัญกว่านั้นไม่มีใครตัดสินใจ ผู้เล่นทุกคนในเกม ณ จุดนั้นได้สร้างกฎของตัวเองและความโกลาหลจนผู้เล่นสองคนเหนื่อยเกินกว่าที่จะติดตามปริศนาและค่อย ๆ ยอมแพ้
ดังนั้นหากกฎของเกมแสดงถึงซิงเกิลตันอย่างถูกต้องกฎการผูกขาดจะเป็นตัวอย่างของการละเมิด
สิ่งนี้นำไปใช้กับการเขียนโปรแกรมได้อย่างไร
นอกเหนือจากปัญหาความปลอดภัยของเธรดและการซิงโครไนซ์ที่เห็นได้อย่างชัดเจนทั้งหมดที่มีซิงเกิลตันที่ไม่แน่นอนปรากฏขึ้น ... หากคุณมีชุดข้อมูลหนึ่งชุดนั่นคือความสามารถในการอ่าน / จัดการโดยหลาย ๆ แหล่งที่มาที่แตกต่างกัน อาจเป็นเวลาที่ดีในการย้อนกลับและถามว่า "ฉันใช้โครงสร้างข้อมูลชนิดที่ถูกต้องที่นี่"
โดยส่วนตัวฉันได้เห็นการใช้โปรแกรมเมอร์ในทางที่ผิดโดยใช้มันเป็นร้านค้าฐานข้อมูลข้ามเธรดที่บิดเบี้ยวภายในแอปพลิเคชัน เมื่อทำงานกับโค้ดโดยตรงฉันสามารถยืนยันได้ว่ามันช้า (เนื่องจากการล็อกเธรดทั้งหมดที่จำเป็นเพื่อทำให้เธรดปลอดภัย) และฝันร้ายที่จะทำงาน (เนื่องจากลักษณะที่ไม่แน่นอน / ไม่ต่อเนื่องของข้อบกพร่องการซิงโครไนซ์) และ แทบจะเป็นไปไม่ได้ที่จะทดสอบภายใต้เงื่อนไข 'การผลิต' แน่นอนว่าระบบสามารถได้รับการพัฒนาโดยใช้การโพล / การส่งสัญญาณเพื่อเอาชนะปัญหาด้านประสิทธิภาพบางอย่าง แต่นั่นไม่ได้แก้ปัญหาด้วยการทดสอบและทำไมต้องกังวลเมื่อฐานข้อมูล 'ของจริง' สามารถบรรลุฟังก์ชั่นเดียวกันในที่แข็งแกร่งกว่า / ลักษณะที่ปรับขนาดได้
Singleton เป็นเพียงตัวเลือกหากคุณต้องการสิ่งที่ Singleton มอบให้ อินสแตนซ์อ่านอย่างเดียวแบบเขียนของวัตถุ กฎเดียวกันนั้นควรเรียงซ้อนกับคุณสมบัติ / สมาชิกของวัตถุเช่นกัน