1

私はSharePointアプリケーションを作成しており、一貫性と規則を維持するために、データアクセス用のAPIに相当するものを作成するためにいくつかの新しいことを試みています。

私はこれを前に見たことがありません、そしてそれは私にそれが悪いかもしれないと思わせます:)

コンストラクターをオーバーロードして、パラメーターとしてclass Postのみ取得しました。次に、メソッドシグネチャにSPListItemCollectionを取得するSPListItemジェネリックリストが埋め込まれています。Post

より効率的な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ループを使用してみませんか?これで、SPListItemは一度に1つずつ取得され、破棄されると思います。

これを書いているとしたら、「Posts」クラスと「Post」があり、SPListItemCollectionを受け入れるコンストラクターを指定します。

ただし、正直なところ、SharePoint SPListItemsをラップしようとする人を数回見たことがありますが、それは常に価値以上の努力をしているように見えます。

また、SharePoint 2010を使用している場合、SPMetalの使用を検討しましたか?

于 2012-08-15T11:20:59.083 に答える