Ketika saya memiliki entitas di domain saya dengan daftar hal, haruskah mereka diekspos sebagai ILists atau IEnumerables? Misalnya Order memiliki banyak OrderLines.
collections
ienumerable
ilist
pondermatik
sumber
sumber
Jawaban:
IEnumerable<T>
mewakili serangkaian item yang dapat Anda ulangi (menggunakan foreach, misalnya), sedangkanIList<T>
koleksi yang dapat Anda tambahkan atau hapus dari.Biasanya Anda ingin dapat memodifikasi Order dengan menambahkan atau menghapus OrderLines, jadi Anda mungkin ingin Order.Lines menjadi
IList<OrderLine>
.Karena itu, ada beberapa keputusan desain kerangka kerja yang harus Anda buat. Misalnya, apakah mungkin untuk menambahkan instance OrderLine yang sama ke dua pesanan yang berbeda? Mungkin tidak. Jadi mengingat Anda ingin memvalidasi apakah OrderLine harus ditambahkan ke pesanan, Anda mungkin memang ingin memunculkan properti Lines hanya sebagai
IEnumerable<OrderLine>
, dan menyediakan metode Tambah (OrderLine) dan Hapus (OrderLine) yang dapat menangani validasi itu.sumber
IReadOnlyList
atauIReadOnlyCollection
jika Anda perlu membuat daftar tetapi Anda tidak ingin menambah atau menghapusnya.IReadOnlyList
tidak masuk akal.Sebagian besar waktu saya berakhir dengan IList lebih dari IEnumerable karena IEnumerable tidak memiliki metode Count dan Anda tidak dapat mengakses koleksi melalui indeks (walaupun jika Anda menggunakan LINQ Anda dapat menyiasati ini dengan metode ekstensi).
sumber
ElementAt
metode?