สัปดาห์ที่แล้ว ฉันเขียนเกี่ยวกับวิธีการที่มีค่าส่งคืนที่สอดคล้องกัน และวิธีที่พวกเขาจะทำให้โค้ดของคุณง่ายขึ้น แต่มันเกิดขึ้นได้อย่างไร การรีแฟคเตอร์ที่ถูกต้องจะทำให้โค้ดของคุณทำงานได้ง่ายขึ้นได้อย่างไร อะไรทำให้นามธรรมดีดี และนามธรรมเลวไม่ดีอย่างไร ฉันหมายความว่า คุณไม่สามารถเพียงแค่จัดเรียงโค้ดใหม่แบบสุ่มๆ และลงเอยด้วยซอฟต์แวร์ที่มีคุณภาพได้
หากคุณสามารถเรียนรู้ ทำไม เทคนิคเหล่านี้ใช้ได้ผล คุณจะสามารถเข้าใจได้ดีขึ้นว่าโค้ดของคุณต้องการความช่วยเหลือที่ใด และคุณจะสามารถใช้เครื่องมือที่เหมาะสมในจุดที่สำคัญที่สุดได้
ปัญหาใดที่ยากที่สุดในการพัฒนาซอฟต์แวร์
“วิทยาการคอมพิวเตอร์มีปัญหายากๆ เพียงสองอย่าง:การทำให้แคชใช้งานไม่ได้และการตั้งชื่อสิ่งต่างๆ”
– ฟิล คาร์ลตัน
แน่นอน ใบเสนอราคานั้นทุกที่ . แต่จริงๆ แล้วมีปัญหาที่ยากกว่าในการพัฒนาซอฟต์แวร์ในโลกแห่งความเป็นจริง นั่นคือ การจัดการความซับซ้อน ความซับซ้อนในการพัฒนาซอฟต์แวร์มีคำจำกัดความที่แตกต่างกันเล็กน้อย อย่างไรก็ตาม แก่นแท้ของมันคือ ความซับซ้อนของโปรแกรมคือปริมาณของสิ่งที่คุณต้องคำนึงถึงในขณะที่คุณกำลังทำงานอยู่
เมื่อคุณเขียนซอฟต์แวร์มากขึ้น คุณจะสามารถเก็บข้อมูลไว้ในหัวได้มากขึ้นในคราวเดียว แต่แม้แต่นักพัฒนาที่ดีที่สุดก็ยังมีข้อ จำกัด หากโปรเจ็กต์ของคุณซับซ้อนเกินไป คุณจะใช้สิ่งที่ใจสามารถจัดการได้มากเกินไป และคุณจะเริ่มลืมเกี่ยวกับส่วนต่างๆ ของโปรแกรมของคุณ และข้อบกพร่องที่เลวร้ายที่สุดจะปรากฏขึ้นเมื่อคุณทำการเปลี่ยนแปลงในส่วนใดส่วนหนึ่งของโครงการของคุณโดยไม่ทราบว่าการเปลี่ยนแปลงจะส่งผลต่อส่วนที่แตกต่างอย่างสิ้นเชิงของโครงการเดียวกันอย่างไร
ลดความซับซ้อนผ่านการสันนิษฐาน
หากคุณมีความทรงจำเกี่ยวกับภาพถ่าย และจำได้ว่าส่วนต่างๆ ของโปรแกรมของคุณเข้ากันได้อย่างไร คุณก็จะมีจุดบกพร่องน้อยลงมากใช่ไหม หน่วยความจำสามารถสร้างได้ยาก แต่คุณสามารถได้รับประโยชน์มากมายเช่นเดียวกันจากการมีสมาธิกับสิ่งใดสิ่งหนึ่งได้ทีละอย่าง
แนวทางปฏิบัติที่ดีที่สุดหลายประการในการพัฒนาซอฟต์แวร์คือการลดจำนวนสิ่งที่คุณต้องคำนึงถึงในคราวเดียว ตัวอย่างบางส่วน:
-
ความสม่ำเสมอในค่าที่ส่งกลับของคุณ หมายความว่าคุณต้องคิดหาวิธีจัดการกับข้อมูลประเภทหนึ่ง แทนที่จะเป็นข้อมูลประเภทต่างๆ ในสถานการณ์ที่ต่างกัน
-
นามธรรม เป็นวิธีซ่อนโค้ดหลังอินเทอร์เฟซที่เรียบง่ายกว่า ด้วยนามธรรมที่ดี คุณเพียงแค่คิดว่าสิ่งที่เป็นนามธรรมควร ลงมือโดยไม่ต้องกังวลว่าภายในจะทำงานอย่างไร
-
การทดสอบ สามารถป้องกันไม่ให้คุณทำผิดรหัสโดยไม่ได้ตั้งใจในพื้นที่หนึ่งในขณะที่คุณกำลังทำงานในอีกพื้นที่หนึ่ง คุณสามารถสรุปได้ว่าทุกอย่างที่คุณทำโดยไม่ได้ตั้งใจจะถูกจับได้ ซึ่งหมายความว่าคุณสามารถมุ่งความสนใจไปที่โค้ดที่คุณกำลังดำเนินการอยู่ และแก้ไขทุกอย่างที่คุณพังในภายหลัง
-
การพัฒนาจากการทดสอบ จะช่วยคุณเขียนโค้ดที่จะทำงานในแบบที่คุณคาดหวังให้ทำงาน คุณสามารถจดจ่อกับการเขียนวิธีปฏิบัติที่ง่ายที่สุดเท่าที่จะเป็นไปได้ซึ่งผ่านการทดสอบ ถ้ามันง่ายเกินไปและไม่ได้ผลตามที่คุณคาดหวัง การทดสอบของคุณจะจับมันได้
เมื่อคุณใช้เทคนิคเหล่านี้อย่างถูกวิธี คุณสามารถตั้งสมมติฐานที่ดีได้ ด้วยสมมติฐานเหล่านี้ คุณไม่จำเป็นต้องเก็บสิ่งใดไว้ข้างหน้าความคิดของคุณมากนัก คุณสามารถเขียนโค้ดที่ดีขึ้นและเชื่อถือได้มากขึ้น เพราะคุณไม่ต้องกังวลกับผลที่ตามมาที่แทบจะไม่มีที่สิ้นสุดที่โค้ดของคุณอาจมีต่อระบบ
ในทางกลับกัน การใช้เทคนิคเหล่านี้ผิดที่จะ ซ่อน รหัสที่คุณต้องการดูจริงๆ การซ่อนรหัส บางครั้งการคาดเดาของคุณอาจผิดพลาดได้ ทำให้ มากขึ้น มีแนวโน้มว่าคุณจะต้องทำลายมัน!
นั่นเป็นเหตุผลที่ว่าทำไมสิ่งที่เป็นนามธรรมที่ไม่ดีจึงเลวร้ายยิ่งกว่าการไม่มีสิ่งที่เป็นนามธรรมเลย และทำไมคุณไม่สามารถแค่โยน “วิธีการแยก” ไปที่โค้ดจนกว่ามันจะดีอย่างน่าอัศจรรย์
จัดโครงสร้างใหม่ถูกที่ ถูกที่
รหัสที่ชัดเจนคือรหัสที่ตรงไปตรงมาเกี่ยวกับสิ่งที่ทำ การแสดงสิ่งที่คุณต้องรู้มีความสำคัญพอๆ กับการซ่อนสิ่งที่คุณไม่จำเป็นต้องรู้ เมื่อคุณทำการรีแฟคเตอร์หรือใช้แนวทางปฏิบัติที่ดีที่สุดของซอฟต์แวร์ คุณควรคิดถึงโค้ดที่คุณได้ใช้ และโค้ดนี้ช่วยคุณลดความซับซ้อนได้ดีเพียงใด คุณกำลังช่วยส่วนที่เหลือของโค้ดสร้างสมมติฐานที่ดีและทำให้ง่ายขึ้นหรือไม่? หรือคุณกำลังฝังความรู้ที่จำเป็นไว้เบื้องหลังอินเทอร์เฟซที่เรียบง่ายเกินไป?