Ketika saya memiliki entitas di domain saya dengan daftar hal, haruskah mereka diekspos sebagai ILists atau IEnumerables? Misalnya Order memiliki banyak OrderLines.
Ketika saya memiliki entitas di domain saya dengan daftar hal, haruskah mereka diekspos sebagai ILists atau IEnumerables? Misalnya Order memiliki banyak OrderLines.
Jawaban:
IEnumerable<T>
mewakili serangkaian item yang dapat Anda ulangi (menggunakan foreach, misalnya), sedangkan IList<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.
IReadOnlyList
atau IReadOnlyCollection
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).
ElementAt
metode?