Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

ทำไมการ Refactoring ทำให้ Code ง่ายขึ้น?

สัปดาห์ที่แล้ว ฉันเขียนเกี่ยวกับวิธีการที่มีค่าส่งคืนที่สอดคล้องกัน และวิธีที่พวกเขาจะทำให้โค้ดของคุณง่ายขึ้น แต่มันเกิดขึ้นได้อย่างไร การรีแฟคเตอร์ที่ถูกต้องจะทำให้โค้ดของคุณทำงานได้ง่ายขึ้นได้อย่างไร อะไรทำให้นามธรรมดีดี และนามธรรมเลวไม่ดีอย่างไร ฉันหมายความว่า คุณไม่สามารถเพียงแค่จัดเรียงโค้ดใหม่แบบสุ่มๆ และลงเอยด้วยซอฟต์แวร์ที่มีคุณภาพได้

หากคุณสามารถเรียนรู้ ทำไม เทคนิคเหล่านี้ใช้ได้ผล คุณจะสามารถเข้าใจได้ดีขึ้นว่าโค้ดของคุณต้องการความช่วยเหลือที่ใด และคุณจะสามารถใช้เครื่องมือที่เหมาะสมในจุดที่สำคัญที่สุดได้

ปัญหาใดที่ยากที่สุดในการพัฒนาซอฟต์แวร์

“วิทยาการคอมพิวเตอร์มีปัญหายากๆ เพียงสองอย่าง:การทำให้แคชใช้งานไม่ได้และการตั้งชื่อสิ่งต่างๆ”

– ฟิล คาร์ลตัน

แน่นอน ใบเสนอราคานั้นทุกที่ . แต่จริงๆ แล้วมีปัญหาที่ยากกว่าในการพัฒนาซอฟต์แวร์ในโลกแห่งความเป็นจริง นั่นคือ การจัดการความซับซ้อน ความซับซ้อนในการพัฒนาซอฟต์แวร์มีคำจำกัดความที่แตกต่างกันเล็กน้อย อย่างไรก็ตาม แก่นแท้ของมันคือ ความซับซ้อนของโปรแกรมคือปริมาณของสิ่งที่คุณต้องคำนึงถึงในขณะที่คุณกำลังทำงานอยู่

เมื่อคุณเขียนซอฟต์แวร์มากขึ้น คุณจะสามารถเก็บข้อมูลไว้ในหัวได้มากขึ้นในคราวเดียว แต่แม้แต่นักพัฒนาที่ดีที่สุดก็ยังมีข้อ จำกัด หากโปรเจ็กต์ของคุณซับซ้อนเกินไป คุณจะใช้สิ่งที่ใจสามารถจัดการได้มากเกินไป และคุณจะเริ่มลืมเกี่ยวกับส่วนต่างๆ ของโปรแกรมของคุณ และข้อบกพร่องที่เลวร้ายที่สุดจะปรากฏขึ้นเมื่อคุณทำการเปลี่ยนแปลงในส่วนใดส่วนหนึ่งของโครงการของคุณโดยไม่ทราบว่าการเปลี่ยนแปลงจะส่งผลต่อส่วนที่แตกต่างอย่างสิ้นเชิงของโครงการเดียวกันอย่างไร

ลดความซับซ้อนผ่านการสันนิษฐาน

หากคุณมีความทรงจำเกี่ยวกับภาพถ่าย และจำได้ว่าส่วนต่างๆ ของโปรแกรมของคุณเข้ากันได้อย่างไร คุณก็จะมีจุดบกพร่องน้อยลงมากใช่ไหม หน่วยความจำสามารถสร้างได้ยาก แต่คุณสามารถได้รับประโยชน์มากมายเช่นเดียวกันจากการมีสมาธิกับสิ่งใดสิ่งหนึ่งได้ทีละอย่าง

