репозиторий, сам репозиторий на вход получает доменную модель и на выход должен точно так же ее отдавать. Всё окей, если мы просто накрываем наш UserRepository интерфейсом UserRepositoryInterface и тогда мы можем внутри нашего репозитория сделать метод
create(domainModel) { ... }
внутри метода create замаппать domainModel данные таким образом, что бы они легли на entity внутри нашей бд, после того как произойдёт create нам вернеться не domainModel, а entity из бд, далее мы ее снова перемапаем и из databaseEntity превратим в DomainModel(Всё делаем ручками). Как только я хочу использовать baseRepository, что бы явно не прописывать методы create/delete/find/count ...etc, то всё, вся эта логика идёт лесом, метод
create(domainModel) {}
принимает нашу модельку, но нужен какой то универсальный маппер, причём маппер в 2 стороны, один из domainModel to dbEntity, а второй в обратную сторону, насколько ок будет писать такой общий маппер и юзать его, что бы появилась возможность завезти наследование? Сразу говорю, вариант выкинуть наследование не рассматриваю)
ммммм..... а почему у репозитория есть метод create?
по описанию звучит как задача гидрации в doctrine или hibernate, ее руками делаете, потому что ORM не используете?
Потому что у меня nodejs он не умеет в доктрину и хибернейт
по сути это обычная схема: dto-entity / entity->dto универсального не найдешь, все ручками, сущность превращаешь в рич модель и через методы наполняешь, в дтошку аналогично через конструктор присваиваешь, если у тебя на беке доктрина, то она qb своим умеет в конструктор передавать указанные свойства сущности в метод ->select('NEW Dto(user.id, user.name)');
Вот про это понятно, если я явно пишу метод add/delete, то конечно я ручками могу замапать из dto->entity, но если у меня методы add/delete находяться в базовом репозитории и принимает женериками модель доменную
MikroORM умеет
Ща займусь тем, что бы тайпорм тоже научился)
TypeORM странная штука. Там на каждый save, под какпотом, делается select запрос в бд, достаётся сущность еще раз и сравнивается с той версией, которая сохраняется
На счёт сравнения не знал
Обсуждают сегодня