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