【发布时间】:2018-05-11 16:45:21
【问题描述】:
我想知道您如何在 java 中将项目模块划分为单体应用程序,以便以后将模块转换为微服务?
我的个人命名如下所示:
com.company.shopapp.product
...product.domain (ddd, services, repositories, entities, aggregates, command handlers - everything with package scope)
...product.api (everything with public scope)
...product.controller (CQRS endpoints for commands in web perspective - (package scope))
...product.query(CQRS - package scope)
com.company.shopapp.sales
- domain
- api
- controller
- query
我们在这里拥有的基本上是作为包的产品管理上下文和销售上下文。
模块之间仅使用公共接口(api 包)进行通信。在我的项目中,我使用“..api.ProductFacade”来集中通信点。
当我的“销售”模块增长时,我将通过将“..api.ProductFacade”接口实现为“rest”或“soap”客户端将其转变为微服务,另一方面,我将基于 ProductFacade 创建 Endpoint/RestController界面。 包“com.company.shopapp.product.api”将转换为扩展库并添加到两个项目中。
编辑: 我可以使用@Feign 库开箱即用地实现这一目标。 https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-feign.html#spring-cloud-feign-inheritance
整个想法感觉不错,但也许您有更好的方法来设计项目并确保将其分解为微服务不会破坏整个应用程序。
【问题讨论】:
-
关于“太宽泛”的轻快。 “固执己见”......但是,嘿 - 非常有趣的问题!
-
也许这个有用:medium.com/@wrong.about/…
标签: java scope package domain-driven-design microservices