ระบบประเภทคงที่ทั้งหมดเกี่ยวกับการป้องกันการใช้ข้อมูลที่ไม่ถูกต้อง
มีตัวอย่างที่ชัดเจนของประเภทการทำเช่นนี้:
- คุณไม่สามารถรับเดือนของ UUID ได้
- คุณไม่สามารถคูณสองสตริงได้
มีตัวอย่างที่ละเอียดยิ่งขึ้น
- คุณไม่สามารถจ่ายอะไรบางอย่างโดยใช้ความยาวของโต๊ะ
- คุณไม่สามารถสร้างคำขอ HTTP โดยใช้ชื่อของใครบางคนเป็น URL ได้
เราอาจถูกล่อลวงให้ใช้double
ทั้งราคาและความยาวหรือใช้string
ทั้งชื่อและ URL แต่การทำเช่นนั้นจะทำลายระบบการพิมพ์ที่ยอดเยี่ยมของเราและทำให้การใช้งานผิดพลาดเหล่านี้ผ่านการตรวจสอบแบบคงที่ของภาษา
การเดินทางปอนด์วินาทีสับสนกับนิวตันวินาทีสามารถมีผลลัพธ์ที่น่าสงสารที่รันไทม์
นี่เป็นปัญหากับสตริงโดยเฉพาะ พวกเขามักจะกลายเป็น "ประเภทข้อมูลสากล"
เราคุ้นเคยกับอินเตอร์เฟสข้อความเป็นหลักกับคอมพิวเตอร์และเรามักจะขยายส่วนติดต่อผู้ใช้ (UIs) เหล่านี้เป็นอินเตอร์เฟสการเขียนโปรแกรม (API) เราคิดว่า 34.25 เป็นตัวอักษรที่34.25 เราคิดว่าวันที่เป็นตัวละคร2015/05/03 เราคิดว่า UUID เป็นตัวละครที่75e945ee-f1e9-11e4-b9b2-1697f925ec7b
แต่โมเดลจิตนี้เป็นอันตรายต่อสิ่งที่เป็นนามธรรม
คำหรือภาษาตามที่เขียนหรือพูดดูเหมือนจะไม่มีบทบาทใด ๆ ในกลไกการคิดของฉัน
Albert Einstein
ในทำนองเดียวกันการเป็นตัวแทนข้อความไม่ควรมีบทบาทใด ๆ ในการออกแบบประเภทและ API ระวังstring
! (และประเภท "ดั้งเดิม" ทั่วไปอื่น ๆ ที่มากเกินไป)
ประเภทสื่อสาร "การทำงานที่สมเหตุสมผล"
ตัวอย่างเช่นฉันเคยทำงานกับลูกค้าเพื่อ HTTP REST API REST ดำเนินการอย่างถูกต้องใช้เอนทิตีสื่อบันทึกหลายมิติซึ่งมีไฮเปอร์ลิงก์ชี้ไปยังเอนทิตีที่เกี่ยวข้อง ในไคลเอนต์นี้ไม่เพียง แต่พิมพ์เอนทิตี (เช่นผู้ใช้บัญชีการสมัครสมาชิก) การเชื่อมโยงไปยังเอนทิตีเหล่านั้นก็ถูกพิมพ์ด้วยเช่นกัน (UserLink, AccountLink, SubscriptionLink) ลิงก์นั้นเล็กไปกว่าการพันรอบ ๆUri
แต่การแยกประเภทต่าง ๆ ทำให้มันเป็นไปไม่ได้ที่จะลองใช้ AccountLink เพื่อดึงข้อมูลผู้ใช้ หากทุกอย่างเป็นธรรมดาUri
- หรือแย่กว่านั้นstring
- ความผิดพลาดเหล่านี้จะพบได้ที่รันไทม์เท่านั้น
ในทำนองเดียวกันในสถานการณ์ของคุณคุณมีข้อมูลที่ใช้สำหรับการเพียงหนึ่งวัตถุประสงค์: Operation
เพื่อระบุ ไม่ควรนำไปใช้เพื่อสิ่งอื่นและเราไม่ควรพยายามระบุOperation
s ด้วยสตริงแบบสุ่มที่เราสร้างขึ้น การสร้างคลาสที่แยกต่างหากช่วยเพิ่มความสามารถในการอ่านและความปลอดภัยให้กับโค้ดของคุณ
แน่นอนสิ่งดีทั้งหมดสามารถใช้เกิน พิจารณา
เพิ่มความคมชัดให้กับโค้ดของคุณมากเพียงใด
ใช้บ่อยแค่ไหน
หากมีการใช้ "ประเภท" ของข้อมูล (ในแง่นามธรรม) เพื่อจุดประสงค์ที่แตกต่างกันและระหว่างส่วนต่อประสานของรหัสมันเป็นตัวเลือกที่ดีมากสำหรับการแยกชั้นเรียนโดยใช้ค่าใช้จ่ายของการใช้คำฟุ่มเฟือย