【问题标题】:Rails/React.js: How to avoid duplicate computationRails/React.js:如何避免重复计算
【发布时间】:2018-07-21 23:09:48
【问题描述】:

我有一个带有 React.js 前端的 Rails 应用程序。 用户可以上传包含一些 JSON 数据的文件,我的应用程序将读取数据并根据数据以漂亮的图表向用户显示一些统计信息。

我还需要一个 API 来接收带有 JSON 数据的请求,执行相同的计算以获取相同的统计信息,并以请求中指定的格式(例如 YAML 或 JSON 或纯文本)将文件返回给用户)。

问题是,我到底在哪里进行计算?

如果我在我的组件中某处的前端执行它们,那么我必须在后端编写类似的逻辑,以便 API 可以返回统计信息。

另一方面,由于我没有将任何内容保存到数据库中,因此创建一个完成计算的模型并没有任何意义。

不确定正确的结构是什么。

【问题讨论】:

    标签: ruby-on-rails reactjs architecture structure dry


    【解决方案1】:

    因为您需要公开原始 API,所以在 Rails 应用程序的服务器端具有逻辑是不可避免的。从您提供的细节来看,您的主要考虑似乎应该是避免重复业务逻辑。只剩下一个解决方案:将计算代码放入 Rails 后端,并通过 API 公开

    您没有将任何内容保存到数据库这一事实很好。服务器通常负责执行操作而不存储任何类型的持久状态。如果不是这种情况,我们将依赖客户端代码在各处执行大量计算——这意味着人们的本地机器将试图通过浏览器处理诸如大数据之类的东西;非常不切实际。

    在服务器端构建 API 后,在 React 应用程序中利用这些 API 端点。流程可能类似于:

    1. 用户点击上传文件
    2. React 应用获取文件,读取其中的数据
    3. React 应用获取相关数据,调用 Rails 应用上的 API 端点来执行计算
    4. React 应用接收响应并将这些漂亮的图表组合在一起

    【讨论】:

    • 太好了,谢谢。在那种情况下,您认为它在 Rails 应用程序中会有所不同,特别是我将执行计算的实际函数放在哪里?在控制器中?还是我做一个模型,比如计算器,可以做到这些?
    • 我对 Rails 本身只有一点经验,但从 MVC 的角度来看,您会希望将计算(业务逻辑)保存在模型中。您的“控制器”将处理 React 应用程序 Rails 模型(即 REST API 端点)的通信方面。
    猜你喜欢
    • 1970-01-01
    • 2016-09-21
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多