Elm:
การปรับโครงสร้างโค้ด
วิธีการ:
พิจารณาว่าคุณมีฟังก์ชัน Elm ที่ทำงานมากเกินไป เช่น ผสมผสานโลจิก UI กับการอัปเดตสถานะ เป็นตัวอย่างที่สมบูรณ์สำหรับการ Refactor ตัวอย่างเดิม:
updateAndFormat : String -> Model -> (Model, Cmd Msg)
updateAndFormat input model =
let
updatedModel = { model | userInput = input }
in
if String.length input > 5 then
( updatedModel, Cmd.none )
else
( model, Cmd.none )
หลังจาก Refactor เราแยกเรื่องราวโดยนำโลจิกออกมาเป็นฟังก์ชันแยกต่างหาก:
-- โลจิกการอัปเดตคืออิสระ
updateUserInput : String -> Model -> Model
updateUserInput input model =
{ model | userInput = input }
-- โลจิกการจัดรูปแบบ (view) ก็แยกต่างหาก
formatUserInput : Model -> (Model, Cmd Msg)
formatUserInput model =
if String.length model.userInput > 5 then
( model, Cmd.none )
else
( { model | userInput = "" }, Cmd.none ) -- ล้างข้อมูลป้อนหากสั้นเกินไป เป็นตัวอย่างกฎ
-- ฟังก์ชั่นการอัปเดตตอนนี้ใช้ฟังก์ชั่นช่วยเหลือ
updateAndFormat : String -> Model -> (Model, Cmd Msg)
updateAndFormat input model =
model
|> updateUserInput input
|> formatUserInput
ด้วยการเปลี่ยนแปลงเหล่านี้ คุณมีการแยกความกังวลอย่างชัดเจน และแต่ละฟังก์ชั่นสามารถเข้าใจและทดสอบได้ง่ายขึ้น
การศึกษาลึก
การ Refactor ตามรูปแบบเป็นการปฏิบัติที่สามารถติดตามไปยังยุคแรกๆ ของการเขียนโปรแกรมเมื่อต้นทุนของการเปลี่ยนแปลงโค้ดกำลังถูกจำเป็นเป็นส่วนหนึ่งของกระบวนการพัฒนา โดยเฉพาะหนังสือ “Refactoring: Improving the Design of Existing Code” ของ Martin Fowler ที่เผยแพร่ในช่วงปลาย 1990s จริงๆ แล้วได้ตั้งเวทีสำหรับการ Refactor ด้วยวิธีการที่มีโครงสร้างและแคตตาล็อกของ “code smells” เพื่อระบุโอกาสในการ Refactor
ในบริบทของ Elm, Refactor นั้นเชื่อมโยงกับจุดแข็งของภาษา เช่น ระบบการพิมพ์ที่แข็งแกร่ง ซึ่งส่งเสริมความมั่นใจในระหว่างกระบวนการ ทางเลือกสำหรับการ Refactor ด้วยตนเองอาจรวมถึงเครื่องมือการเปลี่ยนรูปแบบโค้ดแบบอัตโนมัติ แต่เครื่องมือด้านนี้ของ Elm ยังคงอยู่ในระหว่างการพัฒนาเมื่อเปรียบเทียบกับภาษาเก่า รายละเอียดการดำเนินการมักจะเกี่ยวข้องกับการ Refactor ทั่วไป เช่น การสกัดฟังก์ชั่น การเปลี่ยนชื่อ และการทำให้เงื่อนไขเรียบง่ายขึ้น ตัวคอมไพเลอร์ของ Elm เป็นพันธมิตรหลักในการ Refactor เนื่องจากมันจะไม่ยอมให้คุณผิดพลาดมาก—มันเตือนเสมอเมื่อมีสิ่งใดไม่ถูกต้อง รับประกันว่าโค้ดที่คุณ Refactor ยังคงทำงาน