คำนำหน้า "สมาชิก" เป็นรายละเอียดของการนำไปใช้งาน มันเบี่ยงเบนความสนใจของคุณจากโดเมนปัญหาไปยังโดเมนโซลูชันทางเทคนิคที่ทำให้คุณมีอคติเมื่อคิดถึงการปรับโครงสร้างที่เป็นไปได้ - ฉัน
คุณอธิบายเพิ่มเติมได้ไหม คุณเป็นเหตุผลเดียวที่ฉันเห็นว่าทำไมไม่ใช้คำนำหน้าและฉันไม่เข้าใจมัน ... (ซึ่งฉันหมายถึงสิ่งอื่น ๆ ที่ผู้คนพูดว่าเป็นเหตุผลว่าทำไมฉันไม่ต้องใช้มัน ซึ่งไม่เหมือนกับทำไมฉันไม่ควร) - Betty Crokker
ประเด็นของฉันคือการขยายคำตอบของ @CandiedOrange และ @Ewan
คำนำหน้าทำให้การปรับโครงสร้างทำได้ยากขึ้น
ในขณะที่รหัสของคุณวิวัฒนาการตัวแปรและวิธีการอาจเปลี่ยนขอบเขตของพวกเขา เช่น. คุณอาจสร้างวิธีการแบบส่วนตัวและต่อมาก็พบว่าควรมีคลาสอื่น (ใหม่) ด้วย ที่คล้ายกันอาจเกิดขึ้นกับพารามิเตอร์วิธีการและตัวแปรท้องถิ่น
สมมติว่าคุณสร้างเครื่องคิดเลขภาษี ตามหลักการของขอบเขตการมองเห็นการเช่าสำหรับตัวแปรที่คุณเริ่มต้นด้วยวิธีที่ใช้ทั้งอัตราภาษีและค่าฐานเป็นพารามิเตอร์:
(ตัวอย่างอาจดู Java-ish ... )
class TaxCalculator{
double Calculate(double p_TaxRateInpercent, double p_BaseValue){
return (100+p_TaxRateInpercent)/100 * p_BaseValue;
}
}
ถัดไปคุณต้องใช้การดำเนินการย้อนกลับและตาม TDD คุณทำมันด้วยความพยายามน้อยที่สุด:
class TaxCalculator{
double Calculate(double p_TaxRateInpercent, double p_BaseValue){
return (100+p_TaxRateInpercent)/100 * p_BaseValue;
}
double CalculateBase(double p_TaxRateInpercent, double p_TaxedValue){
return p_TaxedValue/((100+p_TaxRateInpercent)/100);
}
}
ถัดไป TDD ต้องการให้คุณ refactor รหัสให้สะอาดขึ้นซึ่งเป็นการลดรายการพารามิเตอร์ของทั้งสองวิธี
(ใช่คุณต้องแยกการคำนวณเป็นสองเท่าก่อน แต่ให้ฉันได้แต้ม ... )
ทางออกที่ชัดเจนคือการเปลี่ยนอัตราภาษีเป็นตัวแปรสมาชิกโดยผ่านมันเป็นพารามิเตอร์คอนสตรัคเตอร์
class TaxCalculator{
double m_TaxRateInpercent;
TaxCalculator(double p_TaxRateInpercent){
m_TaxRateInpercent = p_TaxRateInpercent;
}
double Calculate(double p_BaseValue){
return (100+m_TaxRateInpercent)/100 * p_BaseValue;
}
double CalculateBase(double p_TaxedValue){
return p_TaxedValue/((100+m_TaxRateInpercent)/100);
}
}
ดังที่คุณเห็นเราต้องเปลี่ยนทุกบรรทัดของวิธีการที่มีอยู่ของเรา (ทุกบรรทัดที่เราเคยใช้p_TaxRateInpercent
แน่นอน
ปัญหาคือว่าคุณไม่ได้รับการสนับสนุนจาก IDE ของคุณเพื่อทำการเปลี่ยนชื่อตลอดทั้งชั้นเรียน เพียงความช่วยเหลือมันค้นหา / แทนที่p_TaxRateInpercent
ซึ่งจะเปลี่ยนคอนสตรัคหรือส่วนใดส่วนหนึ่งที่บังเอิญมีสตริง
คุณ IDE อาจเสนอการเปลี่ยนแปลง ... refactoring สำหรับชื่อตัวแปรที่ไม่ได้กำหนด แต่สิ่งนี้อาจถูก จำกัด ขอบเขตของวิธีการ
หากไม่มีส่วนนำหน้าเฉพาะลายเซ็นเมธอดจะเปลี่ยนไป ไม่จำเป็นต้องเปลี่ยนชื่อเลย
คำนำหน้าถ่วงประวัติ SCM เมื่อมีการเปลี่ยนแปลง
SCMยังบันทึกการเปลี่ยนแปลงคำนำหน้าว่าเป็นการเปลี่ยนแปลงในตรรกะแม้ว่าตรรกะจะไม่เปลี่ยนแปลง! ประวัติของ SCM นั้นเต็มไปด้วยการเปลี่ยนแปลงทางเทคนิคนี้ซ่อนสิ่งที่สำคัญและเพิ่มความเสี่ยงสำหรับความขัดแย้งกับการเปลี่ยนแปลง (ตรรกะจริง) ของผู้อื่น
this
คำหลักใช่ไหม คุณไม่สามารถอ้างถึงสมาชิกที่ใช้this
งานเช่นthis.count
?