이전 개발자의 C# 데이터 액세스 코드를 약간 리팩토링했으며 사용 패턴에 대해 궁금합니다.개체에 대한 모든 이점. 개체 [i]에 대한 GetObject (i)?
이 코드는 다양한 ActiveRecord 스타일 비즈니스 개체 (기본적으로 데이터베이스 필드를 래핑하는 개체)의 컬렉션 (배열)을 처음에 노출했습니다. 나는 일반적인 목록에 배열을 변경하고있어,하지만 난에 대해 궁금 코드의 특징은 이전의 개발자가 thusly 히, 그는 포장 된 각 개체 유형에 대한 방법을 취득했다 있다는 것입니다 :
이public Thing GetThing(int i) {
return things[i];
}
여러 가지가 있습니다 이 방법들 중에서, 나는 나 자신의 삶에 대해 단순히 그 일들을 직접 언급하는 것보다 그 메커니즘을 사용할 때의 어떤 이점을 생각할 수 없다. 논쟁의 여지가 있기 때문에, 물건은 public 필드가 아니라 public 필드입니다 (이 경우 실제로는 자동 구현 된 속성이므로 가정이 사실임).
나는 분명한 뭔가를 놓치고 있습니까? 아니면 뭔가 밀교?
UPDATE 아마 이러한 컬렉션은 현재 루프 내에서 액세스 명확히해야합니다
for (int i = 0; i < thingsCount; i==) {
dosomthing(GetThing(i));
dosomethingelse(GetThing(i));
}
난에 리팩토링하고있는 :
for (int i = 0; i < thingsCount; i==) {
Thing thing = things[i];
dosomthing(thing);
dosomethingelse(thing);
}
및 심지어 물건을 사용. 각각().
@ Elpezmuerto의 응답을 통해 생각해 보았습니다. 나는 {collection; *을 속성으로 {get; private set;} 콜렉션을 얻은 후에는 아무런 의미가없는 방식으로 코드를 호출하여 수정할 수 있습니다. 이전 개발자는 이러한 코드를 보호 된 것으로 표시 했으므로 사용자의 포인트 1은 필자의 경우 관련이 없지만 각 루프에서 GetThing (i)을 여러 번 호출했는데 동의하지 않습니다. 최고의 리팩터와 같이 보이는 것은 GetThing() 메서드를있는 그대로두고 루프 한 번만 호출하는 것입니다. 감사합니다. – cori
@cori : 예, 개발자가 클래스를 디자인 할 때 일반적으로 발생하는 오류는 변경 사항이 수정 될 경우 발생할 수있는 상황을 고려하지 않고 변경 가능한 컬렉션을 직접 노출하는 것입니다. 콜렉션 코드가 콜렉션을 열거하고 수정할 수있게하려면 'List'이 아닌'IEnumerable '을 노출 시키십시오! –
@cori : 인덱스에 의한 랜덤 액세스는 허용하지만 'IList'인터페이스의 다른 모든 기능이나 'T []'(항목 설정을 허용하지는 않습니다. , 단지 그들을 얻지 마라). 이것은 실제로 제가 [내 자신의 옛 질문] (http://stackoverflow.com/questions/2110440/why-is-there-no-iarrayt-interface-in-net)에서 잠시 후에 물어 본 것입니다. –