关于分离 java 网络应用程序部分的建议

Advice on separating parts of java web application

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

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

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

我认为它们应该在某种程度上是独立的:例如,如果出现内部服务器错误,我不想关闭机器学习模型的自优化,只是为了看看 [=30= 发生了什么].

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

恕我直言

您提出了两个不同的方面

  • ‘封装问题’——这是关于代码组织/模块化的问题
    这有助于保持代码模块化,因此您可以单独构建和测试未直接耦合的代码部分。

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

  • 1 个应用和 2 个服务(就像你现在做的那样)

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

    根据复杂性,运行时间要求,......等你可以选择

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

注意:如果服务对于常见用例足够安全,您可以使用 1 个应用程序。

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

  • UI
  • 毫升
  • 公共代码的问题(如第3个)需要根据代码共享量来决定(我猜ML比较轻 数据库)