도메인에 항목 목록이있는 엔터티가 있으면 IList 또는 IEnumerables로 노출되어야합니까? 예를 들어 Order에는 많은 OrderLine이 있습니다.
답변
IEnumerable<T>
는 (예를 들어 foreach를 사용하여) 반복 할 수있는 일련의 항목을 나타내지 만 IList<T>
추가하거나 제거 할 수있는 모음입니다.
일반적으로 OrderLine을 추가하거나 제거하여 Order를 수정할 수 있으므로 Order.Lines가 IList<OrderLine>
.
그러나 프레임 워크 디자인 결정을 내려야합니다. 예를 들어, 동일한 OrderLine 인스턴스를 두 개의 다른 주문에 추가 할 수 있어야합니까? 아마 아닙니다. 따라서 OrderLine을 주문에 추가해야하는지 여부를 검증 할 수있게하려면 실제로 Lines 특성 만으로 표시 IEnumerable<OrderLine>
하고 처리 할 수있는 Add (OrderLine) 및 Remove (OrderLine) 메소드를 제공 할 수 있습니다. 그 유효성 검사.
답변
IEnumerable에는 Count 메서드가 없으며 인덱스를 통해 컬렉션에 액세스 할 수 없기 때문에 IEnumerable을 통해 IList를 사용하는 대부분의 시간이 있습니다 (LINQ를 사용하는 경우 확장 메서드 로이 문제를 해결할 수는 있지만).