随着项目范围的扩大,处理单片应用程序



我一直在开发一个整体的ERP web应用程序/工具,它的发展速度比我最初预期的要快,当时我没有考虑微服务,现在越来越难在不共享整个代码库(他们需要检查(的情况下将工作外包给其他开发人员,最重要的是在不同的服务和用户之间分配资源。

使用微服务架构从头开始重新启动应用程序现在不是一种选择,因为重新实现一切都需要很长时间。对此还有其他解决方案吗?

这不仅与微服务有关,还与业务方面有关。

您当前的状况

  • 大型代码库
  • 单片应用程序

长期目标

  • Neal代码从业务领域的角度来看更细粒度
  • 只外包所需的功能,而不是整个代码库

微服务是您所需场景的良好解决方案,同时由于产品已经开发出来,现在很难实现。

您可以评估以下内容。

  1. 即使它是单片的,你有单独的域级模块还是分层结构的
  • 如果它是分层的,而不是作为域分离,那么它就有点难了
  1. 让我们考虑一下您有域级模块
  • 试着找出其他模块与该模块通信的契约,但要通过抽象而不是直接引用该模块
  • 通过这种方式,您可以在monolith本身中分离模块,稍后您可以将其转换为服务

这无疑是一个耗时的过程,你必须一步一步地完成。许多组织都在以这种方式进行转型,即使产品已经开发了10-20年。

更新1:

  1. 每个模块如何相互连接,我们是否需要一个包装模块/应用程序来将所有模块连接在一起
  • Monolith(特别是非模块化(存在耦合问题。所有的模块都不依赖于抽象,所以它有点像三对。

  • 首先确定其他模块可以使用的每个模块的合同。

public interface IModule1Contracts
{
// Method expose by that module to another module.
}

每个模块都需要重复相同的操作。

在IModule1Contracts实现concreate类型的第一点上。它仍然是通过创建对象直接调用module1,但通过这种方式,您有了单独的契约。

  • 下一步将是单独的模块1作为服务
  • 现在,该合约再次实现,但这次是通过像gRPC或Http这样的网络调用实现的
  1. 数据库是否保持不变,或者我是否也需要将其分离
  • 您可以像分离所有域的所有数据库一样进行处理。如果你有时间的话,你可以这样做。

  • 相反,当我在上面提到您可以将模块作为服务进行分离时。在这一点上,您可以考虑为该模块1分离数据库。

这是一个架构问题,也是一个项目对一个项目。我不知道有任何工具可以完成这个过程。大多数情况下,这是一个手动过程,但一旦完成一两个模块,过程将在项目上下文中可见。

最新更新