@graphql_ru
GraphQL — русскоговорящее сообщество

Общаемся на темы, посвященные GraphQL и опыту его использования. Проблемы. Новости. Решения. Вам могут быть полезны: @apollo_ru, @react_js, @vuejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание в чате было полезным и комфортным.

352 members

Архив канала @graphql_ru 6 января 2018 г.

01:57:49 ДП
User 321317845
User 371133717
Что думаете?
Очередная хрень на JS +)
02:00:49 ДП
User 178361440
Мы используем у себя функционал из Relay Modern для управлениия локального состояния для исключительных случаев когда на сервере оно не нужно
02:06:50 ДП
User 321317845
Ребят, вы же фронтэндеры? Подскажите плиз, почему у вас принято обычные репы называть "сторами"?
02:07:04 ДП
User 321317845
Это небольшой оффтоп
02:07:53 ДП
User 321317845
ну и "стор менеджерами", как в сабжевом посте
02:09:32 ДП
User 178361440
Что за "репы"?
02:09:52 ДП
User 321317845
репозитории же
02:12:25 ДП
User 321317845
Ну это не единичный пример
02:13:14 ДП
User 321317845
Ну например обычную передачу по ссылке (иногда с подпорками в виде обсерверов) фронтэндеры называют реактивностью.
02:13:44 ДП
User 321317845
обычную стейт машину - редьюсерами
02:13:55 ДП
User 321317845
ну и т.д.
02:14:17 ДП
User 321317845
но это уже холивар какой-то =)) Так что лучше посчитать эти вопросы риторическими, дабы не разводить
02:16:26 ДП
User 178361440
Я так понимаю repository это хранилище c чисто CRUD методами, а store - хранилище с более хитрой логикой
Reducer - думаю не очень удачное название, но не все юзают Redux с его reducer-ами, думаю это не общепринятый термин
02:23:34 ДП
User 321317845
CRUD - это условно
02:24:05 ДП
User 321317845
потому что findAnyBySome(query) - это тоже Read
02:26:27 ДП
User 321317845
Фича реп в абстрагировании от места, где физически хранятся данные. Будь то сервер или локалсторадж
02:26:37 ДП
User 178361440
Кстати (оффтопик), бывает иногда ребята реализуют репозитории без особой надобности, например в .NET/C# стэке, поверх EntityFramework контекста, который сам по себе уже реализует repository и unit of work паттерны, разработчикии еще добавляют своии репозитории поверх
02:26:55 ДП
User 321317845
и что в этом плохого?
02:27:18 ДП
User 321317845
Кажется, что это как раз правильный путь. Не трогая ядро добавлять функционал.
02:27:45 ДП
User 321317845
да и тот же самый UoW в контексте GraphQL - просто бомбическая шняга
02:28:40 ДП
User 321317845
т.е. пушишь данные в репу, потом читаешь, потом ещё что-то, а потом говоришь "сделай мне" и хренах, всё в одном батче улетает на сервер в виде запроса
02:29:46 ДП
User 178361440
В случае с GraphQL, можно создать сложный (input) объект и запульнуть одним махом на сервер relay.commitMutation(..) (смысл такой же)
02:30:11 ДП
User 321317845
вместо того, чтобы вообще ничего не создавать
02:30:13 ДП
02:30:46 ДП
User 321317845
class User {
    name = 'Vasya';
}

