当我在自己的域中拥有包含事物列表的实体时,它们应该暴露为IList还是IEnumerables?例如。订单有很多OrderLines。
最佳答案
IEnumerable<T>
表示您可以迭代的一系列项目(例如,使用foreach),而 IList<T>
是可以添加或删除的集合。
通常,您希望能够通过向其添加或删除OrderLines来修改Order,因此您可能希望Order.Lines为IList<OrderLine>
。
话虽如此,您应该制定一些框架设计决策。例如,是否可以将相同的OrderLine实例添加到两个不同的订单?可能不会。因此,鉴于您希望能够验证是否应将OrderLine添加到订单中,您可能确实确实希望将Lines属性仅显示为IEnumerable<OrderLine>
,并提供Add(OrderLine)和Remove(OrderLine)方法,处理该验证。
关于collections - 实体集合的IList与IEnumerable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/376708/