ฉันถกเถียงกับตัวเองทุกครั้งที่เริ่มทำงานในโครงการใหม่และฉันกำลังออกแบบ POCO ของฉัน ฉันได้เห็นบทเรียน / ตัวอย่างโค้ดมากมายที่ดูเหมือนจะสนับสนุนการเชื่อมโยงคีย์ต่างประเทศ :
สมาคมคีย์ต่างประเทศ
public class Order
{
public int ID { get; set; }
public int CustomerID { get; set; } // <-- Customer ID
...
}
ตรงข้ามกับการเชื่อมโยงอิสระ :
สมาคมอิสระ
public class Order
{
public int ID { get; set; }
public Customer Customer { get; set; } // <-- Customer object
...
}
ฉันเคยทำงานร่วมกับ NHibernate มาก่อนและใช้การเชื่อมโยงที่เป็นอิสระซึ่งไม่เพียง แต่รู้สึก OO มากขึ้นเท่านั้น แต่ยังมีข้อได้เปรียบในการให้สิทธิ์เข้าถึงอ็อบเจ็กต์ของลูกค้าทั้งหมดแทน ID สิ่งนี้ทำให้ฉันสามารถดึงอินสแตนซ์คำสั่งซื้อจากนั้นทำได้Order.Customer.FirstName
โดยไม่ต้องทำการเข้าร่วมอย่างชัดเจนซึ่งสะดวกมาก
เพื่อสรุปคำถามของฉันคือ:
- มีข้อเสียที่สำคัญในการใช้การเชื่อมโยงอิสระหรือไม่? และ...
- ถ้าไม่มีเลยเหตุผลของการใช้การเชื่อมโยงคีย์ต่างประเทศคืออะไร?