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