ฉันชอบ "รูปแบบ" ที่ไม่เปลี่ยนแปลงเนื่องจากจุดแข็งของมันและในอดีตฉันพบว่ามันมีประโยชน์ต่อระบบการออกแบบที่มีชนิดข้อมูลที่ไม่เปลี่ยนรูปแบบ (บางส่วนหรือเกือบทั้งหมด) บ่อยครั้งที่ฉันทำเช่นนั้นฉันพบว่าตัวเองเขียนบั๊กน้อยลงและการดีบักง่ายขึ้นมาก
อย่างไรก็ตามเพื่อนของฉันโดยทั่วไปอายห่างจากไม่เปลี่ยนรูป พวกเขาไม่ได้ไม่มีประสบการณ์เลย (ห่างไกลจากมัน) แต่พวกเขาก็เขียนวัตถุข้อมูลแบบคลาสสิก - สมาชิกส่วนตัวที่มีทะเยอทะยานและเป็นตัวตั้งค่าสำหรับสมาชิกทุกคน จากนั้นโดยปกติ Constructor ของพวกเขาจะไม่มีการโต้แย้งหรืออาจจะเป็นเพียงการโต้แย้งเพื่อความสะดวก บ่อยครั้งที่การสร้างวัตถุมีลักษณะดังนี้:
Foo a = new Foo();
a.setProperty1("asdf");
a.setProperty2("bcde");
บางทีพวกเขาทำอย่างนั้นทุกที่ บางทีพวกเขาอาจไม่ได้กำหนดนวกรรมิกที่ใช้ทั้งสองสายไม่ว่าพวกเขาจะสำคัญแค่ไหน และบางทีพวกเขาอาจไม่เปลี่ยนค่าของสตริงเหล่านั้นในภายหลังและไม่จำเป็นต้องทำ เห็นได้ชัดว่าถ้าสิ่งเหล่านั้นเป็นจริงวัตถุจะได้รับการออกแบบที่ดีขึ้นไม่เปลี่ยนรูปใช่มั้ย (ตัวสร้างใช้คุณสมบัติทั้งสองไม่มีตัวตั้งค่าเลย)
คุณจะตัดสินใจได้อย่างไรว่าประเภทวัตถุควรได้รับการออกแบบให้ไม่เปลี่ยนรูป? มีเกณฑ์ที่ดีในการตัดสินด้วยหรือไม่
ขณะนี้ฉันกำลังถกเถียงกันว่าจะเปลี่ยนประเภทข้อมูลบางอย่างในโครงการของฉันเป็นแบบไม่เปลี่ยนรูปแบบหรือไม่ แต่ฉันจะต้องพิสูจน์ให้เพื่อนของฉันดูและข้อมูลในประเภทนั้นอาจเปลี่ยนแปลงได้ มันเป็นวิธีที่ไม่เปลี่ยนรูปแบบ (สร้างขึ้นใหม่คัดลอกคุณสมบัติจากวัตถุเก่ายกเว้นวิธีที่คุณต้องการเปลี่ยน) แต่ฉันไม่แน่ใจว่านี่เป็นเพียงความรักของฉันที่ไม่สามารถแสดงผ่านได้หรือถ้ามีความต้องการที่แท้จริงสำหรับ / ประโยชน์จากพวกเขา