repo.persist(new User);
02:30:49 ДП
User 321317845
образно конечно
02:31:28 ДП
User 321317845
под сервер только TypeORM я видел из нормального: https://github.com/typeorm/typeorm
github.com/typeorm/typeorm
ORM for TypeScript and JavaScript (ES7, ES6, ES5). Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL databases. Works in NodeJS, Browser, Ionic, Cordova and Electron platfo...
02:31:34 ДП
User 178361440
в relay этот функционал реализован (optimistic updates)
02:31:48 ДП
User 321317845
только relay - это графкуэльная шняга
02:32:11 ДП
User 321317845
плюс за эти edges внутри запроса надо убивать
02:32:32 ДП
User 321317845
я хз это надо быть под чем, чтобы придумать такое
02:34:15 ДП
User 321317845
почему нельзя было сделать, например
{
    query1: users(count: 10) {
        id
    }
    pagination(name: query1) { totalPages }
}я вообще хз
02:34:32 ДП
User 321317845
простите, наболело))))
02:50:30 ДП
User 60122561
User 321317845
Ребят, вы же фронтэндеры? Подскажите плиз, почему у вас принято обычные репы называть "сторами"?
Ээээ, далеко не только фронтендеры
02:50:42 ДП
User 60122561
Скорее наоборот, только любители фаулера называют их репами
02:51:05 ДП
User 321317845
ну хз, джава, пых, шарпец и т.д.
02:51:08 ДП
User 321317845
везде так
02:51:20 ДП
User 60122561
ну так я и говорю, кто фаулера любит начитывать там, все дела
02:52:26 ДП
User 321317845
ну т.е. везде, кроме JS? :D
02:52:55 ДП
User 60122561
User 321317845
ну т.е. везде, кроме JS? :D
в мобайле часто вижу, у фп пацанов часто вижу
02:53:02 ДП
User 60122561
мб везде кроме ООП?)
02:53:16 ДП
User 321317845
возможно, кстати
02:53:19 ДП
User 321317845
но JS же ооп
02:53:30 ДП
User 60122561
User 321317845
но JS же ооп
нет же
02:53:55 ДП
User 321317845
покажешь хоть один пример использования какого-нибудь HOM в JS?
02:54:39 ДП
User 321317845
я на JS только одну процедурщину вижу просто =(
02:54:47 ДП
User 321317845
исклюение разве что Aurelia
02:54:52 ДП
User 321317845
там ОО нормальный
02:55:03 ДП
User 60122561
User 321317845
я на JS только одну процедурщину вижу просто =(
https://github.com/fantasyland/fantasy-land
github.com/fantasyland/fantasy-land
Specification for interoperability of common algebraic structures in JavaScript - fantasyland/fantasy-land
02:55:52 ДП
User 321317845
на пыхе такие же шняги есть, это не аргумент же
02:55:57 ДП
User 321317845
я на практике
02:56:23 ДП
User 60122561
User 321317845
я на практике
дак что мешает на практике использовать?
02:56:36 ДП
User 321317845
ну вот не используют же
02:56:37 ДП
User 60122561
я же использую
02:56:39 ДП
02:56:46 ДП
User 60122561
используют еще как
02:56:48 ДП
User 321317845
ну хоть кто-то
02:56:56 ДП
User 321317845
ну а где, на практике?
02:56:56 ДП
User 60122561
User 321317845
ну хоть кто-то
https://t.me/frp_ru
t.me/frp_ru
Общаемся на темы, посвященные функциональным и реактивным подходам в JS. Вам могут быть полезны: http://telegra.ph/Vvedenie-v-FP-06-26 https://combot.org/chat/-1001071213089 @elm_ru @oop_ru @kanaflow @leadingedge Мемы: @frp_memes
02:57:00 ДП
User 60122561
целая конфа вон
02:57:33 ДП
User 321317845
огонь!
02:59:11 ДП
User 321317845
ну мб мне такие люди попадались =(
02:59:44 ДП
User 321317845
кстати, вопрос наконец по теме GraphQL
03:00:16 ДП
User 60122561
User 321317845
ну мб мне такие люди попадались =(
да норм, у нас в проекте всякая околофп параша сплошная, ramda, recompose, rxjs
03:00:32 ДП
User 321317845
ой, rx вообще трешак адовый
03:00:40 ДП
User 321317845
ну точнее его php реализация
03:00:45 ДП
User 321317845
на js не смотрел
03:01:21 ДП
User 321317845
короче, по GraphQL вопросу. Он теоретический
03:02:09 ДП
User 321317845
Есть таска добавить в SDL поддержку директив "on DOCUMENT"
03:02:11 ДП
User 60122561
User 321317845
ну точнее его php реализация
ну там вроде только 3-4 реализации активные, остальные оче плохо сделаны
03:02:17 ДП
User 321317845
т.е. локаций в файле
03:02:37 ДП
User 321317845
например:
@include(file: "some.graphqls")

type A { ... }
03:03:06 ДП
User 321317845
но есть проблема - конфликт со скалярами
03:03:45 ДП
User 321317845
scalar Some
@include(file: "some.graphqls")На уровне грамматики невозможно однозначно определить кому принадлежит директива. Скаляру или документу
03:05:20 ДП
User 321317845
Придумалось два варианта решения этой проблемы:
1) Допустить такие директивы ТОЛЬКО в самом начале файла
2) Добавить опциональную поддержку фигурных скобок для скаляров (`scalar Example @scalarDirective() {}` + `scalar Example @documentDirective()`)
03:05:30 ДП
User 321317845
Что вам больше нравится?
07:42:04 ДП
User 306987219
Лучше уж первый как по мне. Второй и читать проблемнее, да и чтобы писать нужно знать все тонкости именно вашей реализации (т.к. все другие будут делать просто scalar MyType без всяких скобок)
08:52:11 ДП
User 228403837
User 321317845
репозитории же
потому что это не совсем репозитории, это больше похоже на проекции данных, read model
08:53:03 ДП
User 228403837
User 321317845
там ОО нормальный
заходи в наш чатик ОО и скажи что такое нормальное ОО) а то мы уже года два голову ломаем
11:13:29 ДП
User 144022504
завелся)
11:13:29 ДП
User 144022504
User 371133717
Ну как там тво проблема?
11:13:50 ДП
User 371133717
Отлично 👍
01:58:16 ПП
User 231279921
User 144022504
Что за app на скрине?
01:58:25 ПП
User 60122561
User 231279921
Что за app на скрине?
graph.cool
04:28:20 ПП
User 321317845
User 228403837
заходи в наш чатик ОО и скажи что такое нормальное ОО) а то мы уже года два голову ломаем
какой из? +)
04:28:57 ПП
User 321317845
User 321317845
Придумалось два варианта решения этой проблемы:
1) Допустить такие директивы ТОЛЬКО в самом начале файла
2) Добавить опциональную поддержку фигурных скобок для скаляров (`scalar Example @scalarDirective() {}` + `scalar Example @documentDirective()`)
Кстати, по сабжу вообще идей нет?
04:30:33 ПП
User 178361440
Мм, а для чего вообще нужна такая директива, интересно
05:34:35 ПП
User 371133717
Что обозначает термин  pooling, в доке аполло мелькает часто.
05:59:15 ПП
User 321317845
@koistya просто набор директив, которые влияют на поведение всей программы
06:00:18 ПП
User 321317845
это может быть, например, импорт неймспейсов или файлов, указание версии SDL и ещё куча всего
06:01:55 ПП
User 178361440
мне интересно, это решает какую-то конкретную бизнес задачу? конечный результат
06:02:18 ПП
User 321317845
такой пример сойдёт? https://github.com/railt/railt/issues/40 для директивы
github.com/railt/railt/issues/40
Adding a DOCUMENT location allows you to add additional meta-data, for example: directive @use(namespace: [String!]!) on DOCUMENT directive @route(action: String!) on OBJECT | FIELD Usage: @use(nam...
06:02:37 ПП
User 321317845
задача - просто добавление "глобальной" локации
06:07:50 ПП
User 178361440
не очень понятно, а какая конечная цель? (для чего это нужно)
06:16:22 ПП
User 321317845
так я же написал уже два раза
06:16:39 ПП
User 321317845
чтобы упростить декларации схем
06:16:43 ПП
User 321317845
и добавить возможностей
06:17:55 ПП
User 321317845
например, в оригинальном sdl невозможно однозначно объявить какая версия используется. А это значит, что невозможно будет написать плагины на sdl
06:18:45 ПП
User 321317845
например:
interface Timestambable implements Created, Updated {}
06:19:05 ПП
User 321317845
причём наследование интерфейсов добавили в последнем драфте
06:19:21 ПП
User 321317845
но при этом и объявление перечисления интерфейсов изменили (вместо запятой теперь `&`)
06:21:07 ПП
User 321317845
т.е. такой плагинчик, который добавляет интерфейсы и реализации отметок дат для сущностей невозможен в рамках JS реализации, ибо его невозможно собрать отдельно.
06:21:29 ПП
User 321317845
т.к. флаги выставляются на уровне сборки, а не отдельного файла
06:21:38 ПП
User 321317845
ну и т.д.
06:21:52 ПП
User 321317845
примеров ещё кучу можно придумать, где директивы на документе нужны
06:22:10 ПП
User 321317845
моя задача лишь придумать как именно их внедрить
06:22:15 ПП
User 321317845
проблематику я описал выше
06:26:54 ПП
User 178361440
А почему просто не объявить интервейс и присвоить его сущностям в которых он используется? (без плагинов)
06:27:23 ПП
User 321317845
фича в расширении функционала сторонними разработками
06:27:34 ПП
User 321317845
не суть, это лишь пример же
06:28:32 ПП
User 321317845
ок, допустим у нас джава:
@use(package: "org.some.app.http")

type User @resolver(action: "MyController@resolve") { 
    # ...
}
06:29:05 ПП
User 321317845
вот тебе ещё один пример, как с помощью глобальной директивы упростить декларации
06:29:42 ПП
User 321317845
т.е. не перечислять полный путь к контроллеру внутри директивы ресолвера, а указать их заранее
06:29:55 ПП
User 321317845
ну или C#, или PHP
06:30:07 ПП
User 321317845
не важно особо, везде где есть неймспейсы\пакеты