Singletons ในขณะที่มีประโยชน์ในการสร้างความมั่นใจในตัวอย่างเดียวของชั้นเรียนมีข้อเสียหลายประการที่สามารถส่งผลกระทบต่อความสามารถในการบำรุงรักษาและความสามารถในการปรับขนาดของแอปพลิเคชันรวมถึงผู้ที่ใช้ MVVMcross นี่คือประเด็นสำคัญบางประการ:
1. ปัญหาการทดสอบ **
Singletons เป็นเรื่องยากที่จะทดสอบเพราะพวกเขาถือสถานะและจัดการวงจรชีวิตของตัวเอง สิ่งนี้ทำให้มันท้าทายในการเขียนการทดสอบหน่วยที่ไม่โต้ตอบกับเครือข่ายหรือระบบภายนอกอื่น ๆ โดยไม่ตั้งใจ ใน MVVMCROSS ซึ่งการทดสอบเป็นสิ่งสำคัญในการรับรองความน่าเชื่อถือของแบบจำลองมุมมองและส่วนประกอบอื่น ๆ Singletons สามารถขัดขวางความสามารถในการแยกและทดสอบส่วนประกอบแต่ละตัวได้อย่างมีประสิทธิภาพ [1] [4]2. ข้อมูลที่ไม่สอดคล้องกันและปัญหามัลติเธรด **
ในสภาพแวดล้อมแบบมัลติเธรด Singletons สามารถนำไปสู่ความไม่สอดคล้องกันของข้อมูลหากไม่ได้ซิงโครไนซ์อย่างเหมาะสม สิ่งนี้อาจส่งผลให้เกิดพฤติกรรมที่ไม่ได้ตัดสินใจทำให้ยากต่อการแก้ไขปัญหา ในขณะที่เป็นไปได้ที่จะทำให้ Singletons Thread-Safe แต่สิ่งนี้จะเพิ่มความซับซ้อนและไม่ได้ทำอย่างถูกต้องเสมอไป [2] [4]3. การพึ่งพาและการเชื่อมต่อที่ซ่อนอยู่ **
Singletons ส่งเสริมการพึ่งพาที่ซ่อนอยู่โดยให้จุดเข้าถึงทรัพยากรทั่วโลก สิ่งนี้สามารถนำไปสู่การมีเพศสัมพันธ์ที่แน่นหนาระหว่างชั้นเรียนเนื่องจากพวกเขาทั้งหมดขึ้นอยู่กับการใช้งานคอนกรีตของซิงเกิลตัน ใน MVVMCROSS ที่การมีเพศสัมพันธ์แบบหลวมมีประโยชน์สำหรับการรักษาสถาปัตยกรรมที่สะอาด Singletons สามารถบ่อนทำลายหลักการนี้ได้โดยทำให้ยากต่อการเปลี่ยนแปลงหรือแทนที่ส่วนประกอบโดยไม่ส่งผลกระทบต่อระบบทั้งหมด [2] [3]4. การละเมิดหลักการที่เป็นของแข็ง **
Singletons ละเมิดหลักการที่มั่นคงหลายประการ:- หลักการความรับผิดชอบเดี่ยว (SRP): Singletons มักจะจัดการวงจรชีวิตของตัวเองนอกเหนือจากความรับผิดชอบหลักของพวกเขาซึ่งอาจนำไปสู่ความซับซ้อนที่ไม่จำเป็น
-หลักการผกผันการพึ่งพา (DIP): โมดูลระดับสูงไม่ควรขึ้นอยู่กับรายละเอียดระดับต่ำ แต่ด้วยซิงเกิลพวกเขามักจะทำเพราะพวกเขาพึ่งพาการใช้งานคอนกรีตของซิงเกิลตัน [2] [3]
5. ข้อ จำกัด ความสามารถในการปรับขนาดและความยืดหยุ่น **
Singletons สามารถจำกัดความสามารถในการปรับขนาดได้โดยทำให้ยากที่จะปรับให้เข้ากับความต้องการที่เปลี่ยนแปลง หากแอปพลิเคชันต้องการจัดการหลายอินสแตนซ์ของทรัพยากรหรือเปลี่ยนวิธีการจัดการทรัพยากร Singletons อาจกลายเป็นคอขวด ใน MVVMCROSS ซึ่งความยืดหยุ่นเป็นสิ่งสำคัญสำหรับการจัดการแพลตฟอร์มและการกำหนดค่าที่แตกต่างกัน Singletons สามารถจำกัดความสามารถเหล่านี้ [7]6. ความท้าทายด้านการจัดการของรัฐ **
Singletons มีสถานะตลอดอายุการใช้งานของแอปพลิเคชันซึ่งสามารถทำให้ยากต่อการรีเซ็ตหรือจัดการรัฐได้อย่างมีประสิทธิภาพ นี่เป็นปัญหาโดยเฉพาะอย่างยิ่งในแอปพลิเคชันที่รัฐจำเป็นต้องได้รับการรีเฟรชหรืออัปเดตบ่อยครั้ง [4]ทางเลือกสำหรับซิงเกิลตัน
เพื่อหลีกเลี่ยงข้อเสียเหล่านี้นักพัฒนามักหันไปใช้การฉีดพึ่งพาเป็นทางเลือกที่ยืดหยุ่นและบำรุงรักษาได้มากขึ้น การฉีดขึ้นอยู่กับการพึ่งพาช่วยให้ส่วนประกอบสามารถเชื่อมโยงกันอย่างหลวม ๆ และทดสอบได้ง่ายโดยการให้การพึ่งพาผ่านตัวสร้างหรือวิธีการอื่น ๆ แทนที่จะพึ่งพากรณีทั่วโลก [1] [7] ใน MVVMCROSS การใช้การฉีดพึ่งพาสามารถช่วยรักษาสถาปัตยกรรมที่สะอาดและปรับขนาดได้ซึ่งง่ายต่อการทดสอบและบำรุงรักษาการอ้างอิง:
[1] https://www.reddit.com/r/iosprogramming/comments/9zxqj1/why_i_cant_use_singleton_why_it_is_bad_design/
[2] https://www.youtube.com/watch?v=x6GBDWFNIN4
[3] https://www.davidtanzer.net/david's%20blog/2016/03/14/6-reasons-why-you-hould-avoid-singletons.html
[4] https://matteomerdini.com/swift-singleton/
[5] https://forums.kodeco.com/t/wy-i-cant-use-use-singleton-wy-it-is-is-bad-design-pattern/56168
[6] https://www.reddit.com/r/androiddev/comments/8v2wfa/are_singletons_a_bad_practice/
[7] https://www.linkedin.com/advice/0/what-benefits-drawbacks-using-singleton-1e
[8] https://softwareengineering.stackexchange.com/questions/40373/so-singletons-are-bad-then-what