문제

나는 현재를 코딩하는 간단한 데이터 액세스층이 있는 종을 드러내야 한 다른 층을 이룹니다.

내가 내부적으로 구현으로 데이터 목록<>지만,저는 읽고 기억에 대해 뭔가가 노출되지 않 목록 형식을 소비자는 경우에 필요하지 않습니다.

public List<User> GetAllUsers() // non C# users: that means List of User :)

왜(google 도움이 되지 않았)?당신은 일반적으로 무엇을 노출하한 종류의 물건?명령?페?

도움이 되었습니까?

해결책

일반적으로 그것이 최선의 노출은 최소의 강력한 인터페이스는 사용자가 여전히 의미합니다.는 경우에는 사용자만 일부 열거 데이터에 돌아 IEnumerable<User>.는 경우에는 충분하지 않기 때문에 사용자의 필요를 수정할 수 있어야 합니다 목록(주의!지 않은 종종 경우),환 IList<User>.

/편집:

Joel 요청한 유효한 질문에 그의 코멘트:왜 실제로 노출은 최소의 강력한 인터페이스의 대여 사용자가 최대 전력?(구)

이는 방법을 반환하는 데이터가 제공되지 않을 수 있습니 기대 수정할 사용자의 콘텐츠:다른 방법은 클래스의 수도는 여전히 기대하고 목록 non-빈 후이 그것을 참조하 반환되었습니다.상상 사용자는 모든 데이터를 제거합니다.다른 방법금을 추가 확인하는 ele 수도 있었을 불필요합니다.

더 중요한 것은,이 노출 부위의 내부 구현을 통해 반환 유형입니다.필요할 경우 구현을 변경할 미래에는 더 이상 사용하지 않는 IList 컨테이너,내가 문제가 있:나는 하나를 변경해야 할 계약 방법을 소개하면서 구축-주요 변경 내용입니다.또는 나는 필요로 데이터를 복사 목록 컨테이너입니다.

예를 들어,상상하는 효율적인 구현을 사용하여 사고 반환합니다 Values 컬렉션을 구현되지 않았다 IList.

다른 팁

확실히 이소 미만. 인터페이스를 사용하면 커플 링이 줄어들고 데이터 계층 구현의 세부 사항을 쉽게 변경할 수 있습니다. 인터페이스는 상황에 따라 다릅니다. Ilist는 양호하지만 때로는 iCollection 기능이 필요하거나 준비된 값을 지정하려고 할 수도 있습니다.

ienumerable을 반환하기 전에 신중하게 생각해야합니다. 기본 코드가 "수율"을 사용하여 ienumerable을 생성하거나 LINQ를 사용하는 경우 사용 된 모든 리소스를 열어 놓을 수 있습니다.

반환하기 전에 ienumerable을 다른 ienumerable에 복사해야합니다. ILIST를 사용함으로써, 당신은 이것을 요구 사항으로 만들므로 아무도 실수로 ienumerable을 반환 할 수 없습니다.

반면에, ILIST를 반환한다는 것은 발신자에게 반환 된 목록을 변경할 수 있음을 암시합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top