ดังนั้นก่อนหน้านี้ฉันสังเกตเห็นความคิดเห็นบางอย่างเกี่ยวกับวิธีการที่ยาวนานว่าเป็นการฝึกฝนที่ไม่ดี
ฉันไม่แน่ใจว่าฉันเห็นด้วยเสมอว่าวิธีการที่ยาวนานนั้นไม่ดี (และต้องการความคิดเห็นจากผู้อื่น)
ตัวอย่างเช่นฉันมีมุมมอง Django ที่ประมวลผลบางส่วนของวัตถุก่อนที่จะส่งไปยังมุมมองซึ่งเป็นวิธีการที่ยาวเป็นรหัส 350 บรรทัด ฉันได้เขียนโค้ดของฉันเพื่อให้เกี่ยวข้องกับพารามิเตอร์ - การเรียงลำดับ / กรองชุดสืบค้นจากนั้นการประมวลผลบางอย่างบนวัตถุที่แบบสอบถามของฉันส่งคืน
ดังนั้นการประมวลผลส่วนใหญ่จะเป็นการรวมแบบมีเงื่อนไขซึ่งมีกฎที่ซับซ้อนพอที่จะไม่สามารถทำได้อย่างง่ายดายในฐานข้อมูลดังนั้นฉันจึงมีตัวแปรบางตัวที่ประกาศนอกลูปหลักจากนั้นจึงเปลี่ยนแปลงระหว่างลูป
variable_1 = 0
variable_2 = 0
for object in queryset :
if object.condition_condition_a and variable_2 > 0 :
variable 1+= 1
.....
...
.
more conditions to alter the variables
return queryset, and context
ตามทฤษฎีฉันควรแยกรหัสทั้งหมดออกเป็นวิธีที่เล็กลงเพื่อให้ฉันมีวิธีการดูว่ายาวที่สุดในหนึ่งหน้า
อย่างไรก็ตามในอดีตเคยทำงานกับฐานรหัสหลาย ๆ ครั้งบางครั้งฉันก็พบว่ามันทำให้โค้ดอ่านน้อยลงเมื่อคุณต้องการข้ามจากวิธีหนึ่งไปยังวิธีถัดไปเพื่อหาส่วนต่าง ๆ ทั้งหมดของมันอย่างต่อเนื่อง
ฉันพบว่ามีวิธียาวที่มีการจัดรูปแบบที่ดีคุณสามารถดูตรรกะได้ง่ายขึ้นเนื่องจากไม่ได้ซ่อนอยู่ในวิธีการด้านใน
ฉันสามารถแยกรหัสออกเป็นวิธีที่เล็กกว่า แต่บ่อยครั้งที่มีการวนรอบภายในที่ใช้สำหรับสองหรือสามสิ่งดังนั้นมันจะส่งผลให้รหัสที่ซับซ้อนมากขึ้นหรือวิธีที่ไม่ได้ทำสิ่งใดสิ่งหนึ่ง แต่สองหรือสาม ฉันสามารถวนซ้ำวงในสำหรับแต่ละงาน แต่หลังจากนั้นจะมีการแสดงที่มีประสิทธิภาพ)
ดังนั้นมีกรณีที่วิธีการที่ยาวไม่เลวเสมอไปหรือไม่? มีกรณีสำหรับวิธีการเขียนเสมอเมื่อพวกเขาจะถูกนำมาใช้ในที่เดียวเท่านั้น?
ปรับปรุง: ดูเหมือนว่าฉันถามคำถามนี้กว่าปีที่ผ่านมา
ดังนั้นฉัน refactored รหัสหลังจากการตอบสนอง (ผสม) ที่นี่แบ่งออกเป็นวิธีการ มันเป็นแอพ Django ที่ดึงชุดของวัตถุที่เกี่ยวข้องจากฐานข้อมูลที่ซับซ้อนดังนั้นอาร์กิวเมนต์การทดสอบจึงไม่ทำงาน (อาจใช้เวลาเกือบทั้งปีในการสร้างวัตถุที่เกี่ยวข้องสำหรับกรณีทดสอบฉันมีประเภท "ต้องทำเมื่อวานนี้" สภาพแวดล้อมในการทำงานก่อนใครก็ตามที่บ่น) การแก้ไขจุดบกพร่องในส่วนนั้นของรหัสนั้นง่ายขึ้นเล็กน้อย แต่ไม่มากนัก
ก่อน:
#comment 1
bit of (uncomplicated) code 1a
bit of code 2a
#comment 2
bit of code 2a
bit of code 2b
bit of code 2c
#comment 3
bit of code 3
ขณะนี้:
method_call_1
method_call_2
method_call_3
def method_1
bit of (uncomplicated) code 1a
bit of code 2a
def method_2
bit of code 2a
bit of code 2b
bit of code 2c
def method_3
bit of code 3