Etki alanımda öğe listeleri olan varlıklar olduğunda, bunlar IList veya IEnumerables olarak gösterilmeli mi? Örneğin, Order'ın bir sürü Sipariş Hattı vardır.
Etki alanımda öğe listeleri olan varlıklar olduğunda, bunlar IList veya IEnumerables olarak gösterilmeli mi? Örneğin, Order'ın bir sürü Sipariş Hattı vardır.
Yanıtlar:
IEnumerable<T>
(örneğin foreach kullanarak) üzerinde yineleyebileceğiniz bir dizi öğeyi temsil ederken IList<T>
, ekleyebileceğiniz veya çıkarabileceğiniz bir koleksiyondur.
Tipik olarak, Sipariş Hatlarını ekleyerek veya kaldırarak bir Siparişi değiştirebilmek isteyeceksiniz, bu nedenle muhtemelen Sipariş Hatlarının bir IList<OrderLine>
.
Bunu söyledikten sonra, almanız gereken bazı çerçeve tasarım kararları var. Örneğin, aynı OrderLine örneğini iki farklı siparişe eklemek mümkün olmalı mı? Muhtemelen değil. Bu nedenle, siparişe bir OrderLine eklenip eklenmeyeceğini doğrulayabilmek isteyeceğiniz için, Lines özelliğini yalnızca bir olarak ortaya çıkarmak IEnumerable<OrderLine>
ve işleyebilen Add (OrderLine) ve Remove (OrderLine) yöntemleri sağlamak isteyebilirsiniz. bu doğrulama.
IReadOnlyList
veya kullanabilirsiniz IReadOnlyCollection
.
IReadOnlyList
hiç mantıklı değil.
IEnumerable, Count yöntemine sahip olmadığından ve koleksiyona bir dizin aracılığıyla erişemediğiniz için çoğu zaman IEnumerable üzerinden IList ile devam ediyorum (LINQ kullanıyorsanız, uzantı yöntemleriyle bunun üstesinden gelebilirsiniz).
ElementAt
yöntem?