Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/Twitter/Facebook应用程序的OOP结构_Php_Oop - Fatal编程技术网

PHP/Twitter/Facebook应用程序的OOP结构

PHP/Twitter/Facebook应用程序的OOP结构,php,oop,Php,Oop,我正在制作一个与Twitter/Facebook集成的简单PHP应用程序来实践OOP的概念和模式,我需要关于如何设计它的帮助 我的应用程序将做什么 基本上,一旦用户登录,他将显示一个带有标题和正文字段的表单。当他点击“发布”时,这些内容将被适当地转换并发布到Facebook和Twitter上。当然,如果他还没有验证我的FB/Twitter应用程序,他也可以选择验证。这就是我想要达到的目标 到目前为止我提出的结构 由于数据库访问必须在多个文件之间共享,因此我使用单例模式。本质上,我有一个DB类,带

我正在制作一个与Twitter/Facebook集成的简单PHP应用程序来实践OOP的概念和模式,我需要关于如何设计它的帮助

我的应用程序将做什么 基本上,一旦用户登录,他将显示一个带有标题和正文字段的表单。当他点击“发布”时,这些内容将被适当地转换并发布到Facebook和Twitter上。当然,如果他还没有验证我的FB/Twitter应用程序,他也可以选择验证。这就是我想要达到的目标

到目前为止我提出的结构 由于数据库访问必须在多个文件之间共享,因此我使用单例模式。本质上,我有一个DB类,带有一个静态mysqli链接和一个静态方法来获取这个数据库链接。这些模型将使用mysqli函数和这个单一链接。(我现在还不想抽象数据库类型。)

我有一个User类,它保存用户的数据,比如id、用户名和散列密码。它具有基于id、凭据检索用户的方法,甚至可以将当前用户保存到数据库中

Auth类管理会话,并为有效用户返回一个User对象。因此,它管理登录,并在页面访问之间保持用户登录

我有问题的结构 我现在需要访问用户的推特和Facebook信息。当然,它们将位于单独的表中,并且有单独的类与它们交互。但是每个类都与一个用户关联

因此,当我从数据库中获取用户信息时,我还将使用连接从Twitter和Facebook表中获取相应的数据。然后,我的计划是在我的用户对象中实例化一个Twitter和Facebook对象。因此,这两个类可以通过$user->twitter->post(“Something”);访问


这是一个很好的结构,还是有更好的方式组织课程?这是一个简单的应用程序,编码不是我关心的问题。我关心的是结构,因为我应该能够向应用程序添加新的社交网络。

最好将持久性功能保留在域对象之外。我将使用
UserRepository
接口,例如:

interface UserRepository {
  public function findUser($username);
  public function save(User $user);
}
以及实现此接口的
MysqlUserRepository
类。这样,您就可以将特定于数据库的代码排除在
User
类之外

类似地,我会将社交网络功能引入它们自己的界面,比如:

interface SocialNetworkService {
  public function post($status);
}
以及
FacebookService
TwitterService
的单独实现。这允许您添加对新社交网络的支持,而无需修改
User

然后,这些服务可以简单地围绕用户对象,并为该用户提供服务:

$fb = new FacebookService($user);
$fb->post("blah");

所有这些决策背后的一个共同原则是单一责任原则:您的
User
类应该只有一个更改的原因,即您需要更改用户模型的时候。任何其他变化,例如处理数据库或社交网络,都不会影响
用户
类。

我现在可以更清楚地看到我的应用程序的结构。谢谢你的帮助!