此对象转换模式在SharePoint中是否可接受?

时间:2012-08-14 16:23:27

标签: sharepoint design-patterns sharepoint-2010

我正在创建一个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
    }

这是个坏主意吗?

1 个答案:

答案 0 :(得分:1)

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

如果我写这篇文章,我会有一个'Posts'类以及'Post',并给它接受SPListItemCollection的构造函数。

老实说,虽然我曾经多次看到人们尝试包装SharePoint SPListItems,但它总是看起来比它的价值更多的努力。

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