Как бороться с объектами классов, не относящихся к микросервису? - PullRequest
2 голосов
/ 23 января 2020

Я пытаюсь разделить монолитную систему c на микросервисы с помощью Spring Boot. Проблема, с которой я столкнулся, заключается в том, что, хотя в каждом микросервисе обычно должны быть классы, реализующие функциональные возможности сервиса, мне нужно получать и иметь дело с объектами, которые инкапсулируют многие классы, связанные с другими микросервисами. Например, приведенный ниже код является частью microservice1, который предоставляет информацию об ученике:

class Microservice1{

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

}

Обратите внимание, что объект Record относится к классу, который принадлежит другому микросервису, который является microservice2 , которые предоставляют записи о студентах в следующем виде:

class Microservice2{

List<int> marks;
Behaviour behaviour;

}

Теперь Поведение также является другим объектом, класс которого принадлежит другому микросервису 3 и т. д.

Мой вопрос является: Как мне избавиться от необходимости включать все эти классы в микросервис 1, потому что микросервис1 должен иметь дело с ними при предоставлении сервиса? Проблема серьезная, потому что у меня много инкапсулированных классов друг в друге, и мне нужно было бы включить большинство системных классов monolithi c в один микросервис.

Ответы [ 2 ]

2 голосов
/ 23 января 2020

Насколько я понимаю, вы делаете ваши микросервисы слишком гранулированными. У вас будет много проблем при реализации этого способа.

ИМХО , если Record относится к Student И принадлежит к тому же бизнес-контексту , они принадлежат тот же микросервис.

Как сказал Дэвид в комментариях, концепция ограниченного контекста может (действительно) помочь вам.

В любом случае, представьте, что вы хотите следовать той линии, которую предлагаете. Если Record принадлежит Микросервису B, и вы должны ссылаться на него по составу где-нибудь в Микросервисе A, единственное, что вам нужно, это его первичный ключ. Не весь объект.

Было бы что-то вроде этого:

Микросервис A :

Студент. java

public class Student {

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

    // getters and setters omitted for brevity
}

Микросервис B :

Запись. java

public class Record {

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

    // getters and setters omitted for brevity
}

И т. Д.

Но, как я уже сказал, возможно, это не лучший подход.

См. здесь хорошая статья о ограниченном контексте.

1 голос
/ 24 января 2020

Полагаю, вы четко понимаете ограниченный контекст. Практически, будет сложно проверить каждый класс на наличие отношений друг с другом, как вы показали в своем примере. Я бы предложил использовать инструмент, который может наглядно показать вам зависимость. Затем, поместив их в их ограниченный контекст, вы можете начать сопоставление клавиш, чтобы получать данные из других микросервисов.

...