Size: a a a

Software Design/Architecture/Zen

2021 January 19

AC

Artur Chobanyan in Software Design/Architecture/Zen
Nikita
Добрый день. Можете пожалуйста подсказать в чем отличие между DAO и Repository, и что каждый должен делать? В сети четкого ответа почему то не нашел
Как то давно читал на хабре, вроде это должно помочь https://habr.com/ru/post/263033/
источник

N

Nikita in Software Design/Architecture/Zen
благодарю
источник

MG

Max Grom in Software Design/Architecture/Zen
Sergei Baikin
да я при чем не говорил отказыватся от консистенсности я предожил сделать ее eventual

Также преложил forigin ключи в базе на случай немедленной консистености но  после этого меня вообще решили игнорировать.

Я то думал если человек не может через forigin ключ то у него система распределенная...
Но оказалось все несколько страшнее

Или вы противник eventual consistency?
Я сторонник не додумывать за кого-то его потребности. Для меня ситуация не выглядит как таковой, где нужно внедрять eventual consistency
источник

N

Nikita in Software Design/Architecture/Zen
а если у меня небольшой проект / относительно простая архитектура, я могу реализовать код работы с БД в репозитории и сделать чтобы сервисы обращались к репозиторию для чтения и записи данных? имееттся ввиду вот прямо в репозитории писать sql запросы?
источник

AC

Artur Chobanyan in Software Design/Architecture/Zen
Nikita
а если у меня небольшой проект / относительно простая архитектура, я могу реализовать код работы с БД в репозитории и сделать чтобы сервисы обращались к репозиторию для чтения и записи данных? имееттся ввиду вот прямо в репозитории писать sql запросы?
Да, но вам нужно учесть что сервисы прямо не ходят в репозитории, сервисы используют контракты, а там уже через di биндите контракт к реализации
источник

SF

Segmentation Fault in Software Design/Architecture/Zen
Nikita
а если у меня небольшой проект / относительно простая архитектура, я могу реализовать код работы с БД в репозитории и сделать чтобы сервисы обращались к репозиторию для чтения и записи данных? имееттся ввиду вот прямо в репозитории писать sql запросы?
Репозиторий как раз нужен для того, чтобы скрыть реализацию, а вы ее наружу выставляете.
источник

SF

Segmentation Fault in Software Design/Architecture/Zen
Artur Chobanyan
Да, но вам нужно учесть что сервисы прямо не ходят в репозитории, сервисы используют контракты, а там уже через di биндите контракт к реализации
А кто ходит?
источник

N

Nikita in Software Design/Architecture/Zen
Segmentation Fault
Репозиторий как раз нужен для того, чтобы скрыть реализацию, а вы ее наружу выставляете.
я скрываю реализацию в самом репозитрии, сервисы же будут видеть абстракцию в виде репозитория? или неверно?
источник

AC

Artur Chobanyan in Software Design/Architecture/Zen
Segmentation Fault
А кто ходит?
Дополнил ответ
источник

SF

Segmentation Fault in Software Design/Architecture/Zen
Nikita
я скрываю реализацию в самом репозитрии, сервисы же будут видеть абстракцию в виде репозитория? или неверно?
Да, сервисы видят абстракцию. Но эта абстракция не должна на вход принимать, например SQL запрос
источник

N

Nikita in Software Design/Architecture/Zen
Segmentation Fault
Да, сервисы видят абстракцию. Но эта абстракция не должна на вход принимать, например SQL запрос
конечно нет)
источник

SF

Segmentation Fault in Software Design/Architecture/Zen
Artur Chobanyan
Дополнил ответ
👍
источник

N

Nikita in Software Design/Architecture/Zen
имею ввиду repository.findById(id) - а сам запрос уже в репоизтории внутри делается
источник

AC

Artur Chobanyan in Software Design/Architecture/Zen
Верно
источник

SF

Segmentation Fault in Software Design/Architecture/Zen
Nikita
имею ввиду repository.findById(id) - а сам запрос уже в репоизтории внутри делается
Да, именно так
источник

N

Nikita in Software Design/Architecture/Zen
Artur Chobanyan
Да, но вам нужно учесть что сервисы прямо не ходят в репозитории, сервисы используют контракты, а там уже через di биндите контракт к реализации
контракт это я так понимаю еще один паттерн?)
источник

AC

Artur Chobanyan in Software Design/Architecture/Zen
Nikita
контракт это я так понимаю еще один паттерн?)
Контракт в программировании  реализуется интерфейсом
источник

SF

Segmentation Fault in Software Design/Architecture/Zen
Nikita
контракт это я так понимаю еще один паттерн?)
Интерфейс
источник

MG

Max Grom in Software Design/Architecture/Zen
Segmentation Fault
Вот я спрашиваю: где с точки зрения ddd она должна происходить?
У меня нигде нет супер DDD подхода, но валидацию существования входящих данных для бизнес-логики я оставляю вне домена. Валидацию внутреннего поведения (например компании есть но они должны быть с одной страны и т.д.) - это валидация бизнес-логики и должна быть внутри домена
источник

SF

Segmentation Fault in Software Design/Architecture/Zen
Max Grom
У меня нигде нет супер DDD подхода, но валидацию существования входящих данных для бизнес-логики я оставляю вне домена. Валидацию внутреннего поведения (например компании есть но они должны быть с одной страны и т.д.) - это валидация бизнес-логики и должна быть внутри домена
И вы такую логику (компания с одной страной) помещаете в доменный сервис?
источник