แนวทางปฏิบัติที่ดีที่สุดหลายประการในการพัฒนาซอฟต์แวร์คือการลดจำนวนสิ่งที่คุณต้องคำนึงถึงในคราวเดียว ตัวอย่างบางส่วน:

  • ความสม่ำเสมอในค่าที่ส่งกลับของคุณ หมายความว่าคุณต้องคิดหาวิธีจัดการกับข้อมูลประเภทหนึ่ง แทนที่จะเป็นข้อมูลประเภทต่างๆ ในสถานการณ์ที่ต่างกัน

  • นามธรรม เป็นวิธีซ่อนโค้ดหลังอินเทอร์เฟซที่เรียบง่ายกว่า ด้วยนามธรรมที่ดี คุณเพียงแค่คิดว่าสิ่งที่เป็นนามธรรมควร ลงมือโดยไม่ต้องกังวลว่าภายในจะทำงานอย่างไร

  • การทดสอบ สามารถป้องกันไม่ให้คุณทำผิดรหัสโดยไม่ได้ตั้งใจในพื้นที่หนึ่งในขณะที่คุณกำลังทำงานในอีกพื้นที่หนึ่ง คุณสามารถสรุปได้ว่าทุกอย่างที่คุณทำโดยไม่ได้ตั้งใจจะถูกจับได้ ซึ่งหมายความว่าคุณสามารถมุ่งความสนใจไปที่โค้ดที่คุณกำลังดำเนินการอยู่ และแก้ไขทุกอย่างที่คุณพังในภายหลัง

  • การพัฒนาจากการทดสอบ จะช่วยคุณเขียนโค้ดที่จะทำงานในแบบที่คุณคาดหวังให้ทำงาน คุณสามารถจดจ่อกับการเขียนวิธีปฏิบัติที่ง่ายที่สุดเท่าที่จะเป็นไปได้ซึ่งผ่านการทดสอบ ถ้ามันง่ายเกินไปและไม่ได้ผลตามที่คุณคาดหวัง การทดสอบของคุณจะจับมันได้

เมื่อคุณใช้เทคนิคเหล่านี้อย่างถูกวิธี คุณสามารถตั้งสมมติฐานที่ดีได้ ด้วยสมมติฐานเหล่านี้ คุณไม่จำเป็นต้องเก็บสิ่งใดไว้ข้างหน้าความคิดของคุณมากนัก คุณสามารถเขียนโค้ดที่ดีขึ้นและเชื่อถือได้มากขึ้น เพราะคุณไม่ต้องกังวลกับผลที่ตามมาที่แทบจะไม่มีที่สิ้นสุดที่โค้ดของคุณอาจมีต่อระบบ

ในทางกลับกัน การใช้เทคนิคเหล่านี้ผิดที่จะ ซ่อน รหัสที่คุณต้องการดูจริงๆ การซ่อนรหัส บางครั้งการคาดเดาของคุณอาจผิดพลาดได้ ทำให้ มากขึ้น มีแนวโน้มว่าคุณจะต้องทำลายมัน!

นั่นเป็นเหตุผลที่ว่าทำไมสิ่งที่เป็นนามธรรมที่ไม่ดีจึงเลวร้ายยิ่งกว่าการไม่มีสิ่งที่เป็นนามธรรมเลย และทำไมคุณไม่สามารถแค่โยน “วิธีการแยก” ไปที่โค้ดจนกว่ามันจะดีอย่างน่าอัศจรรย์

จัดโครงสร้างใหม่ถูกที่ ถูกที่

รหัสที่ชัดเจนคือรหัสที่ตรงไปตรงมาเกี่ยวกับสิ่งที่ทำ การแสดงสิ่งที่คุณต้องรู้มีความสำคัญพอๆ กับการซ่อนสิ่งที่คุณไม่จำเป็นต้องรู้ เมื่อคุณทำการรีแฟคเตอร์หรือใช้แนวทางปฏิบัติที่ดีที่สุดของซอฟต์แวร์ คุณควรคิดถึงโค้ดที่คุณได้ใช้ และโค้ดนี้ช่วยคุณลดความซับซ้อนได้ดีเพียงใด คุณกำลังช่วยส่วนที่เหลือของโค้ดสร้างสมมติฐานที่ดีและทำให้ง่ายขึ้นหรือไม่? หรือคุณกำลังฝังความรู้ที่จำเป็นไว้เบื้องหลังอินเทอร์เฟซที่เรียบง่ายเกินไป?