ฉันคิดว่าคุณสามารถใช้อย่างใดอย่างหนึ่ง แต่แต่ละคนมีประโยชน์ โดยทั่วไปList
เป็นIEnumerable
แต่คุณต้องนับการทำงานองค์ประกอบเพิ่มองค์ประกอบลบ
IEnumerable ไม่มีประสิทธิภาพในการนับองค์ประกอบ
หากคอลเลกชันมีวัตถุประสงค์เพื่ออ่านอย่างเดียวหรือการปรับเปลี่ยนคอลเล็กชันถูกควบคุมโดยการParent
ส่งคืนIList
just for Count
นั้นไม่ใช่ความคิดที่ดี
ใน Linq มีCount()
วิธีการขยายIEnumerable<T>
ซึ่งภายใน CLR จะลัดไปยัง.Count
ประเภทที่อยู่ภายใต้IList
ดังนั้นความแตกต่างของประสิทธิภาพจึงไม่สำคัญ
โดยทั่วไปแล้วฉันรู้สึกว่า (ความเห็น) เป็นแนวทางปฏิบัติที่ดีกว่าในการส่งคืน IEnumerable หากเป็นไปได้หากคุณจำเป็นต้องทำการเพิ่มเติมจากนั้นเพิ่มวิธีการเหล่านี้ไปยังคลาสหลักมิฉะนั้นผู้บริโภคจะจัดการคอลเล็กชันภายใน Model ที่ละเมิดหลักการเช่นmanufacturer.Models.Add(model)
ละเมิดกฎหมายของ demeter. แน่นอนว่านี่เป็นเพียงแนวทางและไม่ใช่กฎที่ยากและรวดเร็ว แต่จนกว่าคุณจะเข้าใจถึงการบังคับใช้อย่างเต็มที่การทำตามแบบสุ่มสี่สุ่มห้าจะดีกว่าการไม่ปฏิบัติตามเลย
public interface IManufacturer
{
IEnumerable<Model> Models {get;}
void AddModel(Model model);
}
(หมายเหตุ: หากใช้ nNHibernate คุณอาจต้องแมปกับ IList ส่วนตัวโดยใช้ตัวเข้าถึงอื่น)