การสืบทอดหลายอย่างไม่สามารถแก้ปัญหาทั้งหมดที่ระบบเอนทิตี้ทำได้หรือไม่


10

คำถามคือการอธิบายตัวเองค่อนข้างสวย: การสืบทอดหลายอย่างไม่สามารถแก้ปัญหาทั้งหมดที่ระบบนิติบุคคลแก้ได้หรือไม่

ฉันจำคำศัพท์ที่เรียกว่า "การสืบทอดหลายอย่าง" และดูเหมือนจะแก้ปัญหาท้องอืดได้มากมายที่การสืบทอดแบบดั้งเดิมกำหนดขึ้น


1
การสืบทอดหลาย ๆ ครั้งคล้ายกับระบบเอนทิตี แต่ไม่เหมือนกัน ตัวอย่างเช่นเอนทิตีการสืบทอดหลายรายการไม่สามารถมีการเพิ่มและลบส่วนประกอบในเวลาทำงาน ไม่ใช่ทุกภาษาที่รองรับการสืบทอดหลายอย่างเช่นกัน คุณสามารถพิจารณาองค์ประกอบที่อยู่ในหมวดหมู่เดียวกันกับเอนทิตี / ส่วนประกอบ
MichaelHouse

2
หากชั้นเรียนของคุณเรียบร้อยมากจนคุณสามารถรับช่วงต่อได้อย่างราบรื่นในแบบที่คุณชอบพวกเขาอาจเป็นส่วนประกอบอยู่แล้ว คอมโพเนนต์ยังอนุญาตให้มีการจัดองค์ประกอบ / การรวมที่รันไทม์

มันซับซ้อนและผิดพลาดน้อยกว่าดังนั้นทำไมถึงชอบ
API-Beast

2
MI ไม่ได้แก้ไขปัญหา "bloat" อย่างแท้จริงเนื่องจากการสืบทอดส่วนเกินของอินเทอร์เฟซจากคลาสแม่หรือคลาสเป็นอาการของการใช้กลไกการสืบทอดที่ไม่ดีมากกว่าการสืบทอดเดี่ยวหลายครั้ง "bloat" เดียวกันนี้สามารถเกิดขึ้นได้ในแนวทางเชิงองค์ประกอบของปัญหาเช่นกัน

@MrBeast คุณหมายถึงข้อผิดพลาดที่ซับซ้อนมากขึ้น / มีแนวโน้มที่ซับซ้อนมากขึ้นมีความซับซ้อนน้อยกว่า / ข้อผิดพลาดได้ง่ายหรือ "ทำไมไม่ชอบมัน"
3

คำตอบ:


10

ไม่การสืบทอดหลายรายการไม่สามารถแก้ปัญหาเดียวกันทั้งหมดที่ระบบเอนทิตีทำ: ระบบเอนทิตีและการสืบทอดหลายรายการเป็นสองสิ่งที่แตกต่างกันมาก คุณสามารถสร้างระบบเอนทิตีที่มีหรือไม่มีการสืบทอดหลาย ๆ อันและในทำนองเดียวกันคุณสามารถใช้การสืบทอดหลาย ๆ อันได้โดยไม่ต้องสร้างระบบเอนทิตี

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


2

คำตอบของ Josh นั้นยอดเยี่ยม แต่ฉันต้องการเพิ่ม:

หนึ่งในคุณสมบัติที่ยอดเยี่ยมที่สุดของ Entity / Component คือวิธีการขับเคลื่อนข้อมูลซึ่งทุกสิ่งในเกมของคุณถูกสร้างและจัดการ จากสิ่งที่ฉันเห็นเมื่อคุณมีไลบรารีที่ดีของประเภทส่วนประกอบและระบบที่สร้างขึ้นคุณสามารถสร้างอะไรก็ได้ด้วยการแก้ไขโค้ดน้อยที่สุด (หมายเหตุ: น้อยที่สุด! = 0 )

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

เอนทิตี / องค์ประกอบช่วยให้คุณสร้างสิ่งที่คุณต้องการตราบใดที่คุณได้สร้างบล็อก

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

ฉันเพิ่งเริ่มเล่นกับสิ่งนี้ในช่วงไม่กี่สัปดาห์ที่ผ่านมา แต่ฉันก็ประทับใจกับสิ่งที่เรียบง่าย ไม่ใช่กระสุนเงิน - ฉันได้พบกับหลายกรณีที่การติดแลมบ์ดากับส่วนประกอบนั้นเป็นวิธีที่สะอาดและสะดวกที่สุดในการแก้ปัญหา แต่มันเป็นรูปแบบที่ดีมากถ้าคุณเรียกมันว่า

ในหมายเหตุที่เกี่ยวข้องเล็กน้อย: หนึ่งในเครื่องกำเนิดการบำรุงรักษาขนาดใหญ่ที่น่าเบื่อในแอปพลิเคชันที่เน้นข้อมูลเป็นศูนย์กลาง (เว็บไซต์และอื่น ๆ ) คือการทำแผนที่วัตถุลำดับชั้นในฐานข้อมูลเชิงสัมพันธ์ เรามีวิธีแก้ไขปัญหาที่ดีมากมาย แต่ในที่สุดพวกเขาทั้งหมดก็ถูกแฮ็คที่ออกแบบมาเพื่อทำให้ลำดับชั้นเรียบ แทนที่จะสร้างแบบจำลองของคุณเพื่อที่จะให้บริการตามวัตถุประสงค์ของแอปพลิเคชันคุณละทิ้งการประนีประนอมระหว่างลำดับชั้นที่มีประสิทธิภาพและการเป็นตัวแทนเชิงสัมพันธ์เชิงตรรกะ ฉันเล่นกับความคิดในการสร้างลำดับชั้นที่ค่อนข้างใหญ่ในหนึ่งในแอพของฉันในฐานะระบบ / ส่วนประกอบ - กำหนดลำดับชั้นและทำให้ฐานข้อมูลเป็น Gold Standard สำหรับการดำเนินการที่เหลือ - และเป็นสัญญา

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.