Spring Basic: связь между Сервисами-репозиториями

1

Я разрабатываю новый модуль, и мне нужно знать, является ли он "правильным" связь между службами и репозиториями, соответствующими различным объектам. Пример: у меня есть Object1 и Object2. Object1 состоит из множества Object2. И у меня есть этот код:

@Repository
public class Object1Repository{}

@Repository
public class Object2Repository{}

@Service
public class Object1ServiceImpl{

private Object1Repository obj1Repo;
private Object2Repository obj2Repo;

}

@Service
public class Object2ServiceImpl{
private Object2Repository obj1Repo;
}

Приемлемой практикой является вызов из Object1Service... непосредственно в Object2Repository? Или мне нужно позвонить из Object1Service в Object2Service и сделать все вызовы object2Repository из соответствующей службы?

Много раз, пока я манипулирую object1 в своих службах, мне нужно загрузить определенную часть объекта2, и мне нужно знать, является ли это хорошим решением для прямого вызова в репозиторий.

Это то, чего нет в моих книгах весны, и у меня недостаточно опыта, чтобы определить, является ли это обычной практикой или я нарушаю архитектуру.

Благодарю!

Теги:
spring
spring-mvc

1 ответ

0
Лучший ответ

Хранилища/объекты доступа к данным Объекты должны быть повторно использованы, это нормально, чтобы несколько служб ссылались на один и тот же репозиторий. Они также должны быть без гражданства, так что несколько ссылок на них не должны "разрушать архитектуру".

Если в методе Object2Service, который вам нужен из Object1Service, есть некоторая бизнес-логика, вы должны вызвать этот метод, но в противном случае нет ничего плохого в вызове репозитория напрямую, не проходя через другую службу.

Вещь, на которую нужно обратить внимание, - это границы транзакций. Если обе услуги являются транзакционными с распространением, то это легко, вы можете без проблем смешивать и сопоставлять. Если по какой-либо причине одна из служб является транзакционной, а другая - нет, а некоторые из репозиториев являются транзакционными, а другие нет, то вам нужно будет убедиться, что у вас есть какая-то транзакционная демаркация, и не выполняйте вызовите репозиторий, который не указывает транзакцию из службы, которая не указывает транзакцию.

Кроме того, имейте в виду, что в общих службах не нужно сопоставлять "один к одному" с конкретными объектами, обычно для службы используется несколько доменных объектов. Служба может соответствовать определенному типу пользователя, где методы реализуют случаи использования на уровне детализации (действия низкого уровня, которые выполняет пользователь, каждый из которых, вероятно, хочет выполнить как единое целое). Хотя репозитории могут быть сгенерированы генератором кода в некоторой степени на основе таблиц в базе данных, реализация службы не обязательно механическая, как это, это зависит от бизнес-логики, которая должна быть раскрыта.

  • 0
    Спасибо за ответ!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню