0

我正在创建一个预测比特币价格的 Java Web 应用程序。我在那里有 3 个重要的“部分”:

  1. 网络栈(Spring+Thymeleaf+Hibernate)
  2. 解析 API 并将 btc 价格保存到数据库中的部分
  3. 机器学习模型,从数据库中获取数据并自动更新。

现在这些部分都在一个 jar 中,存储在不同的包中。我觉得它们完全不同,将它们存储在不同的包装中是不够的!

我相信它们应该是独立的:例如,如果出现内部服务器错误,我不想关闭机器学习模型的自我优化,只是为了看看 Tomcat 发生了什么。

我的业务逻辑应该连续工作,每个部分都应该独立于它不需要的任何部分工作。也许它们应该装在三个不同的罐子里?有没有人有这方面的经验?或者也许有人知道在大型企业项目中不同的逻辑部分是如何分离的?

4

1 回答 1

1

恕我直言

你提出了两个不同的方面

  • “包问题” - 这是关于代码组织/模块化
    这有助于保持代码模块化,因此您可以单独构建和测试不直接耦合的代码部分。

  • '内部服务器错误不应停止 ML'。这决定了您正在运行多少个运行时组件/子组件。
    在您的情况下 - 似乎有 2 项服务 - UI 和 ML。
    你可以运行选择运行

  • 1 个应用程序和 2 个服务(就像您现在所做的那样)

  • 或 2 个不同的应用程序,每个应用程序有 1 项服务

    根据复杂性、运行时需求……等等,您可以选择

  1. 您的应用程序代码是否是故障安全的
    对于任何一个选项 - 要求您构建的服务部件对于常见用例(即异常处理)是故障安全的,以确保容器不会因预期错误而崩溃。(INFRA 故障等……不在此范围内)

注意:如果服务对于常见用例具有足够的故障安全性,您可以使用 1 个 APP。

如果您选择 2 个不同的应用程序(UI 和 ML 各 1 个),将代码拆分为 2 个子项目是有意义的

  • 用户界面
  • 机器学习
  • 公共代码的问题(作为第 3 个)需要根据代码共享的数量来决定(我猜 ML 在 DB 上更轻)
于 2020-07-02T16:04:45.563 回答