在 Java 项目开发中,为了方便进行依赖管理,常用的依赖管理工具有 Maven、Gradle。由于我司惯用 Maven,所以这里以 Maven 举例,为了提高代码复用率,Maven 提供了 模块化 开发方式,就是把可复用的代码写在一个项目中,打包成 jar 包,再由需要的项目进行引用。
在微服务项目开发中,把复杂的逻辑按照业务边界划分为一个个服务,也需要使用模块化开发的方式,一般有两种开发模式:
下面具体说明一下两种开发模式的不同,因为我司是一个电商公司,所以这里就以电商场景为例:
这种模式下,按照业务边界划分服务,一个服务一个工程(一个 git 仓库),只有对应的开发人员才会有对应代码仓库的权限,如果有业务交叉,只需要提供 API 文档或者接口(Feign 或者 Dubbo)给其他开发人员即可
mall-product.gitmall-order.gitmall-cart.gitmall-search.git这种模式就是 Maven 的聚合模式,所有代码都在一个工程(一个 git 仓库)下,只要是相关的开发人员就可以看到所有的代码,这种模式有一个好处就是可以对整个项目的层次有一个清晰的理解,方便开发人员理解代码。
mall.git
我司的项目组织架构是结合了上面两种开发模式的,大部分项目都是以第一种方式进行开发的,还有一些业务边界不是很清晰的项目就以组的形式,一组服务一个工程,交由具体的开发组进行开发,降低项目复杂度。