มันชัดเจนมากถ้าคุณอ่านประโยคแรกของคำถามที่ว่าคำถามนี้ไม่เกี่ยวกับการใช้งานที่เหมาะสมเช่นการ
กำจัดตัวเลขเวทย์มนตร์มันเป็นเรื่องของความ
มั่นคงที่โง่เขลาไร้สติที่น่ากลัวที่สุด คำตอบนี้คืออะไร
สามัญสำนึกบอกคุณว่า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 สิ่งที่พวกเขามี