3

複数のソーシャルネットワーキングプラットフォームと統合する必要があるMVC4Webサイトを作成しています。フレームワークに組み込まれた新しいOAuthWebSecurityクラスは、認証と承認の問題を解決しました。

私のモデルには、ArticleおよびCommentタイプのオブジェクトがあります。これらのオブジェクトは両方とも「社交的」です。つまり、共有したり、高く評価したりすることができます。

私はこれのためのエレガントな実装を考えようとして立ち往生しています

現在、次のクラスとインターフェイスを定義しています

ISocial-「社交的」タイプが実装する必要のある最小メソッドを定義します

記事とコメントISocialを実装する

IProvider-ソーシャルメディアプロバイダー(AppId、AppSecret、必要なエンドポイントなど)のプロパティとメソッドを定義します

FacebookProviderとTwitterProviderはIProviderを実装します

現在のユーザーが承認したネットワークは、

OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name)

ISocialで定義されたアクションを実行するGenericAPI(JSON)を実装するにはどうすればよいですか?

すなわち

Share()-共有/ツイート記事/ユーザーウォールへのコメント

Comment()-記事の場合、記事の新しいコメントを作成し、コメントの場合、既存のコメントに返信を投稿します

提案された構造の実装提案および/または批判的分析が必要

ありがとう

4

1 に答える 1

3

「プロバイダー」の管理に関する注意事項として。プロバイダーが同じことを実行できるようになる場合でも、実装が異なる場合は、戦略パターンを採用できます。

説明

コンピュータープログラミングでは、戦略パターン(ポリシーパターンとも呼ばれます)は特定のソフトウェアデザインパターンであり、実行時にアルゴリズムの動作を選択できます。正式に言えば、戦略パターンはアルゴリズムのファミリーを定義し、それぞれをカプセル化し、それらを交換可能にします。ストラテジーにより、アルゴリズムはそれを使用するクライアントとは独立して変化します。

あなたの場合、異なる「アルゴリズム」は各プロバイダーのロジックです(たとえば、Facebookにコメントを追加するコード、またはGoogle+に新しい記事を投稿するコード)。

以下の例でSocialContextは、各プロバイダーのジェネリック関数を実行するために使用されるオブジェクトです。電話でプロバイダーを設定する必要がありますSetProvider(IProvider provider)

API呼び出しメソッドはSocialContext、実行時に使用するプロバイダーを決定するためのコードとともにメソッドを模倣できます。

あなたの場合の例を次に示します。

namespace StrategyPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            var context = new SocialContext();

        context.SetProvider(new FacebookProvider()); //switch which provider you want to use

        context.AddComment(new Comment()
            {
                Message = "Heres my Comment!"
            });
    }
}


//providers

public interface IProvider
{
    void AddComment(Comment comment);
    void PostArticle(Article article);
}

public class FacebookProvider :IProvider
{
    public void AddComment(Comment comment)
    {
        //facebook implementation of "AddComment"
    }

    public void PostArticle(Article article)
    {
        //facebook implementation of "PostArticle"
    }
}

public class TwitterProvider : IProvider
{
    public void AddComment(Comment comment)
    {
        //twitter implementation of "AddComment"
    }

    public void PostArticle(Article article)
    {
        //twitter implementation of "PostArticle"
    }
}


public class Article
{
    public string Content { get; set; }
}

public class Comment
{
    public String Message { get; set; }
}



//context to use the providers

public class SocialContext
{
    private IProvider _provider;

    public void SetProvider(IProvider provider)
    {
        _provider = provider;
    }

    public IProvider GetProvide { get { return _provider; } }

    public void AddComment(Comment comment)
    {
        _provider.AddComment(comment);
    }

    public void PostArticle(Article article)
    {
        _provider.PostArticle(article);
    }
}

}

于 2012-12-10T09:01:44.817 に答える