我的问题是,我希望一些代码(一个捆绑包)在一台服务器上,而一些代码(另一个捆绑)在另一台服务器中,两台服务器都使用相同的数据库,为了正确地解耦代码,我只想根据一些信息从数据库中获取实体,这些信息我只会从一台服务器发送到另一台。
假设我有一个用户在一边,另一边我有一位客户(可能是一个糟糕的例子,但请继续),客户根本不知道用户的情况,用户也不知道客户的情况,但我想根据我在客户中使用的一些信息更新用户的数据(或类似的信息)
这有可能吗?
感谢
编辑: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();
游戏应用程序既不知道也不在乎这个人的联系信息保存在哪里。它可以在同一应用程序中的个人包中。或者它可以在一个完全不同的数据库的不同服务器上。事件侦听器充当中间人。
当然,脱钩还有许多其他方法。任你选择。