มันชัดเจนมากถ้าคุณอ่านประโยคแรกของคำถามที่ว่าคำถามนี้ไม่เกี่ยวกับการใช้งานที่เหมาะสมเช่นการ
กำจัดตัวเลขเวทย์มนตร์มันเป็นเรื่องของความ
มั่นคงที่โง่เขลาไร้สติที่น่ากลัวที่สุด คำตอบนี้คืออะไร
สามัญสำนึกบอกคุณว่าconst char UPPER_CASE_A = 'A';หรือconst char A = 'A'ไม่เพิ่มอะไรนอกจากการบำรุงรักษาและความซับซ้อนในระบบของคุณ const char STATUS_CODE.ARRIVED = 'A'เป็นกรณีอื่น
ค่าคงที่ควรจะเป็นตัวแทนของสิ่งต่าง ๆ ที่ไม่เปลี่ยนรูปในขณะทำงาน แต่อาจจะต้องมีการแก้ไขในอนาคตในเวลารวบรวม เมื่อใดที่จะconst char A =ถูกต้องเท่ากับสิ่งอื่นAใด
หากคุณเห็นpublic static final char COLON = ':'ในรหัส Java ให้หาคนที่เขียนและทำลายแป้นพิมพ์ของพวกเขา หากการเป็นตัวแทนCOLONตลอดการเปลี่ยนแปลงจาก:คุณจะมีฝันร้ายบำรุงรักษา
obfuscation:
จะเกิดอะไรขึ้นเมื่อมีคนเปลี่ยนเป็นCOLON = '-'เพราะพวกเขากำลังใช้ที่ต้องการ-ทุกที่แทน? คุณจะเขียนการทดสอบหน่วยที่พูดโดยทั่วไปassertThat(':' == COLON)สำหรับconstการอ้างอิงทุก ๆ ครั้งเพื่อให้แน่ใจว่าจะไม่เปลี่ยนแปลง มีเพียงคนที่จะแก้ไขการทดสอบเมื่อพวกเขาเปลี่ยนพวกเขา?
หากมีคนแย้งว่าpublic static final String EMPTY_STRING = "";มีประโยชน์และเป็นประโยชน์จริง ๆคุณแค่ผ่านการรับรองความรู้และละเว้นสิ่งเหล่านี้อย่างปลอดภัย
การมีตัวละครที่พิมพ์ได้พร้อมกับรุ่นที่มีชื่อนั้นแสดงให้เห็นว่าใครก็ตามที่ทำมันไม่มีคุณสมบัติที่จะเขียนโค้ดที่ไม่ได้รับอนุญาต
การติดต่อกัน:
นอกจากนี้ยังลดการทำงานร่วมกันของเทียมเนื่องจากมันเคลื่อนย้ายสิ่งต่าง ๆ ออกจากสิ่งที่ใช้พวกเขาและเกี่ยวข้องกับพวกเขา
ในการเขียนโปรแกรมคอมพิวเตอร์การทำงานร่วมกันหมายถึงระดับที่องค์ประกอบของโมดูลอยู่ด้วยกัน ดังนั้นการทำงานร่วมกันวัดความแข็งแรงของความสัมพันธ์ระหว่างชิ้นส่วนของการทำงานภายในโมดูลที่กำหนด ตัวอย่างเช่นในการทำงานของระบบที่มีความเหนียวสูงนั้นมีความสัมพันธ์กันอย่างมาก
การเชื่อมต่อ:
นอกจากนี้ยังมีคลาสที่ไม่เกี่ยวข้องจำนวนมากเข้าด้วยกันเพราะพวกเขาทั้งหมดจบลงด้วยการอ้างอิงไฟล์ที่ไม่เกี่ยวข้องกับสิ่งที่พวกเขาทำ
คับคัปปลิ้งคือเมื่อกลุ่มของคลาสนั้นพึ่งพากันมาก สถานการณ์นี้เกิดขึ้นเมื่อชั้นเรียนมีความรับผิดชอบมากเกินไปหรือเมื่อมีข้อกังวลอย่างหนึ่งเกิดขึ้นในหลายชั้นเรียนมากกว่าที่จะมีชั้นเรียนของตัวเอง
หากคุณใช้ชื่อที่ดีกว่าเช่นDELIMITER = ','คุณจะยังคงมีปัญหาเดียวกันเพราะชื่อนั้นเป็นชื่อสามัญและไม่มีความหมาย ','กำหนดใหม่ค่าไม่ไม่มากที่จะช่วยให้ทำการวิเคราะห์ผลกระทบมากกว่าการค้นหาและแทนที่สำหรับตัวอักษร เพราะบางรหัสใช้มันและต้องการ,และใช้รหัสอื่น แต่ต้องการ;ตอนนี้? ยังคงต้องดูการใช้งานด้วยตนเองทุกครั้งและเปลี่ยน
ในป่า:
ฉันเพิ่งปรับปรุง1,000,000+ LOCใบสมัครที่มีอายุ 18 ปีขึ้นไป public static final COMMA = SPACE + "," + SPACE;มันมีสิ่งที่ต้องการ มันไม่ได้ดีไปกว่าการฝังไว้ใน" , "ตำแหน่งที่ต้องการ
หากคุณต้องการโต้แย้งการอ่านคุณต้องเรียนรู้การกำหนดค่า IDE ของคุณเพื่อแสดงwhitespaceตัวอักษรที่คุณสามารถเห็นพวกเขาหรืออะไรก็ตามนั่นเป็นเหตุผลที่ขี้เกียจอย่างยิ่งที่จะแนะนำเอนโทรปีในระบบ
นอกจากนี้ยังมีการ,กำหนดหลายครั้งด้วยคำที่สะกดผิดหลายคำCOMMAในแพ็คเกจและคลาสต่างๆ ด้วยการอ้างอิงถึงรูปแบบทั้งหมดที่ผสมกันในรหัส มันไม่ใช่เรื่องฝันร้ายที่จะลองและแก้ไขบางสิ่งโดยไม่ทำลายสิ่งที่ไม่เกี่ยวข้องอย่างสมบูรณ์
เช่นเดียวกันกับตัวอักษรมีหลายUPPER_CASE_A, A, UPPER_A, A_UPPERที่มากที่สุดของเวลาเท่ากับแต่ในบางกรณีไม่ได้A สำหรับตัวละครเกือบทุกตัว แต่ไม่ใช่ตัวละครทุกตัว
และจากประวัติการแก้ไขไม่ปรากฏว่ามีสิ่งใดสิ่งหนึ่งเหล่านี้เคยถูกแก้ไขหรือเปลี่ยนแปลงในช่วง 18 ปีเพราะสิ่งที่ควรจะมีเหตุผลชัดเจนตอนนี้ก็คือมันจะแตกหักสิ่งต่าง ๆ มากเกินไปที่ไม่สามารถหาได้ดังนั้นคุณมีตัวแปรใหม่ ชื่อที่ชี้ไปที่สิ่งเดียวกันที่ไม่สามารถเปลี่ยนแปลงได้ด้วยเหตุผลเดียวกัน
ในความเป็นจริงไม่มีสติคุณสามารถยืนยันว่าการปฏิบัตินี้ไม่ได้ทำอะไรเลย แต่เริ่มต้นที่เอนโทรปีสูงสุด
ฉัน refactored ทั้งหมดยุ่งเหยิงนี้และ inline tautologies ทั้งหมดและจ้างวิทยาลัยใหม่มีประสิทธิผลมากขึ้นเพราะพวกเขาไม่ต้องตามล่าผ่านหลายระดับของสิ่งที่constอ้างอิงเหล่านี้ชี้ไปเพราะพวกเขาไม่น่าเชื่อถือในสิ่งที่พวกเขาถูกตั้งชื่อ vs สิ่งที่พวกเขามี