Если где-то нужно выполнять несколько операций в одной транзации, нужно их вытащить в отдельный модуль AnotherRepo[F] Таким образом транзакционность не будет протекать
макросы из cats tagless и тофу смогут имплементировать вас FunctorK, ApplyK, Embed, RepresentableK и т.д, если соотв. инстансы есть для вложенных модулей
Если где-то нужно выполнять несколько операций в одной транзации, нужно их вытащить в отдельный модуль AnotherRepo[F] Таким образом транзакционность не будет протекать
Как-то не очень. Мне нравится комбинировать вызовы Repo именно в сервисе, плюс один метод Repo - это один SQL запрос.
Как-то не очень. Мне нравится комбинировать вызовы Repo именно в сервисе, плюс один метод Repo - это один SQL запрос.
Ну видите, это приводит к тому, что A) Типы, которые обычно являются проводниками по структуре вашего приложения и теперь не смогут помочь, если часть состояния вы решите вынести из SQL, обложить кешами и т.п. Вы явно семантически привязали себя к транзакционности Б) Настолько явно, что без информации в типе считаете количество SQL по количеству композированных методов. Т.е. уже проложили себе дорожку на тёмную сторону ссылочной непрозрачности.
Ну видите, это приводит к тому, что A) Типы, которые обычно являются проводниками по структуре вашего приложения и теперь не смогут помочь, если часть состояния вы решите вынести из SQL, обложить кешами и т.п. Вы явно семантически привязали себя к транзакционности Б) Настолько явно, что без информации в типе считаете количество SQL по количеству композированных методов. Т.е. уже проложили себе дорожку на тёмную сторону ссылочной непрозрачности.
Ну видите, это приводит к тому, что A) Типы, которые обычно являются проводниками по структуре вашего приложения и теперь не смогут помочь, если часть состояния вы решите вынести из SQL, обложить кешами и т.п. Вы явно семантически привязали себя к транзакционности Б) Настолько явно, что без информации в типе считаете количество SQL по количеству композированных методов. Т.е. уже проложили себе дорожку на тёмную сторону ссылочной непрозрачности.
Частично согласен. Но А) решается по мере возникновения проблем, 99% случаев не потребуют кэша все равно. Б) это чисто соглашение, ничего не считаем
Нет. Любая абстракция - это и есть попытка спрятать нерелеватную информацию.
Когда у вас появляется необходимость переписать приложение, типы должны сообщить: "вот всему этому коду всё равно, откуда и как вы складываете эти три переданных параметра. Внутри SQL транзакции они, или порождают событие в кафке или улетают в скрипт на аэроспайке." Вместо этого вы получаете информацию "всё приложение писалось с учётом транзакционности всего состояния. Если какая-то часть отойдёт от общего плана, предсказать, что пойдёт не так - почти невозможно, лучше напишите всё заново"
Частично согласен. Но А) решается по мере возникновения проблем, 99% случаев не потребуют кэша все равно. Б) это чисто соглашение, ничего не считаем
Ну я к тому, что можно получить заранее почти бесплатно структуру, которая поможет решить часть поступивших проблем. Просто нужно избавиться от иллюзии комфорта при работе с базой в полуявном виде внутри вашей бизнес логики
Нет. Любая абстракция - это и есть попытка спрятать нерелеватную информацию.
Когда у вас появляется необходимость переписать приложение, типы должны сообщить: "вот всему этому коду всё равно, откуда и как вы складываете эти три переданных параметра. Внутри SQL транзакции они, или порождают событие в кафке или улетают в скрипт на аэроспайке." Вместо этого вы получаете информацию "всё приложение писалось с учётом транзакционности всего состояния. Если какая-то часть отойдёт от общего плана, предсказать, что пойдёт не так - почти невозможно, лучше напишите всё заново"
Приложение с eventual consistency так или иначе отличается от транзакционного