2016-11-19 66 views
2

我最近开始了一个侧面项目。它应该是一个虚拟配方书,具有存储和检索食谱(CRUD)的能力,对它们进行评分和搜索。这并不是什么新鲜事,但我想将它作为桌面应用程序来构建,以便了解有关数据库,单元测试,用户界面等的更多信息。现在核心领域已经完成了很多(我使用DDD方法),并且我实现了大部分的CRUD库,我想通过在线托管核心功能使其更具可扩展性,所以我能够编写多个后端(桌面应用程序,web应用程序,web api等)。拆分和命名微服务

面向服务的架构(或微服务)听起来像是一个很好的方法来做到这一点。我面临的问题是如何决定,我的项目的哪些部分属于单独的服务以及如何命名它们。

取项目的以下部分:

  • 核心结构域(骨料,实体,值对象,逻辑) - >爪哇
  • 持久性(DAO的,储存库中,多个数据库后端实现) - >的Java
  • 搜索(搜索这对持久使用SQL查询数据库用于搜索服务) - >的Java
  • 桌面应用程序 - >JS(电子)或JavaFX的
  • Web应用程序 - >瓶或者Rails
  • 的Web API(管理,费率,搜索使用REST食谱) - >

我最初的做法是把核心领域,持久性,搜索和web API集成到一个单一的子项目和主机在Heroku或类似的东西,整个堆栈。这样我的客户可以使用Web界面。桌面和Web应用程序将独立于不同的项目。 Dektop应用程序可以共享核心域,如果它们都是用Java编写的。

这是一个有效的方法,或者我应该把第一个服务分成更小的部分?你如何命名这些服务?

回答

2

埃里克埃文斯GOTO 2015年会议(https://youtu.be/yPvef9R3k-M)和我100%同意他,回答你的问题。微服务范围应该是一个或者更多的有界上下文。包括它的持久性支持类,REST/HTTP API等。 据我所知,微服务是部署在有界上下文上的包装,并增加了隔离,缩放和弹性方面。 正如你所写,你没有应用战略设计来定义有界的上下文。因此,在将应用程序撕裂为零件之前,请检查它的时间。

+0

如果您考虑包含单个有界上下文和支持功能的微服务,将它们拆分起来要容易得多。我没有定义有界的上下文,但是项目的范围并不真实。如果我不得不绘制一个上下文映射,它将是一个单一的上下文。我认为将所有这些部署作为提供持久性和查询的单一服务是一个不错的选择。 –