我正在创建一个MVC4网站,该网站需要与多个社交网络平台集成。框架中内置的新OAuthWebSecurity类解决了身份验证和授权问题。

我的模型的对象类型为文章和评论。这两个对象都是“社交的”,即可以共享,发布喜欢的对象等

我一直在试图为此找到一个优雅的实现

目前,我已经定义了以下类和接口

ISocial-定义“社交”类型应实现的Minimum方法

文章和评论实施ISocial

IProvider-为社交媒体提供者定义属性和方法,例如AppId,AppSecret和所需的端点

FacebookProvider和TwitterProvider实施IProvider

当前用户已授权的网络可用于

OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name)

如何实现执行ISocial中定义的操作的GenericAPI(JSON)



Share()-在用户墙上共享/发推文章/评论

Comment()-如果是文章,则为文章创建新评论,如果是评论,则将回复发布到现有评论

需要对拟议结构进行实施的建议和/或关键分析

谢谢

最佳答案

作为管理“提供商”的说明;如果您的提供者将能够执行相同的操作,但是具有不同的实现,则可以采用Strategy Pattern

描述


  在计算机编程中,策略模式(也称为
  策略模式)是一种特殊的软件设计模式,
  可以在运行时选择算法的行为。正式来说,
  策略模式定义了一系列算法,将每个算法封装在一起
  一,并使它们可以互换。策略让算法变化
  独立于使用它的客户。


对于您而言,每个提供商的逻辑都是不同的“算法”(例如,在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);
    }
}


}

关于c# - 社交媒体操作的通用API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13795180/

10-10 21:28