@topuserman

Как правильно создавать объект-сущность?

Часто нужно создать какой-то объект некой сущности в системе.

Например, сущность Заказ, эта сущность содержит в себе несколько других сущностей: Товары и Покупатель.

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

Как мне ранее объясняли здесь, нужно создавать три сущности: Заказ, Покупатель и Товар.

Далее у каждой сущности должен быть некий репозиторий, через который мы можем получать эти сущности через методы, getById, findByCritical и т.д.

Что делать, если не хочется для каждой сущности плодить репозитории ? т.к. по сути для каждой сущности нужен только 1 метод: getById.

Ранее я этот делал так: прямо в конструктор сущности передавал ID, а в конструкторе через API получал данные сущности и заполнял свойства. - это решение никому не понравилось и все критиковали на этом форуме.

Вопрос, какие тогда еще варианты есть ? можно пожалуйста примеры ?

Может в каждой сущности создавать метод-фабрику, createById ? которая будет получать данные сущности, заполнять свойства и делать return self ? или как правильно организовать это, чтобы не плодить лишние сузности.

UPD

Мне не нравится вариант с репозиториями, т.к.
1. у каждого репозитория у меня будет только 1 метод. - getById
2. у каждой сущности у меня по 20 свойств, т.е. из репозитория в конструктор сущности нужно передавать 20 параметров - выглядит чудовищно, решение: создать DTO и передавать в конструктор
3. получается, еще одно доп. сущность - DTO

В итоге, для каждой сущности, нужно:
сама сущность + его интерфейс, репозиторий, DTO сущности + классы исключения для репозитория EntityNotFoundException для getById

выглядит очень громоздно, для простой сущности, которая является лишь обердкой над существующим API, которай просто должен получить данные по API и создать нексколько методов
  • Вопрос задан
  • 255 просмотров
Пригласить эксперта
Ответы на вопрос 1
dmitriylanets
@dmitriylanets
веб-разработчик
на самом деле выглядит громоздко, но в этом есть ряд приимуществ.
1. вы не зависите от слоя хранения, получения
2. легко накатить тесты

попробуйте организовать вашу логику и работу приложения не концентрируясь на внешнем апи.
1. создайте сущности+интерфейсы+исключения
2. создайте тестовый репозитрий реализующий метод получения но с хранением объектов прямо в репо.
3. реализуйите логику работы с репозиториями и сущностями
4. покройте код тестами используя тестовый репо, проверьте работу приложения
5. реализуйте репозиторий работающий с внешним апи, переключите работу приложения на него.

из приемуществ: тестируемый код , маштабируемость в будущем.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы