我的提议可能听起来很奇怪,但我有我的理由。
很长一段时间以来,我们都有这个基于 Spring 的 API,它起源于 CRUD 功能的抽象 REST 服务集。然而,随着时间的推移,我们开始在顶层构建业务和表示层,直到我们陷入死胡同。不要误会我的意思,Spring/Hibernate 是很棒的框架,构建在 JVM 之上有其明显的优势,包括性能优于 PHP 等其他 Web 技术。与 PHP 相比,它为我们提供了更深入的方式来控制事务、多线程、处理字节数据、控制原生 C++ 应用程序、使用 JNI 等。
堆栈明显碰到硬墙的地方是需求最常更改的地方,即业务和表示层。将应用程序转变为以用户为中心的现代社交应用程序,我们经历了职业生涯中最严峻的挑战。Java EE 表示技术很难使用。此外,由于构建测试和部署大规模 Java 应用程序的传统障碍,改变业务需求变成了一个非常长的周期。
在很大程度上,我们也觉得我们正在尝试重新发明轮子。在 PHP 世界中,已经存在很多项目,它们为您提供了一个完整的管理系统,与任何类型的后端系统无关(将挂钩映射到 REST/SOAP 端点)。他们中的许多人都准备好了所有这些功能,允许管理员友好地更改场景和规则,具有模板等。另外,基于 PHP 意味着绝对不会在构建和部署上浪费时间。编写更改,测试,断言它有效,然后切换。
我们现在的想法是找到一种方法来移动这种基于 PHP 的前端服务器应用程序中的业务和表示层,并将纯后端的东西留给 Spring/Hibernate。不过,由于我们对 Spring 的相对缺乏经验,我们有一些担忧。
如果我们使用 PHP 方法实现业务方法,我们如何保持事务安全?我的意思是,如果一个业务方法必须向 JAVA 发出三个单独的 HTTP 请求,我们如何保证它们都将在同一个事务中执行,DB 明智的?
有没有办法在两个系统之间使用代理或承诺对象?例如,如果 PHP 业务方法需要调用 Spring 搜索方法从数据库中获取对象集合,然后将其传递给另一个 Spring 方法,这将意味着整个集合必须来回发送。也许,可以将它存储在 JAVA 端的会话对象中,然后简单地将空代理发送回前端,前端可以将其返回到另一个 java 方法。
我们很多基于 Spring 的功能依赖于插件结构,使用 Spring 事件。我们如何才能使我们的前端服务器也能在每个发生的 ackend 事件上得到通知。我在这里有两个想法:一个后处理过滤器,它使用一些命名约定简单地向前端服务器上的控制器发出 POST 请求。或者......使用某种消息队列,例如 JMS 或 RabbitMQ,或者为什么不使用像 Reddis 这样的东西,在那里人们可以观察数据的变化
以前有谁这样做过?一般来说,这是一个好主意吗?任何建议如何解决上述问题?