1

我正在创建一个 SharePoint 应用程序,并且正在尝试一些新的东西来创建相当于 API 的数据访问以保持一致性和约定。

我以前没见过这个,这让我觉得它可能很糟糕:)

我已经重载了构造函数,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
    }

这是一个坏主意吗?

4

1 回答 1

1

这种方法可能是合适的,但 FOR 循环引起了一些担忧。_items.Count 将强制 SPListItemCollection 从数据库中检索列表中的所有项目。对于大型列表,这可能 a) 导致限制异常,或 b) 占用大量资源。为什么不使用 FOREACH 循环?有了这个,我认为 SPListItems 一次被检索和处理一个。

如果我正在写这篇文章,我将有一个“Posts”类以及“Post”,并为它提供接受 SPListItemCollection 的构造函数。

不过,老实说,我见过几次尝试包装 SharePoint SPListItems 的人,结果总是看起来付出的努力多于其价值。

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

于 2012-08-15T11:20:59.083 回答