java - 领域对象共享微服务

标签 java database-design architecture microservices spring-cloud

我正在尝试了解微服务。我想知道如何解决微服务架构中一对多/多对多关系的问题以及最佳实践是什么。假设我想将学生类(class)应用程序转换为学生服务和类(class)服务以及学生服务谈话到学生表和类(class)服务谈话类(class)表在同一个数据库中。

例子:
学生可以注册很多类(class),很多类(class)也可以有很多学生(多对多关系)。我有 2 个微服务
微服务 1:学生服务
微服务 2:类(class)服务

学生服务有学生对象

@Entity
@Table(name = "STUDENT")
public class Student {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;

@Column(name = "NAME")
private String name;


//@ManyToMany(fetch = FetchType.LAZY)
//@JoinTable(name = "STUDENT_COURSE", joinColumns = @JoinColumn(name = //"STUDENT_ID"), inverseJoinColumns = @JoinColumn(name = "COURSE_ID"))
//  private List<Course> courses = new ArrayList<Course>();
}

类(class)服务有类(class)对象
@Entity
@Table(name = "COURSE")
public class Course {

@Id
@Column(name = "ID")
private long id;

@Column(name = "COURSE_NAME")
private String name;

//@ManyToMany(mappedBy = "courses", fetch = FetchType.LAZY)
//private List<Student> students = new ArrayList<Student>();
}

我了解学生服务必须调用类(class)服务来获取类(class),但我如何将类(class)映射到学生?(例如学生 A 已注册类(class) X、Y、Z)
  • 如何获取学生的类(class)列表或学生的列表
    类(class)?
  • 我需要复制类(class) 类(class) 学生
    服务
    学生 类(class) 类(class)服务 ?
  • 我需要吗
    将域类移动到公共(public)项目,然后在它们之间共享
    避免重复的微服务?

  • 您能否通过回答解决微服务中多对多关系问题的最佳实践来帮助我?

    最佳答案

    在考虑微服务时,记住 Bounded contexts 的概念会有所帮助。

    Martin Fowler : Bounded Contexts have both unrelated concepts (such as a support ticket only existing in a customer support context) but also share concepts (such as products and customers). Different contexts may have completely different models of common concepts with mechanisms to map between these polysemic concepts for integration.



    在应用程序的每个微服务中,学生和类(class)的概念可能会有很大不同。例如,Student 可以在 StudentInformationManagement 微服务中定义为具有标识符、名字、姓氏和地址的人,并且在 CourseAttendance 微服务中只有一个标识符和类(class)列表。

    也就是说,我不会为这些微服务使用共享数据库,而是使用所需的实体创建单独的数据库。只有标识符在服务之间“共享”。

    在设计数据模型时尝试考虑您的过程:当学生注册时我会得到哪些信息?他什么时候报名上课?

    关于java - 领域对象共享微服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50265973/

    相关文章:

    java - 带有简单数据库的Android应用程序架构

    java - 非常简单的 2D 游戏中的 libgdx 像素碰撞

    java - 双线性插值异常

    java - Grails、Grails RabbitMQ 插件、Java 、Spring AMQP - 多个客户端

    Java LinkedList 问题——如何删除满足特定条件的项

    sql - 面向对象的程序员如何了解数据库驱动的编程?

    sql-server - 为多个表中的每一行创建全局 ID 以用于通知

    mysql - 数据库连接-数据库设计-父级-子级-子级的子级

    ios - 核心蓝牙 : How to design code for many characteristics (30 - 40)?

    Javascript 我应该使用哪些其他技巧来代替导出符号