จะจัดการความสัมพันธ์แบบกลุ่มต่อกลุ่มกับ OOPHP ได้อย่างไร

วิธีที่ดีที่สุดในการสร้างความสัมพันธ์แบบกลุ่มต่อกลุ่มใน PHP เชิงวัตถุคืออะไร

หากฉันมีสามตาราง หนังสือ และหมวดหมู่ และหมวดหมู่หนังสือตารางรวม (จัดการหลายรายการต่อหลายรายการ) ฉันควรสร้างแบบจำลอง/คลาสที่เรียกว่าหมวดหมู่หนังสือ และจัดการทุกอย่างที่เกี่ยวข้องกับความสัมพันธ์หมวดหมู่หนังสือที่นั่นหรือไม่

คำถามเฉพาะของฉันโดยอ้างอิงถึงรหัสหลอกด้านล่างคือ:

  1. ฉันกำหนดวิธีการให้กับคลาสที่เหมาะสมอย่างถูกต้องหรือไม่?
  2. มีวิธีที่ดีกว่าในการบรรลุเป้าหมายที่ไม่ซับซ้อนมากหรือไม่?
  3. คลาสใดที่จัดการความสัมพันธ์การเชื่อมโยง? เช่น. $book->link_to_cat('5')?
  4. คำเตือนใด ๆ สำหรับการใช้วิธีการนี้ (ถ้ามี)

คำแนะนำใด ๆ ที่ชื่นชมอย่างมาก! ขอบคุณล่วงหน้า!

รหัสหลอก:

<?php

class Books {
    //handles all book table stuff

    public function delete_book() {
        //deletes specific book
        //deletes all related bookcategories using find_by_book_id
    }
}

class Categories {
    // handles all category stuff
}

class BookCategories {

    public static function get_cats_by_book_id {
        // sql join statement to retrieve category objects by book id
    }

    public static function get_books_by_cat_id {

    }

    public static function find_by_book_id() {
        //returns bookcategories by book id.
    }
}


?>

person Nick    schedule 14.01.2011    source แหล่งที่มา
comment
โดยส่วนตัวแล้ว ฉันจะทิ้งคลาส BookCategories ออกไป - มันเป็นรายละเอียดการใช้งานที่ไม่จำเป็น เพียงเพิ่มเมธอด get_categories() ในคลาส book และเพิ่มเมธอด get_books() ในคลาสหมวดหมู่ หรือใส่โค้ดในตัวสร้างแต่ละตัวเพื่อดึงหนังสือ/หมวดหมู่ที่เชื่อมโยงทั้งหมดขึ้นมาเมื่อคุณสร้างวัตถุหมวดหมู่/หนังสือ   -  person Sam Dufel    schedule 14.01.2011
comment
ทำไมชื่อชั้นเรียนของคุณจึงเป็นพหูพจน์?   -  person Marc-François    schedule 14.01.2011
comment
@Sam - คุณอยากจะแนะนำไหมว่าแม้ว่า BookCategories จะมีคุณสมบัติเพิ่มเติม เช่น BookCategory Assign_date, Assign_by_user เป็นต้น   -  person Nick    schedule 14.01.2011
comment
@Marc - เป็นข้อผิดพลาดในรหัสหลอก ขอบคุณที่เฉียบแหลม!   -  person Nick    schedule 14.01.2011
comment
@นิค - ใช่ สำหรับหนังสือที่เกี่ยวข้อง แต่ละหมวดหมู่จะมี 1 assign_date, มอบหมาย_by_user และอื่นๆ ที่เกี่ยวข้องเท่านั้น เมื่อฉันคิดถึงวัตถุ หนังสือและหมวดหมู่นั้นตรงไปตรงมา BookCategory คืออะไรกันแน่? เคยมีสถานการณ์ที่คุณจะสนใจเกี่ยวกับ BookCategory ยกเว้นที่เกี่ยวข้องกับหนังสือหรือหมวดหมู่หรือไม่?   -  person Sam Dufel    schedule 14.01.2011
comment
@Sam - โอเคเยี่ยมมาก ดังนั้น หากมีความสัมพันธ์ที่มีความหมาย เช่น ClassEnrollments (ผู้เรียน ›- classenrollments -‹ คลาส) จะคุ้มค่าไหมที่มีชั้นเรียน หรือคุณยังจะแนะนำให้เก็บวิธีการไว้สำหรับแต่ละชั้นเรียนหรือไม่   -  person Nick    schedule 14.01.2011
comment
@Nick - ฉันไม่คิดว่าคุณจะต้องสร้างชั้นเรียนสำหรับความสัมพันธ์แบบนั้นจริงๆ เหตุผลเดียวที่คุณต้องมีตารางแยกต่างหากสำหรับความสัมพันธ์แบบ one:many หรือ many:many ก็เนื่องมาจากความแปลกประหลาดของฐานข้อมูลเชิงสัมพันธ์ มีรูปแบบการจัดเก็บอื่น ๆ ที่ไม่มีตารางความสัมพันธ์อยู่   -  person Sam Dufel    schedule 14.01.2011


คำตอบ (1)


คุณอาจพบว่าการตรวจสอบรูปแบบการออกแบบมีประโยชน์ รูปแบบคอมโพสิตมักใช้ในสถานการณ์นี้ หนังสือดีๆ ที่จะช่วยคุณในการออกแบบรูปแบบด้วย php oo คือ ออบเจ็กต์ PHP รูปแบบ และแนวทางปฏิบัติ

person user466764    schedule 14.01.2011
comment
ขอบคุณ ฉันซื้อมันเมื่อวานนี้หลังจากตรวจสอบรีวิวบางส่วน คำแนะนำที่ดี! ขอบคุณมาก! - person Nick; 15.01.2011