Saya pikir Anda dapat menggunakan keduanya, tetapi masing-masing memiliki kegunaan. Pada dasarnya List
adalah IEnumerable
tetapi Anda memiliki fungsionalitas menghitung, menambah elemen, menghapus elemen
IEnumerable tidak efisien untuk menghitung elemen
Jika koleksi dimaksudkan untuk menjadi hanya-baca, atau modifikasi koleksi dikendalikan oleh Parent
pengembalian yang IList
adil Count
bukanlah ide yang baik.
Di Linq, ada Count()
metode ekstensi IEnumerable<T>
yang di dalam CLR akan pintas ke .Count
jika jenis yang mendasarinya adalah IList
, sehingga perbedaan kinerja dapat diabaikan.
Secara umum saya merasa (pendapat) adalah praktik yang lebih baik untuk mengembalikan IEnumerable jika memungkinkan, jika Anda perlu melakukan penambahan maka tambahkan metode ini ke kelas induk, jika tidak, konsumen kemudian mengelola koleksi dalam Model yang melanggar prinsip, misalnya manufacturer.Models.Add(model)
melanggar hukum demeter. Tentu saja ini hanyalah pedoman dan bukan aturan yang keras dan cepat, tetapi sampai Anda benar-benar memahami penerapannya, mengikuti secara membabi buta lebih baik daripada tidak mengikuti sama sekali.
public interface IManufacturer
{
IEnumerable<Model> Models {get;}
void AddModel(Model model);
}
(Catatan: Jika menggunakan nNHibernate, Anda mungkin perlu memetakan ke IList pribadi menggunakan pengakses berbeda.)