
Phil
20.02.2017
15:30:13

Roman
20.02.2017
17:07:52

Phil
20.02.2017
17:08:16
[минутка философии] Делаю сервер oauth2 (да, всё ещё на начальном этапе). Вобщем, отказался от универсальности базы данных. Потому что я не знаю как можно универсиализировать базы данных. Там внутри транзакции нужны действия - это можно унифицировать только ради унификации.
Что мы кстати и видим на примере популярных библиотек

Google

Denis
20.02.2017
17:12:34
Database/sql не достаточно универсально?

Aleksandr
20.02.2017
17:13:49
что значит универсальность (для пропустивших предыдущие серии)?

Quet
20.02.2017
17:15:08

Phil
20.02.2017
17:15:27

Quet
20.02.2017
17:15:50
просто не надо это делать. тебе это все равно не понадобится )

Phil
20.02.2017
17:16:15
Хотел либой выложить просто так. Но это бессмысленно как либа

Roman
20.02.2017
17:17:20
Сделай BoltDB

Denis
20.02.2017
17:17:23
Транзакции для сервера авторизации?

Roman
20.02.2017
17:17:34
И будет Go way

Denis
20.02.2017
17:17:36
Гидра юзает постгре

Roman
20.02.2017
17:18:31
Я тестировал апликуху на тарантуле, нагенерировал миллион сессий

Denis
20.02.2017
17:18:37
Положил в jwt что нужно и не ходишь в бд

Google

Roman
20.02.2017
17:18:44
И это заняло 22 мбайта

Denis
20.02.2017
17:18:53
Неплохо

Phil
20.02.2017
17:18:58

Mikalai
20.02.2017
17:19:10

Phil
20.02.2017
17:19:38
Сделай BoltDB
я уже сделал. я не к тому. я не обернул это интерфейсом

Denis
20.02.2017
17:21:33
Как хочешь
Можешь в черный список внести
Можешь удалить куку, если это Кука
Юзать маленький ttl

Phil
20.02.2017
17:22:53
Спич был об унификации интерфейса со стораджем. Никогда не понимал как это люди делают. Они же на то и разные стораджи, что логика может быть разной. Причем совсем разной

Aleksandr
20.02.2017
17:22:58

Denis
20.02.2017
17:23:22
Та же фигня

Phil
20.02.2017
17:23:33

Aleksandr
20.02.2017
17:24:08

Phil
20.02.2017
17:24:10

Roman
20.02.2017
17:24:19
Пацаны! Немного Джавы вам в чат!
http://hackthology.com/exceptions-for-go-as-a-library.html

Aleksandr
20.02.2017
17:24:23
деталь реализации, а не интерфейса

Phil
20.02.2017
17:24:32

Aleksandr
20.02.2017
17:24:56
если у тебя есть бизнес логика, то ты ее прокидываешь в реализацию, и в реализации обертываешь в транзакции. а в другой реализации не обертываешь
ну скажем бизнес-логика у тебя содержится в каком-то сервисе

Google

Phil
20.02.2017
17:25:58

Aleksandr
20.02.2017
17:26:16
ты путаешь интерфейс и реализхацию. реализация может быть различной и соответствовать интерфейсу

Phil
20.02.2017
17:26:37

Denis
20.02.2017
17:26:41
Вы о разном

Phil
20.02.2017
17:26:45
Наверное

Aleksandr
20.02.2017
17:26:52

Denis
20.02.2017
17:27:36
Александр о интерфейсе уровня предметной области

Aleksandr
20.02.2017
17:27:39
oauth же не требует транзакционности?

Denis
20.02.2017
17:27:52
Фил о обычном сервисе аутх

Phil
20.02.2017
17:28:02
а вот так и делается
Стоп. Мне нужно Load(), подумать, что-то сделать, а потом Save(). Причем в рамках одной транзакции

Denis
20.02.2017
17:28:05
Который хочет сделать либой

Phil
20.02.2017
17:28:36

Aleksandr
20.02.2017
17:28:40

Denis
20.02.2017
17:29:13
Либо контролировать транзакцию извне

Aleksandr
20.02.2017
17:29:19

Denis
20.02.2017
17:29:21
Не внутри сейва

Aleksandr
20.02.2017
17:30:22
получил запрос -> сформировал DTO -> отправил в сервис
так

Google

Phil
20.02.2017
17:30:31

Aleksandr
20.02.2017
17:30:56
это понятно, что на sql-решениях лучше транзакциями, но хранилище может их не поддерживать

Phil
20.02.2017
17:31:37

Aleksandr
20.02.2017
17:32:06
но если мы все же НЕ об интерфейсе предметного уровня, то я сольюсь пожалуй, т.к. тут разговаривать можно только о конкретной реализации
а зачем тут транзакции вообще? на пальцах поясни плз

Phil
20.02.2017
17:33:22

Admin
ERROR: S client not available

Phil
20.02.2017
17:33:43

Daniel
20.02.2017
17:34:17
фил

Aleksandr
20.02.2017
17:34:18

Daniel
20.02.2017
17:34:24
конечно, нужны токены
а база, конечно, не нужна в этой задаче

Phil
20.02.2017
17:34:50
Чо?

Daniel
20.02.2017
17:34:56
и если ты не знаешь, как отозвать токен - скажи, зачем его отзывать?

Aleksandr
20.02.2017
17:35:06

Phil
20.02.2017
17:38:22

Google

Phil
20.02.2017
17:38:45

Daniel
20.02.2017
17:38:56
зачем?

Aleksandr
20.02.2017
17:39:23

Dmitriy
20.02.2017
17:39:41
посоны, вот почему все стараетесь переусложнить? делайте проще

Phil
20.02.2017
17:39:52
зачем?
Потому что база клиентов нужна. И база токенов. Да я слышал твою теорию про персистент, но так это не работает. Те же рефреш токены даже у гугля неделя что ли

Dmitriy
20.02.2017
17:39:52
так ведь и до first class interfaces можно дожить
а дальше только spaceship оператор

Phil
20.02.2017
17:40:40

Denis
20.02.2017
17:41:25
Так вынеси управление транзакцией в паблик api

Aleksandr
20.02.2017
17:41:28

Phil
20.02.2017
17:41:49
это не так же
Ну а как ты будешь уверен, что сравниваешь актуальную информацию?

Aleksandr
20.02.2017
17:43:53
Ну а как ты будешь уверен, что сравниваешь актуальную информацию?
ты детали реализации поднимаешь в интерфейс. в nosql у меня нет транзакций и я даже думать не буду об этом.
Для всего остального есть это: https://www.martinfowler.com/eaaCatalog/pessimisticOfflineLock.html https://www.martinfowler.com/eaaCatalog/optimisticOfflineLock.html

Roman
20.02.2017
17:44:31

Phil
20.02.2017
17:45:05

Denis
20.02.2017
17:45:48
Храни Лок полем в структуре?

Aleksandr
20.02.2017
17:45:54

Phil
20.02.2017
17:46:26

Roman
20.02.2017
17:46:56
Фил, ты хочешь для либы сделать возможность выбора базы? MySQL что ли?

Aleksandr
20.02.2017
17:47:34
да потому что ты хочешь объять необъятное. напиши интерфейс и пару-тройку реализаций с транзакциями. остальные реализации напишут юзеры либы так, как им это надо. транзакиця - это не часть интерфейса - это часть реализации.

Daniel
20.02.2017
17:50:02
погодите, коллеги
фил, скажи