เมื่อฉันมีเอนทิตีในโดเมนของฉันที่มีรายการของสิ่งต่าง ๆ พวกเขาควรถูกเปิดเผยในฐานะ ILists หรือ IEnumerables? เช่นคำสั่งซื้อมีพวงของ OrderLines
เมื่อฉันมีเอนทิตีในโดเมนของฉันที่มีรายการของสิ่งต่าง ๆ พวกเขาควรถูกเปิดเผยในฐานะ ILists หรือ IEnumerables? เช่นคำสั่งซื้อมีพวงของ OrderLines
คำตอบ:
IEnumerable<T>
แสดงชุดของรายการที่คุณสามารถวนซ้ำ (ตัวอย่างเช่นใช้ foreach) ในขณะที่IList<T>
เป็นคอลเล็กชันที่คุณสามารถเพิ่มหรือลบออกได้
โดยปกติแล้วคุณจะต้องการที่จะสามารถที่จะปรับเปลี่ยนการสั่งซื้อโดยเพิ่มหรือลบรายการคำสั่งซื้อไปเพื่อให้คุณอาจต้องการ Order.Lines IList<OrderLine>
จะเป็น
ต้องบอกว่ามีการตัดสินใจออกแบบกรอบคุณควรทำ ตัวอย่างเช่นควรเป็นไปได้ที่จะเพิ่มอินสแตนซ์เดียวกันของ OrderLine ให้กับคำสั่งซื้อที่ต่างกันสองรายการหรือไม่ อาจจะไม่. ดังนั้นเมื่อคุณต้องการตรวจสอบว่าควรเพิ่ม OrderLine ในการสั่งซื้อหรือไม่คุณอาจต้องการแสดงคุณสมบัติของ Lines เป็นเพียง an IEnumerable<OrderLine>
และให้เพิ่ม (OrderLine) และ Remove (OrderLine) ซึ่งสามารถจัดการได้ การตรวจสอบที่
IReadOnlyList
หรือIReadOnlyCollection
ถ้าคุณต้องการรายการที่ปรากฏ แต่คุณไม่ต้องการที่จะเพิ่มหรือลบออกจากมัน
IReadOnlyList
ไม่มีเหตุผล
เวลาส่วนใหญ่ที่ฉันไปกับ IList ผ่าน IEnumerable เนื่องจาก IEnumerable ไม่มีวิธีการนับและคุณไม่สามารถเข้าถึงคอลเลกชันผ่านดัชนี (แม้ว่าคุณจะใช้ LINQ คุณก็สามารถใช้วิธีนี้กับส่วนขยายได้)
ElementAt
วิธีการเกี่ยวกับอะไร?