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 ответов

80 просмотров

Я считаю, что должен быть 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, и останавливаться не намерен!

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта