2012-08-14 4 views
1

저는 SharePoint 응용 프로그램을 만들고 있으며 일관성 및 규칙을 유지하기 위해 데이터 액세스에 필요한 API를 만드는 데 새로운 것을 시도하고 있습니다.SharePoint에서이 개체 캐스팅 패턴을 사용할 수 있습니까?

내가 전에이 보지 못했지만, 그 날은 내가 유일한 매개 변수로 SPListItem을에 class Post의 생성자를 오버로드했습니다 :)

나쁠 수 있다고 생각합니다. 그런 다음 메서드 서명에 SPListItemCollection을 사용하는 Post의 포함 된 일반 목록이 있습니다.

더 효율적인 for 문에서 항목을 반복합니다. 즉, Post 개체를 캐스팅하는 방법을 추가하거나 수정해야하는 경우 단일 소스의 클래스 정의에서 수행 할 수 있습니다.

static public List<Post> GetPostsByCommunity(string communityName) 
    { 
     var targetList = CoreLists.SystemAccount.Posts(); //CAML emitted for brevity 
     return Post.Posts(targetList.GetItems(query)); //Call the constructor 
    } 

이 나쁜 생각인가 :

class Post 
{ 
    public int ID { get; set; } 
    public string Title { get; set; } 

    public Post(SPListItem item) 
    { 
     ID = item.ID; 
     Title = (string)item["Title"]; 
    } 
    public static List<Post> Posts(SPListItemCollection _items) 
    { 
     var returnlist = new List<Post>(); 
     for (int i = 0; i < _items.Count; i++) {returnlist.Add(new Post(_items[i]));} 
     return returnlist; 
    } 
} 

이 다음을 수행 할 날 수 있습니다?

답변

1

이 방법이 적합 할 수 있지만 FOR 루프가 약간의 우려를 유발합니다. _items.Count는 SPListItemCollection에서 데이터베이스의 목록에있는 모든 항목을 검색하도록합니다. 큰 목록을 사용하면 a) 스로틀 예외를 일으킬 수 있거나 b) 많은 리소스를 사용할 수 있습니다. FOREACH 루프를 사용하지 않는 이유는 무엇입니까? 이것에 의해, SPListItems가 취득되어 1 회에 1 개 (살) 씩 삭제됩니다.

이 글을 쓰고 있다면 'Posts'클래스뿐만 아니라 'Post'도 가질 것이고 SPListItemCollection을 수락하는 생성자를 제공 할 것입니다.

사람들이 SharePoint SPListItems를 시도하고 감추는 것을 본 적도 있지만, 가치가있는 것보다 더 많은 노력이 필요했습니다.

또한 SharePoint 2010을 사용하는 경우 SPMetal을 사용해 보셨습니까?

+0

응답 해 주셔서 감사합니다. 그래도 질문. 위의 호출에서 Posts()에 전달되는 SPListItemCollection은 SpQuery 이후에 발생합니다. 반복되는 SPListItemCollection에 전체 목록이 포함되어 있지 않음을 확인할 수 있습니다. 나는 뭔가를 놓쳤는가, 아니면 잘못 언급 했는가? – Wesley

+0

내 코드를 보면 // 간결함을 위해 방출 된 CAML이 표시되어 있습니다. 내 코드에서 선명도가 부족하여 모든 목록 항목을 호출하는 것처럼 보였고 그 맥락에서 메모를 이해합니다. – Wesley

관련 문제