社交媒体操作的通用 API
Posted
技术标签:
【中文标题】社交媒体操作的通用 API【英文标题】:Generic API for Social Media Actions 【发布时间】:2012-12-10 04:51:06 【问题描述】:我正在创建一个需要与多个社交网络平台集成的 MVC4 网站。框架中内置的新 OAuthWebSecurity 类解决了身份验证和授权问题。
我的模型有文章和评论类型的对象。这两个对象都是“社交的”,即可以共享、发布喜欢等
我被困在试图为此找到一个优雅的实现
目前我已经定义了以下类和接口
ISocial - 定义“社交”类型应实现的最小方法
文章和评论实现 ISocial
IProvider - 定义社交媒体提供商的属性和方法,例如 AppId、AppSecret 和所需的端点
FacebookProvider 和 TwitterProvider 实现 IProvider
当前用户已授权的网络可用
OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name)
如何实现执行 ISocial 中定义的操作的 GenericAPI (JSON)
即
Share() - 分享/推文/评论到用户墙
Comment() - 如果是文章,则为文章创建新评论,如果是评论,则回复现有评论
需要对拟议结构的实施建议和/或关键分析
谢谢
【问题讨论】:
【参考方案1】:关于管理您的“提供者”的说明;如果您的提供商能够做同样的事情,但有不同的实现,您可以采用Strategy Pattern
说明
在计算机编程中,策略模式(也称为 策略模式)是一种特殊的软件设计模式,其中一个 算法的行为可以在运行时选择。正式地说, 策略模式定义了一系列算法,封装了每一个 一,并使它们可以互换。策略让算法变化 独立于使用它的客户。
在您的情况下,不同的“算法”是每个提供商的逻辑(例如,在 Facebook 上添加评论的代码或在 Google+ 上发布新文章的代码)。
在下面的示例中,SocialContext
是用于执行每个 Provider 的通用函数的对象。你只需要通过调用SetProvider(IProvider provider)
来设置Provider
您的 API 调用方法可以模仿 SocialContext
方法以及一些代码来决定在运行时使用哪个 Provider。
这是你的例子:
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);
【讨论】:
感谢 Mike 的提醒 .. 无论如何,我都可以使用单一的 Post 方法来发表文章和评论 .. 我在考虑泛型,但我不确定我是否会因为新奇而过度复杂化我的代码 实际上它不仅新颖,我希望能够将评论分享到用户墙上,API 调用将相同,内容将根据对象类型而有所不同,无论如何我可以避免使用 sharearticle 和 sharecomment 而只使用 share 只有在 IProvider 上有一个 Share(Item item) 方法,这不会阻止你。您似乎想使用相同的方法对不同的对象执行不同的操作。考虑到这个问题 - 我会考虑审查您的设计。 对当前设计缺陷的指针将受到高度重视。如果您能指出正确的方向,我会很乐意将此标记为答案,(并不是说我不认可您已经做出的努力).. 任何模式技巧? 不幸的是,我正在尝试的并不是真正可行的,因为对不同实体执行操作的 API 调用不同,所以我相信我必须按照你的建议实现我的要求。由于我还没有所需的声誉,因此无法对您的回复进行投票。谢谢迈克。以上是关于社交媒体操作的通用 API的主要内容,如果未能解决你的问题,请参考以下文章