符号2中的解耦



我的问题是,我希望一些代码(一个捆绑包)在一台服务器上,而一些代码(另一个捆绑)在另一台服务器中,两台服务器都使用相同的数据库,为了正确地解耦代码,我只想根据一些信息从数据库中获取实体,这些信息我只会从一台服务器发送到另一台。

假设我有一个用户在一边,另一边我有一位客户(可能是一个糟糕的例子,但请继续),客户根本不知道用户的情况,用户也不知道客户的情况,但我想根据我在客户中使用的一些信息更新用户的数据(或类似的信息)

这有可能吗?

感谢

编辑:User和Customer都是类/捆绑包,它们是哪一个并不重要,因为它们仍然在单独的服务器上,我希望Customer类/捆绑在不知道User类/捆绑的结构的情况下更新用户类/捆绑。

第2版:

让我们想象一下,我在1台服务器(一台实际的物理服务器)上使用名为FOSUserBundle的糟糕捆绑包,在同一台服务器上,我可以注册、登录,无论用户需要操作什么,还有一个帐户实体:

<?php
namespace MyBundleEntity;
use DoctrineORMMapping as ORM;
/**
 * @ORMEntity
 * @ORMTable(name="accounts")
 */
class Account
{
    protected $id;
    /**
     * @ORMOneToOne(targetEntity="User", cascade={"persist", "remove"})
     */
    protected $user;
    /**
     * @ORMManyToMany(targetEntity="File", cascade={"persist", "remove"})
     */
    protected $files;
}

该实体中的用户属于FOSUserBundle,我希望文件与该实体保持完全独立,文件在数据库中,由另一个bundle在另一台服务器上创建。为了能够更新特定的帐户,我需要将帐户的ID发送到另一台服务器,基于该ID,我想更新正确的帐户,现在,这个服务器不知道File的实现,而另一个服务器也不知道Account的实现,但他们都可以访问数据库,所以我可以这样做吗?

在php中解耦的方式与在任何其他语言中解耦的方法几乎相同。

考虑一个裁判分配系统。我们有:

class GameReferee
{
  private $game;
  private $refereeName;
  private $refereeBadge;
  private $refereeGuid;  // Globally unique identifier
}

我们存储裁判的名字和徽章,因为他们出现在比赛日程上。但假设我们需要联系裁判,因为比赛已经改变了。我们可以:

$event = new FindRefereeContactInfoEvent($refereeGuid);
$eventDispatcherer->dispatch($event);
$contactInfo = $event->getContactInfo();

游戏应用程序既不知道也不在乎这个人的联系信息保存在哪里。它可以在同一应用程序中的个人包中。或者它可以在一个完全不同的数据库的不同服务器上。事件侦听器充当中间人。

当然,脱钩还有许多其他方法。任你选择。

相关内容

  • 没有找到相关文章

最新更新