Size: a a a

Software Design/Architecture/Zen

2021 November 04

A

Alexander in Software Design/Architecture/Zen
Понял. Спасибо
источник

A

Alexander in Software Design/Architecture/Zen
Да нет юзкейса. Просто читаю литературу по DDD и периодически возникают такие вопросы. Сейчас уже понял, что Identity Map можно использовать только в рамках одной бизнес транзакции. А транзакционность можно обпечивать средствами субд
источник

SP

Sergey Protko in Software Design/Architecture/Zen
суть identity map это "как сконвертить референсы айдишек в референсы на объекты в памяти". Это не кэш там как некоторые думают. Например если у тебя документная база для агрегатов используется или key value и весь агрегат записан как один сериализованный объект то тебе этот identity map вообще не нужен особо.
источник

A

Alexander in Software Design/Architecture/Zen
Либо я не понял фразу  "как сконвертить референсы айдишек в референсы на объекты в памяти», либо это и есть кэш.

У фаулера даже на схеме изображен кэш
источник

A

Alexander in Software Design/Architecture/Zen
Единственное, что я пропустил и поэтому начал задавать вопросы это то, что этот кэш должен существовать только в рамках одной бизне транзакции
источник

k

knopkod4v in Software Design/Architecture/Zen
Кто юзает GQL вы какой подход юзаете при разработке SDL-first или code-first ?
Почитал несколько статей, похоже большинство склоняется к code-first, потому что так резолверы удобнее с точки зрения типов писать (проще задетектить, что типы в резолверах и схеме не совпадают). Так проще с разделением схемы на отдельные кусочки - написал тип, сразу к нему резолвер рядом.
Ну и там говорят, что композиции GQL-схем так проще делать (но меня это мало интересует, т.к. всего 1 схема)

Есть ещё поинт почему code-first лучше "Redundancy in schema definitions (code reuse): Reusing SDL definitions may involve a lot of boilerplate and repeated code."
Но я его не понял - что за реюз SDL-definitions имеется ввиду? 🤔
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
а бы совместил
сделал  SDL схему как контракт
И валидировал ту что получается из code-first сравнивая вовремя CI
Тем самым гарантирую что не задеплоится поломанное API не сответсвующее контракту
источник

SP

Sergey Protko in Software Design/Architecture/Zen
гугли object/relational impedance missmatch.

в общем случае (если мы не про агрегаты) identity map нужен для кейсов типа...


SELECT * FROM comments c LEFT JOIN users u on u.id=c.author_id


в этом случае тебе для нормализации резалт сэта надо что-то что будет убеждаться что референс на объект тот что нужен. При этом никто не мешает тебе потом по логике приложения просто по айдишке того же юзера забрать и ты хочешь что бы в памяти приложения референсился один и тот же объект.

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

k

knopkod4v in Software Design/Architecture/Zen
тогда надо 2 раза схему описывать 🤔
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
ну а с code-firs только, как вы гарантируете что клиенты не сломаются после того как схема новая сгенерируется?
Где будет контракт лежать?
ИЛи вы предалагаете менять контракт при каждом деплое?
источник

k

knopkod4v in Software Design/Architecture/Zen
ну да, менять при каждом деплое это нормально вроде
Контракт либо на шлюзе, либо в отдельной папочке для API (что то же самое, просто в одном репозитории с бекендом)
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
Ну раз вам нормально то окей
У меня клиенты которые использует API и там методы меняются удалются или перемешаются будут явно не довольны
Я есди такое буду использовать ругатся буду страшно
Так на шлюзе тот контракт что вы каждый раз при деплое заливаете? Типа какая разница гнде хранится
источник

k

knopkod4v in Software Design/Architecture/Zen
по идее можно как-то сравнивать GQL-query из кода фронтенда с текущей схемой.
Правда это подразумевает, что у нас есть код всех клиентов 🤔
Хотя вроде есть тулы, которые позволяют детектить BC-breaks в схеме
источник

k

knopkod4v in Software Design/Architecture/Zen
ну так ты про изменения ломающие обратную совместимость. Схема меняется, но это не значит, что при каждом деплое ломается обратная совместимость
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
Для этого и приудмалои схему чтобы она была кор=нтрактом между вами и вашими клиентами
А вы такие а зачем нам схема и контракт
что API сервер сделал то будьте добры используйте
Контракты стабильные не не слышали
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
А как вы это контролируете?
Молитвами?
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
Просто контракты нужны чтобы из исполнять
а не чтобы испольнитель их каждый раз создавал
Мне так кажется я так думаю 🙃
источник

k

knopkod4v in Software Design/Architecture/Zen
мне кажется тут какое-то недопонимание.
SDL-first - это когда схема описывается при помощи SDL GQL
code-first - это когда схема описывается на каком-то языке программирования средствами языка программирования - например тип GQL-тип User может быть описан классом User.
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
так а откуда берется та схема что клиенты используют у вас?
генерируется из кода разве нет? при code-first
источник

k

knopkod4v in Software Design/Architecture/Zen
описывается средствами языка, то есть из кода, да
источник