【问题标题】:How to deal with objects of classes that are irrelevant to the microservice?如何处理与微服务无关的类的对象?
【发布时间】:2020-05-09 16:45:38
【问题描述】:

我正在尝试使用 Spring Boot 将单体系统划分为微服务。我遇到的问题是,虽然每个微服务通常应该有实现服务功能的类,但我需要接收和处理封装了许多与其他微服务相关的类的对象。例如,下面的代码是 microservice1 的一部分,提供学生信息:

class Microservice1{

int id;
String name;
int grade;
Record record;

}

现在请注意,Record 对象属于另一个微服务的类,即 microservice2,它提供学生记录,如下所示:

class Microservice2{

List<int> marks;
Behaviour behaviour;

}

现在 behaviour 也是另一个对象,其类属于另一个微服务 3,依此类推。

我的问题是:我如何摆脱必须在微服务 1 中包含所有这些类的问题,因为微服务 1 需要在提供服务时处理它们?问题很严重,因为我有许多相互封装的类,我需要在一个微服务中包含大部分单体系统类。

【问题讨论】:

  • 恕我直言有界上下文概念可以帮助您。
  • 澄清一下,我们可以假设您的问题是不希望一个微服务依赖另一个微服务的类文件吗? +1

标签: java spring-boot object microservices encapsulation


【解决方案1】:

据我所知,您的微服务过于细化。实施这种方式会遇到很多麻烦。

恕我直言,如果 RecordStudent 相关并且属于相同的业务上下文,则它们属于相同的微服务。

正如 David 在 cmets 中所说,限界上下文概念可以(真正)帮助您。

无论如何,假设您想遵循您提议的路线。如果Record 属于微服务 B,并且您必须在微服务 A 的某个地方通过组合来引用它,那么您唯一需要的就是它的主键。不是整个对象。

应该是这样的:

微服务A

Student.java

public class Student {

    private Integer id;
    private String name;
    private Integer grade;
    private Integer recordId;

    // getters and setters omitted for brevity
}

微服务B

Record.java

public class Record {

    private Integer recordId;
    private List<Integer> marks;
    private Integer behaviourId;

    // getters and setters omitted for brevity
}

等等..

但正如我所说,也许这不是最好的方法。

请参阅here 一篇关于限界上下文的好文章。

【讨论】:

    【解决方案2】:

    我相信您对有界上下文方面很清楚。实际上,正如您在示例中显示的那样,很难审查每个班级之间的关系。我建议使用可以直观地向您显示依赖关系的工具。然后,将它们放入有界上下文后,您可以开始键映射,以从其他微服务获取数据。

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 2017-12-05
      • 2017-11-09
      • 2017-07-20
      • 2019-12-03
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      相关资源
      最近更新 更多