2012-08-14 27 views
1

我创建SharePoint应用程序,并正尝试一些新的东西,创造了相当于数据访问,以保持一致性和公约的API。这个对象投射模式在SharePoint中可以接受吗?

我以前没有见过这个,这让我觉得这可能是坏:)

我重载的构造class Post只采取SPListItem作为参数。那么我的Post嵌入式泛型列表,它接受一个SPListItemCollection方法签名。

我循环遍历更有效的for语句中的项目,这意味着如果我需要添加或修改Post对象的投射方式,我可以在类定义中为单个源执行此操作。

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; 
    } 
} 

这使我能够做到以下几点:

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 
    } 

这是一个坏主意?

回答

1

这种方法可能适用,但FOR循环会引起一些问题。 _items.Count将迫使SPListItemCollection来检索从数据库列表中所有的项目。对于大型列表,这可能导致节流异常,或者b)耗尽大量资源。为什么不使用FOREACH循环?因此,我认为SPListItems是一次检索和处理的。

如果我在写这个,我将有一个“信息”类以及“邮报”,并给它的构造函数接受SPListItemCollection。

说实话,虽然有几次我见过人们尝试和包装SharePoint SPListItems,但总是会看起来比付出更多的努力。

此外,如果您使用的是SharePoint 2010,那么您是否考虑过使用SPMetal

+0

感谢您的答复。不过,问题。在上述调用中传递给Posts()的SPListItemCollection发生在SpQuery之后。我可以确认被迭代的SPListItemCollection不包含完整列表。我错过了什么,或者您是否错误地评论了这个评论? – Wesley 2012-08-15 18:51:50

+0

看着我的代码,我注意到简洁发出// CAML。我认为我的代码不够清晰,看起来像是在调用所有列表项,并且我理解你在这种情况下的注释。 – Wesley 2012-08-15 18:53:08

相关问题