ขอแสดงความยินดี! คุณเพิ่ง circumnavigated ภาษาการเขียนโปรแกรม / ระบบโลกประเภทมาถึงในอีกด้านหนึ่งของโลกจากที่คุณออกไป คุณได้ลงสู่ดินแดนแห่งภาษาไดนามิก / วัตถุต้นแบบที่มีพลวัต!
ภาษาแบบไดนามิกจำนวนมาก (เช่น JavaScript, PHP, Python) อนุญาตให้ขยายหรือเปลี่ยนคุณสมบัติของวัตถุที่รันไทม์
รูปแบบสุดขั้วนี้เป็นภาษาที่ใช้ต้นแบบเช่นSelfหรือ JavaScript พวกเขาไม่มีชั้นเรียนพูดอย่างเคร่งครัด คุณสามารถทำสิ่งต่าง ๆ ที่มีลักษณะเหมือนการเขียนโปรแกรมแบบใช้คลาสเป็นเชิงวัตถุที่มีการสืบทอด แต่กฎมีความผ่อนคลายอย่างมากเมื่อเทียบกับภาษาที่ใช้ในคลาสที่กำหนดไว้อย่างคมชัดเช่น Java และ C #
Langauges เช่น PHP และ Python อาศัยอยู่ในพื้นที่ตรงกลาง พวกมันมีระบบคลาสพื้นฐานที่ใช้สำนวน แต่คุณสามารถเพิ่มเปลี่ยนแปลงหรือลบแอตทริบิวต์ของวัตถุได้ในขณะใช้งาน - แม้ว่าจะมีข้อ จำกัด บางอย่าง (เช่น "ยกเว้นชนิดในตัว") ที่คุณไม่พบใน JavaScript
ข้อดีข้อเสียของพลวัตนี้คือประสิทธิภาพ ลืมว่าภาษาที่พิมพ์อย่างรุนแรงหรืออ่อนแอหรือถูกรวบรวมลงในเครื่องได้ดีเพียงใด วัตถุแบบไดนามิกจะต้องแสดงเป็นแผนที่ / พจนานุกรมที่ยืดหยุ่นแทนที่จะเป็นแบบง่าย เพิ่มค่าใช้จ่ายในการเข้าถึงวัตถุทุกครั้ง บางโปรแกรมมีความยาวที่ยอดเยี่ยมเพื่อลดค่าใช้จ่ายนี้ (เช่นการกำหนด phantom kwarg และคลาสสล็อตตาม Python) แต่ค่าใช้จ่ายเพิ่มเติมมักจะเป็นค่าสำหรับหลักสูตรและราคาของการรับสมัคร
กลับไปที่การออกแบบของคุณคุณกำลังรับสินบนความสามารถในการมีคุณสมบัติแบบไดนามิกในส่วนย่อยของชั้นเรียนของคุณ Product
สามารถมีแอตทริบิวต์ตัวแปร; น่าจะเป็นInvoice
หรือOrder
จะและไม่สามารถ มันไม่ใช่วิธีที่เลวร้าย มันให้ความยืดหยุ่นแก่คุณในการมีรูปแบบที่คุณต้องการในขณะที่ยังคงอยู่ในระบบภาษาและระเบียบวินัยที่เข้มงวด คุณต้องรับผิดชอบในการจัดการคุณสมบัติที่ยืดหยุ่นเหล่านั้นและคุณอาจต้องดำเนินการผ่านกลไกที่ดูแตกต่างจากแอตทริบิวต์ดั้งเดิมมากกว่าเล็กน้อย p.prop('tensile_strength')
มากกว่าp.tensile_strength
ตัวอย่างเช่นและp.set_prop('tensile_strength', 104.4)
มากกว่าp.tensile_strength = 104.4
. แต่ฉันได้ทำงานกับและสร้างโปรแกรมจำนวนมากใน Pascal, Ada, C, Java และแม้แต่ภาษาแบบไดนามิกที่ใช้การเข้าถึง getter-setter อย่างแน่นอนสำหรับประเภทแอตทริบิวต์ที่ไม่ได้มาตรฐาน วิธีการนั้นสามารถใช้การได้อย่างชัดเจน
โดยโดยความตึงเครียดระหว่างประเภทคงที่และโลกที่แตกต่างกันนี้เป็นเรื่องธรรมดามาก มักพบปัญหาแบบอะนาล็อกเมื่อออกแบบสคีมาฐานข้อมูลโดยเฉพาะอย่างยิ่งสำหรับที่เก็บข้อมูลเชิงสัมพันธ์และข้อมูลเชิงสัมพันธ์ล่วงหน้า บางครั้งมันเกี่ยวข้องกับการสร้าง "แถวพิเศษ" ที่มีความยืดหยุ่นเพียงพอที่จะ จำกัด หรือกำหนดการรวมกันของรูปแบบที่จินตนาการทั้งหมดจากนั้นบรรจุข้อมูลใด ๆ ที่เข้ามาในเขตข้อมูลเหล่านั้น WordPress wp_posts
ตารางตัวอย่างเช่นมีเขตข้อมูลเช่นcomment_count
, ping_status
, post_parent
และpost_date_gmt
ที่มีเฉพาะที่น่าสนใจภายใต้สถานการณ์บางและว่าในทางปฏิบัติมักจะไปว่างเปล่า อีกวิธีคือตารางที่ธรรมดาwp_options
มาก ๆ เหมือนกับของคุณProperty
ชั้น แม้ว่ามันจะต้องมีการจัดการที่ชัดเจนมากขึ้นรายการในนั้นจะไม่ค่อยว่าง ฐานข้อมูลเชิงวัตถุและเอกสาร (เช่น MongoDB) มักจะมีเวลาจัดการกับตัวเลือกการเปลี่ยนแปลงได้ง่ายขึ้นเพราะพวกเขาสามารถสร้างและตั้งค่าคุณลักษณะที่ต้องการได้