@proGO

Страница 491 из 1674
Phil
20.02.2017
15:30:13
попробую скопировать
плейграунд покажи да.

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
[минутка философии] Делаю сервер oauth2 (да, всё ещё на начальном этапе). Вобщем, отказался от универсальности базы данных. Потому что я не знаю как можно универсиализировать базы данных. Там внутри транзакции нужны действия - это можно унифицировать только ради унификации.
вот казалось бы go заточен под то чтобы не было дрочерства такого, а можно было сесть и просто нахуячить код ) а всякую унификацию, префиксные деревья для токенов и прочее или оставить на потом, или (что более вероятно) не делать вообще

Phil
20.02.2017
17:15:27
что значит универсальность (для пропустивших предыдущие серии)?
Я имел ввиду сделать для базы "интерфейс" и обращаться к нему. Чтобы можно было делать новые стораджи. Сколько раз я в жизни не пытался, всегда эта унифицированность боком

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

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

Database/sql не достаточно универсально?
sql для сервера авторизации oauth?

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
Положил в jwt что нужно и не ходишь в бд
а это, как отозвать jwt в случае чего-то ?

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

Гидра юзает постгре
Гидра это переделанный osin явно. Там тот ещё заворот головного мозга

Положил в jwt что нужно и не ходишь в бд
Вот ещё только jwt мне не хватало

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

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

Aleksandr
20.02.2017
17:22:58
Я имел ввиду сделать для базы "интерфейс" и обращаться к нему. Чтобы можно было делать новые стораджи. Сколько раз я в жизни не пытался, всегда эта унифицированность боком
потому что интерфейс должен быть простым - loadAnything, storeAnything. Сколько раз не делал, всегда все выходило беспроблемно. Это же интерфейс, а не реализация - минимализм

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

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
Aleksandr
20.02.2017
17:26:16
Ну. И теряю унифицированный интерфейс
интерфейс у тебя есть интерфейс

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

Phil
20.02.2017
17:26:37
интерфейс у тебя есть интерфейс
бррр... но Load() и Save() тут уже ёк

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

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

Aleksandr
20.02.2017
17:26:52
бррр... но Load() и Save() тут уже ёк
а вот так и делается

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
oauth же не требует транзакционности?
RFC 7591 например. Там есть PUT .

Aleksandr
20.02.2017
17:28:40
Стоп. Мне нужно Load(), подумать, что-то сделать, а потом Save(). Причем в рамках одной транзакции
значит это у тебя должно быть обернуто в сервис более высокого ранга. Ну скажем OauthManager или хз как там

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

Aleksandr
20.02.2017
17:29:19
RFC 7591 например. Там есть PUT .
ну, пут это вообще реквест, который ты абстрагируешь от сервиса. получил запрос - отправил в сервис

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

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

так

Google
Phil
20.02.2017
17:30:31
ну, пут это вообще реквест, который ты абстрагируешь от сервиса. получил запрос - отправил в сервис
Погодь. PUT - это изменение сущности. Причем с проверкой текущего состояния конкретно в данном случае (и это правильно). Это вот как ни крути - транзакция

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
Мммм Я прочитал, сравниваю, а кто-то в это время туда записал. Косячок
ну реализовывай защиту от concurency. если кто-то уже обошел тебя, выкидывай ошибку

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
ну реализовывай защиту от concurency. если кто-то уже обошел тебя, выкидывай ошибку
optymistic lock, pessymistic lock итд. фаулер, если такое вообще в голэнг-сообществе произносят

Тип того. Но возвращаясь к моему набросу - это фачит саму идею унификации стораджа. Так не бывает
для меня унификация сораджа это положить в либу type Storage interface{...}, который при необходимости реализуется юзером твоей либы. А ты, как я понял, хочешь сразу все реализовать, чтобы как-то это сразу работало. но зачем оно так? кто так делает?

Phil
20.02.2017
17:38:22
для меня унификация сораджа это положить в либу type Storage interface{...}, который при необходимости реализуется юзером твоей либы. А ты, как я понял, хочешь сразу все реализовать, чтобы как-то это сразу работало. но зачем оно так? кто так делает?
Ну. Так вот так не получается. Потому что со всеми стораджамы работа строится особенными образами. И нельяз вот так просто создать Storage interface{...}, потому что оно не учитывает их

Google
Phil
20.02.2017
17:38:45
и если ты не знаешь, как отозвать токен - скажи, зачем его отзывать?
я знаю как отозвать токен. я про "база не нужна". конечно нужна

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

Aleksandr
20.02.2017
17:39:23
Ну. Так вот так не получается. Потому что со всеми стораджамы работа строится особенными образами. И нельяз вот так просто создать Storage interface{...}, потому что оно не учитывает их
не, коллега. оно и не должно учитывать. это только ты считаешь, что должна быть транзакционность, а на самом деле в спеке ее нет.

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
не, коллега. оно и не должно учитывать. это только ты считаешь, что должна быть транзакционность, а на самом деле в спеке ее нет.
Там где есть PUT с проверкой - она есть по определению. Вообще на любой PUT и PATCH на самом деле

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

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
ты детали реализации поднимаешь в интерфейс. в nosql у меня нет транзакций и я даже думать не буду об этом. Для всего остального есть это: https://www.martinfowler.com/eaaCatalog/pessimisticOfflineLock.html https://www.martinfowler.com/eaaCatalog/optimisticOfflineLock.html
Транзакции много где есть. В том же Bolt. Lock- это тоже транзакия. Т.е. интерфейс-то ты сделал, но усложнило всё Lock, хотя есть транзакции. Об этом и была речь

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
погодите, коллеги

фил, скажи

Страница 491 из 1674