我正在创建一个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
}
这是个坏主意吗?
答案 0 :(得分:1)
这种方法可能是合适的,但FOR循环引起了一些担忧。 _items.Count将强制SPListItemCollection从数据库中检索列表中的所有这些项。对于大型列表,这可能是a)导致限制异常,或b)耗尽大量资源。为什么不使用FOREACH循环?有了它,我认为SPListItems一次被检索和处理。
如果我写这篇文章,我会有一个'Posts'类以及'Post',并给它接受SPListItemCollection的构造函数。
老实说,虽然我曾经多次看到人们尝试包装SharePoint SPListItems,但它总是看起来比它的价值更多的努力。
此外,如果您使用的是SharePoint 2010,是否考虑过使用SPMetal?