สมมติว่าฉันมีวิธียาวเช่นนี้
public void SomeLongMethod()
{
// Some task #1
...
// Some task #2
...
}
วิธีนี้ไม่มีชิ้นส่วนซ้ำ ๆ ที่ควรเคลื่อนย้ายไปยังวิธีอื่นหรือฟังก์ชั่นในเครื่อง
มีหลายคน (รวมถึงฉัน) ที่คิดว่าวิธีการที่ยาวนานนั้นเป็นกลิ่นรหัส นอกจากนี้ผมไม่ชอบความคิดของการใช้#region
(s) ที่นี่มีคำตอบที่เป็นที่นิยมมากอธิบายว่าทำไมนี้ไม่ดี
แต่ถ้าฉันแยกรหัสนี้เป็นวิธีการ
public void SomeLongMethod()
{
Task1();
Task2();
}
private void Task1()
{
// Some task #1
...
}
private void Task2()
{
// Some task #1
...
}
ฉันเห็นปัญหาต่อไปนี้:
ขอบเขตนิยามคลาสที่ก่อให้เกิดมลพิษกับคำจำกัดความที่ใช้ภายในโดยวิธีการเดียวซึ่งหมายความว่าฉันควรบันทึกไว้ที่ใดที่หนึ่ง
Task1
และTask2
มีไว้สำหรับ internals ของSomeLongMethod
(หรือทุกคนที่อ่านรหัสของฉันจะต้องอนุมานความคิดนี้)การทำให้สมบูรณ์ IDE อัตโนมัติโดยสมบูรณ์ (เช่น Intellisense) ของวิธีการที่จะใช้เพียงครั้งเดียวใน
SomeLongMethod
วิธีการเดียว
ดังนั้นถ้าฉันแยกรหัสวิธีการนี้เป็นฟังก์ชั่นท้องถิ่น
public void SomeLongMethod()
{
Task1();
Task2();
void Task1()
{
// Some task #1
...
}
void Task2()
{
// Some task #1
...
}
}
ถ้าอย่างนั้นก็ไม่ได้มีข้อเสียของวิธีการที่แยกจากกัน แต่วิธีนี้ไม่ได้ดูดีกว่า (อย่างน้อยสำหรับฉัน) กว่าวิธีดั้งเดิม
เวอร์ชันใดที่คุณSomeLongMethod
สามารถบำรุงรักษาและอ่านได้มากขึ้นและทำไม