170 похожих чатов

Type RoleRepository interface { CreateRole(ctx, role) (role,

error)
UpdateRole(ctx, role) (role, error)
DeleteRole(ctx, id) error

AddPermission(ctx, roleId, permission) (permission, error)
}


Вот например, на AddPermission я сталкиваюсь с тем, что нужно указание roleID, хотя Permissions самостоятельны и существуют без roleID (для гибкости)

👉🏻 значит ли это, что permission - самостоятельная сущность? возможно

- значит ли это, что роли могут существовать без permissions? значит

Короче говоря, у меня отношение многие ко многим, поэтому объекты умеют существовать самостоятельно. Но тем не менее, логически в рамках системы они связаны

26 ответов

45 просмотров

Я считаю, что должен быть RoleRepository и PemissionRepository

А4 Одноногое- Автор вопроса
Dmitriy Sviridov
Я считаю, что должен быть RoleRepository и Pemissi...

Угу Значит общий репозиторий лепим тогда, когда один объект не может существовать без привязки к другому?

А4 Одноногое
Угу Значит общий репозиторий лепим тогда, когда о...

А зачем тут вообще общий? Пермишены отдельно могут существовать. Роли - тоже. И пермишен может добавляться в роль. Добавление пермишена в роль - это метод внутри репозитория ролей

А4 Одноногое- Автор вопроса
Dmitriy Sviridov
А зачем тут вообще общий? Пермишены отдельно могут...

По-началу задался вопросом, делать ли общий, потому что в рамках системы они всё таки связаны, хоть и могут существовать самостоятельно

Если тебе надо обыграть транзакции внутри репозитория, то тебе придётся сделать общий репозиторий, в котором будет некий метод, в котором будет в транзакции делаться запись во все 3 таблицы сразу. Если тебе хочется иметь 3 разных репозитория, то, очевидно, тебе транзакцию придётся выносить выше - т.е. в слой бизнес-логики. И для вот этого случая я тебе выше скинул фрагмент кода, который я использую именно для такой цели. Это два разных подхода. Кто-то предпочитает первый, а кто-то второй. И у каждого своё видение на плюсы и минусы

А4 Одноногое- Автор вопроса
Dmitriy Sviridov
Если тебе надо обыграть транзакции внутри репозито...

Да, в теории всё понятно, но на практике возникают вопросы, на которые без опыта сложно ответить Буду рад, если кто-нибудь подтвердит или опровергнет выдвинутые мной тезисы

Dmitriy Sviridov
Если тебе надо обыграть транзакции внутри репозито...

Вынося транзацкию из репозитория вы тем самым получаете что-то другое, но не репозиторий (если мы говорим о DDD). Даже если вы так его называете (перестаньте это делать, назовите просто «хранилище» дабы не путать коллег). Потому как репозитории оперируют агрегатами. 1 репозиторий = 1 агрегат. А агрегат по определению как раз задает границу транзакции.

Anton Kucherov
Вынося транзацкию из репозитория вы тем самым полу...

Возможно. Но в финтехе такое сплошь и рядом

Anton Kucherov
Вынося транзацкию из репозитория вы тем самым полу...

"Потому как репозитории оперируют агрегатами" - нигде в определении паттерна репозиторий не видел подобного утверждения

Dmitriy Sviridov
"Потому как репозитории оперируют агрегатами" - ни...

In spite of all the machinery behind the scenes, Repository presents a simple interface. To code that uses a Repository, it appears as a simple in-memory collection of domain objects. fowler

Dmitriy Sviridov
"Потому как репозитории оперируют агрегатами" - ни...

A REPOSITORY represents all objects of a certain type as a conceptual set (usually simulated). It acts like a collection, except with more elaborate querying capability. Objects of the appropriate type are added and removed, and the machinery behind the REPOSITORY inserts them or deletes them from the database. Evans

Rostislav Teryaev
A REPOSITORY represents all objects of a certain t...

Так а как вынос транзакции мешает этому следовать? Как раз если держать транзакцию в репозитории, то и получится как раз такая ситуация, что что один репозиторий будет оперировать кучей агрегатов

Dmitriy Sviridov
Так а как вынос транзакции мешает этому следовать?...

Тем что протекает абстракция. КОд вне репозитория знает о том, что у тебя там sql.Tx, а не должен

Dmitriy Sviridov
Так а как вынос транзакции мешает этому следовать?...

machinery BEHIND. вынос транзакции выносит деталь имплементации хранения(собственно транзакции) из слоя репозитория в слой БЛ

Владимир Гришин
machinery BEHIND. вынос транзакции выносит детал...

Ну у меня ж транзакция не явным образом используется, а через транзакционный менеджер. Ничего не мешает подсунуть БЛ его другую имплементацию

Не знает. Потому что он дёргает транзакционный менеджер, не зная, как он внутри реализован

Dmitriy Sviridov
Не знает. Потому что он дёргает транзакционный мен...

ему уже призходится знать, что нужна транзакция:)

Владимир Гришин
ему уже призходится знать, что нужна транзакция:)

Транзакции в БЛ вполне обычное явление. Само понятие транзакции не привязано к SQL непосредственно. Атомарность действий может быть реализована и иначе

Dmitriy Sviridov
Так а как вынос транзакции мешает этому следовать?...

Именно так и высвечивается проблема неправильного анализа предметной области. Об этом кстати тоже в DDD написано.

Anton Kucherov
Именно так и высвечивается проблема неправильного ...

Не соглашусь. Для меня DDD не является библией)

Dmitriy Sviridov
Не соглашусь. Для меня DDD не является библией)

А при чем тут библия? Вы просто подменяете понятия. Вы конечно можете черное называть белым. Но смотреть на это будут странно.

Anton Kucherov
А при чем тут библия? Вы просто подменяете понятия...

Никто и нигде не будет смотреть странно. В куче финтех-галер так сделано (ещё до меня причём) - и никто не считает это кривой реализацией.

А4 Одноногое- Автор вопроса
Dmitriy Sviridov
А зачем тут вообще общий? Пермишены отдельно могут...

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

Dmitriy Sviridov
Транзакции в БЛ вполне обычное явление. Само понят...

Просто перестань называть это Repository, чтобы у адептов DDD все встало на свои места 😄

Vlad Tokarev
Просто перестань называть это Repository, чтобы у ...

Нет. Я только сегодня создал с десяток файлов, назвав их BlablaRepository.go, и останавливаться не намерен!

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Почему стало ломаться на D11? "739002.86400000' is not a valid timestamp" function IncDateTime(aStamp:TTimeStamp;aKind:TTriggerKind;aInterval:Integer):TDateTime; //aStamp = 2...
Катерина Свиридова
8
У тебя в конфиге нигде нет deny all; или вообще любого deny?
Alexander Sherbakov
10
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Ребят, чет я уже не догоняю... Крч в коде на асм там происходит нечто вроде a+число (a+1, a+2 и т.д.). Но почему строка lea ecx, [edx+1] работает как a+1?? В edx берется адрес...
Alan 🔝 Бэброу
4
думаешь я не смогу также сделать? мне это просто не удобно
int 💳 𝙖𝙞𝙧 𝙗𝙞𝙜 𝙗𝙤𝙗 🔫 check bio / spam block / AFK / nohello.com / GMT+3
9
Карта сайта