如何从第三方应用

时间:2016-05-01 12:20:34

标签: php postgresql symfony

我有以下建筑场景,它不依赖于我,我无法改变:

architecture

在一台服务器/机器上有几个php个应用程序和一个postgres数据库:每个应用程序都使用自己的架构,以便逻辑地分离应用程序的数据。我正在开发一个新的应用程序 - 由 A 代表的应用程序 - 使用Symfony,它管理和存储应该可由其他应用程序部分访问的数据,尤其是一个旧的应用程序。没有使用symfony或任何其他框架开发。为了简单起见,您可以想象一个应用程序存储通过其REST API从客户端发送的电影。我想 B C 访问电影'数据: B 偶尔需要访问所有电影,其中某个演员在其中播放, C 想要更新所有者工作室(反之亦然)。当然,这将是一个 A 的工作,symfony应用程序就是出于这个目的而出生的。所以我认为我有两种方式,用箭头表示:

  1. 以某种方式公开 B 可以调用的API。这样我就不必复制业务逻辑和数据持久性。也许以某种方式暴露Doctrine的实体或控制器。当然我应该至少加载doctrine,容器,httpframework组件的配置以及使用 C 时我想这个解决方案是不可行的,因为我有两个应用程序使用和加载大部分的相同的类,两者之间没有任何隔离。另一个(极端?)解决方案我认为没有使用Symfony将我的 A 功能暴露给其他应用程序:我可以编写一个连接到数据库的API类,并且不需要任何逻辑Symfony的支持(PDO和朋友。没有服务,没有组件,没有。)。幸运的是,我所揭示的内容很少,而且不会是那个大问题。 最后,我会避免通过shell(即app.php console/getMovie)调用 A ,因为它消耗了大量资源,而且我认为它不那么快。我的服务器非常小,无法实现
  2. B ,其他应用可以访问 A 的架构,但这样我可能应该复制一些业务逻辑,我觉得它有点混乱。也许 C 应用可以简单地使用我可以编写的 A 捆绑包,明确编写以暴露一些 A 的功能第三方应用需要
  3. 这些是我找到的两种解决方案,但我很欣赏你认为我应该如何设计这个。

1 个答案:

答案 0 :(得分:1)

可以通过在公共位置(通常是公共模式)中使用视图来在模式之间共享数据。

这有几个好处:

  • 它允许您按照自己的方式使用架构结构。
  • 它会公开您想要的数据。
  • 它允许您管理所需的写访问(是的,视图可写)
  • 它使您能够轻松处理GRANT / REVOKE。
  • 它使应用程序能够利用Postgres`LISTEN / NOTIFY功能进行通信。

有缺点:

更新视图意味着在使用它的所有应用程序上部署新模型文件。它可以是一个独立于其他应用程序依赖于作曲家的项目。