Имя: Пароль:
IT
 
Язык создания-описания UI по принципу SQL
,
0 Garykom
 
гуру
18.09.22
08:03
Никто не знает подобного?

Чтобы описывать пользовательский интерфейс в текстовом виде быстро вручную.
По типу:

FORM ‘FormName1’ (Width 400, Height 400, Title ‘Авторизация’);
GROUP ‘Group1’ (Title ‘’, Group ‘Vertical’) IN ‘FormName1’;
FIELD ‘Login’ IN ‘LeftGroup1’;
FIELD ‘Password’ IN ‘LeftGroup1’;
GROUP ‘Group2’ (Group ‘Horizontal’) IN ‘Group1’ ;
BUTTON ‘OK’ (Title ‘ОК’) IN’‘ Group2’ ;
BUTTON ‘Cancel’ (Title ‘Отмена’) IN’‘ Group2’ ;
32 Garykom
 
гуру
18.09.22
08:55
(31) Удобное текстовое редактирование даже сильно вложенных форм
33 Garykom
 
гуру
18.09.22
08:56
(32)+ С выделением цветом выбранных идентификаторов будет прекрасно.
И автоформатированием "кода".
34 Конструктор1С
 
18.09.22
08:58
(32) это пока мало кода, когда будет много, получишь жуткое месиво. Годами придумывали всякие там макеты UI, декаларативные описания, чтобы уйти от подобного
35 Garykom
 
гуру
18.09.22
08:59
(33)+ Плюс контролы и группы контролов можно выносить в отдельные файлы
В нужном месте ссылка на них по типу "вложенных подзапросов"
Редактор специальный наваять чтобы при наведении показывал содержимое а при клике открывал файл в отдельном окне

Т.е. не визуальный редактор а текстовый!
Примерно как OpenSCAD vs AutoCAD
36 Garykom
 
гуру
18.09.22
09:00
(34) Они все заточены на визуальщину и мышередактор
Хочу кодом с клавы.
37 Garykom
 
гуру
18.09.22
09:01
(36)+ Примерно как программное создание/исправление элементов форм.
Но в удобном компактном виде, без долгого прописывания лишнего.
38 Garykom
 
гуру
18.09.22
09:02
(34) В случае разнесения по файлам месива не будет
Еще можно области/секции как в коде 1С
39 Конструктор1С
 
18.09.22
09:03
(36) в андроиде разбивают одну вьюху на маленькие фрагменты, а потом описывают с помощью Jetpack Compose

https://developer.android.com/guide/fragments

https://developer.android.com/jetpack/compose

оно?
40 NorthWind
 
18.09.22
09:05
(32) если текстовое, то как раз "елочка"-то лучше будет. Особенно если предусмотреть сворачивание-разворачивание вложенных блоков. Все в одном месте.
41 NorthWind
 
18.09.22
09:06
когда визуальное, то эти файлы редко кому нужны в них смотреть, и в общем-то норм. А вот если чисто текстовое... тогда это другое.
42 Garykom
 
гуру
18.09.22
09:10
(40) Я пробовал с елочкой формы править и это ужас.
Когда уровней вложенности мало (2-3) это куда ни шло но когда сложные формы с кучей вложенности превращается в кошмар.
Представь например вкладки-табы и внутри еще вкладки и там разные группы
43 Garykom
 
гуру
18.09.22
09:11
(39) Не оно. Это комшарная елочка
Ты только глянь на эту картинку https://developer.android.com/static/images/jetpack/compose/landing-code-static.svg
И представь как это выглядит когда нормальная сложная форма
44 NorthWind
 
18.09.22
09:14
(42) мне кажется, тут просто из нескольких кошмаров надо выбирать наименьший. Сама по себе идея такого редактирования несколько, скажем так, не в тренде, потому что уже лет 30 для этих целей используются визуальные редакторы. Даже в Турбо Вижн в начале девяностых его налабали, такой редактор.
45 Конструктор1С
 
18.09.22
09:15
(43) и что? Суть в том, что с Jetpack Compose "ёлочку" интерфейса легко декомпозировать. Уже не требуется монолитный макет со 100500 уровнями вложенности и часовым скроллингом. Попробуй то же самое в процедурном стиле провернуть. Запутаешься быстрее, чем допишешь форму
46 NorthWind
 
18.09.22
09:17
и если честно, я тогда вообще не вижу особого смысла в еще одном языке, потому что чем тогда плохо описание форм на изначальном Go? Что так ковыряться в куче кода, что этак, да еще и надо врубаться в другой скрипт, который отличается...
47 Garykom
 
гуру
18.09.22
09:20
(45) (46) Про GIT в курсе?
48 Конструктор1С
 
18.09.22
09:20
(47) и что GIT?
49 Garykom
 
гуру
18.09.22
09:22
(48)+ Коллективная разработка с merge и историей версий для форм
50 NorthWind
 
18.09.22
09:22
а что гит? Я ж не предлагаю в бинарниках описания форм хранить, хотя и такое было во времена Delphi 2-4 точно. По-моему, только в пятерке окончательно перешли на текст.
51 Garykom
 
гуру
18.09.22
09:23
(50) елочка в гите плохо
отдельные строки хорошо
52 Конструктор1С
 
18.09.22
09:23
(49) GIT и другие системы контроля версий прекрасно дружат с тем же Jetpack Compose
53 Конструктор1С
 
18.09.22
09:24
(51) seriously???
54 NorthWind
 
18.09.22
09:24
по-моему, текст он и в африке текст. Как-то же хранят HTML и XML, а там иной раз елочки дай боже какие
55 Garykom
 
гуру
18.09.22
09:24
(52) угу построчно )) целиком блоками или файлами когда куча строк удалено и куча добавлено
хотя всего внутри {} один символ поменяли
56 Конструктор1С
 
18.09.22
09:27
(55) какую-то искусственную проблему придумываешь. А как же тогда живёт функциональное программирование? Там весь код сплошные "ёлочки". Вот, например:
https://clojure.org/about/functional_programming
57 Garykom
 
гуру
18.09.22
09:29
(53) https://habr.com/ru/post/195674/
"Стратегия resolve"

В моем же случае даже если два разраба поменяли один элемент то конфликт будет всего в одной строке
Даже если верхний уровень тронут а не огромные блоки со всеми вложенными
58 Garykom
 
гуру
18.09.22
09:31
(56) Плохо живет функциональное
Сам почитай как там с GIT'ом

1С например только на уровне процедур/функций умеет авто сливать
Сам код вручную правь, тоже самое с блоками внутри елочки
59 Garykom
 
гуру
18.09.22
09:33
(58)+ Если два разраба одну процедуру/функцию изменили то трехстороннее слияние только руками
В моем случае если разные строки даже внутри одного контрола пофиг
60 Кирпич
 
18.09.22
09:40
(6) "Хочу линейность чтобы когда на форме дофига контролов это не превращалось в дикую елочку в виде дерева."
В виде дерева гораздо понятнее. И что мешает писать на xml или JSON не в виде дерева?
61 Конструктор1С
 
18.09.22
09:40
(58) читал, и всё у них хорошо с GIT. Твои псевдопроблемы разруливаются инструментальными средствами. В том же EDT есть штатные плагины, которые позволяют сравнивать формы как формы, а не как XML. И всё хорошо работают. Да даже если бы была проблема с GIT, язык должен быть удобен для решения возложенных на него задач, а не для GIT'а
62 Garykom
 
гуру
18.09.22
09:46
(61) >В том же EDT есть штатные плагины, которые позволяют сравнивать формы как формы, а не как XML. И всё хорошо работают.

"А мужики то и не знают"©

Пруф плиз
63 Garykom
 
гуру
18.09.22
09:47
(60) Не мешает но смысла мало
Можно примеры как это будет выглядеть на XML/JSON?
64 Гений 1С
 
гуру
18.09.22
09:49
(0) есть что-то такое, уже придумано для форм, но назввание не помню, у фузиновцев поспрошай
65 Конструктор1С
 
18.09.22
09:49
Да даже если с голым GIT. Ну декомпозируй ты "ёлочки" на множество отдельных "веточек", и всё будет отлично. Одна "ёлочка" будет описывать одну кнопку, вторая "ёлочка" другую кнопку, треться "ёлочка" текстовое поле и так далее. Хоть десять разрабов будут долбить одну форму, каждый будет колупать свои "ёлочки"
66 Конструктор1С
 
18.09.22
09:50
67 Garykom
 
гуру
18.09.22
09:50
(65) В случае вложенных это не работает. Как поделишь то?
68 Garykom
 
гуру
18.09.22
09:51
(66) И? Где там про сравнение и объединение форм?
Ты сам с EDT то работал?
69 Конструктор1С
 
18.09.22
09:53
(67) да в смысле не работает??? Всё прекрасно работает. Я же тебе дал ссылку на Jetpack Compose, там и примеры кода есть. Отдельная функция описывает отдельный элемент (кнопку, поле или др.) и всё пучком
70 Конструктор1С
 
18.09.22
09:55
(68) у меня к тебе тот же вопрос. Ты сам с EDT+GIT то работал?
71 Garykom
 
гуру
18.09.22
09:56
(70) Да, работал. В БИТ:ERP.
Но ты так и не ответил на вопрос.
72 Garykom
 
гуру
18.09.22
09:57
(69) В случае вложенных как? Независимые то понятно.
73 Конструктор1С
 
18.09.22
09:59
(71) если работал, странно слышать от тебя такой вопрос. Ты бы на первом же сравнении форм увидел разворачиваемое дерево, в котором показаны отличия поэлементно, с точностью до свойства
74 Конструктор1С
 
18.09.22
10:00
(72) а это и есть описание вложенных элементов
75 Конструктор1С
 
18.09.22
10:04
76 Кирпич
 
18.09.22
10:27
(63) ну так, допустим

{
FormName1: {type:"FORM", Width:400, Height:400, Title:"Авторизация"},
Group1: {type: "GROUP", Title:"", GroupType:"Vertical", Parent:"FormName1"},
ButtonOk: {type: "BUTTON", Title:"ОК", Parent: "Group1"},
ButtonCancel: {type: "BUTTON", Title:"Cancel", Parent: "Group1"}
}
77 Garykom
 
гуру
18.09.22
10:28
(73) Трехстороннее?
78 Garykom
 
гуру
18.09.22
10:29
(76) А зачем тут json?
Выкинуть лишние скобки, пробелов за глаза хватает
79 Кирпич
 
18.09.22
10:35
(78) ты же сам хотел JSON. Бухой что ли.
"Можно примеры как это будет выглядеть на XML/JSON?"
80 Кирпич
 
18.09.22
10:39
вот прям правильный JSON

{
  "FormName1": {
    "type": "FORM",
    "Width": 400,
    "Height": 400,
    "Title": "Авторизация"
  },
  "Group1": {
    "type": "GROUP",
    "Title": "",
    "GroupType": "Vertical",
    "Parent": "FormName1"
  },
  "ButtonOk": {
    "type": "BUTTON",
    "Title": "ОК",
    "Parent": "Group1"
  },
  "ButtonCancel": {
    "type": "BUTTON",
    "Title": "Cancel",
    "Parent": "Group1"
  }
}
81 Кирпич
 
18.09.22
10:48
Так что не выдумывай проблемы и используй JSON. А то знаем мы вашего брата-бездельника - начнет писать парсер своего выдуманного языка описания интерфейса, не допишет, забросит и на этом супер пупер фреймворк на golang закончится.
82 Garykom
 
гуру
18.09.22
10:49
(79) Намекал что в том стиле {} лишние
83 Garykom
 
гуру
18.09.22
10:50
(81) Парсер фактически к виду (80) и будет приводить
Так что согласен что можно сразу это за основу брать
84 ДедМорроз
 
18.09.22
11:13
Есть еще yml
Тоже хороший язык,но проще.
Правда,вложенность поддерживается.
85 Конструктор1С
 
18.09.22
11:13
(77) да
86 novichok79
 
18.09.22
11:18
Вы придумываете fxml? Зачем?
87 novichok79
 
18.09.22
11:18
В javafx это уже есть вроде
88 novichok79
 
18.09.22
11:30
вот вам бизнес-план, берете fxml, конверите его в yaml. это наверное было бы удобно.
89 Garykom
 
гуру
18.09.22
12:11
(86) у fxml тоже вложенность ёлочкой
90 Asmody
 
18.09.22
12:21
(0) про Фузину уже говорили? Там всё именно так: https://docs.lsfusion.org/ru/FORM_statement/
91 БигБаг
 
18.09.22
12:25
(0) sql сделан удобным для запросов. Для описания структур нужно xml или json. По которым уже в свою очередь можно делать запросы типа sql. (те структуры запросто ложаться на просто таблицы). Изобретать еще один описатель структур будет лишним.

"в текстовом виде быстро вручную", оно замечательно быстро описывается, если знаешь классы на которых описываешь. В остальных случаях это не быстрее и не легче чем любая из существующих библиотек для этого. И если придумаешь свои классы, то единственное что их будет отличать, то что лично ты их будешь знать. Хотя быстрее изучить что-либо существующее, чем изобрести подобное новое.
92 Garykom
 
гуру
18.09.22
12:26
(90) Нет там совсем не так.
И не то что мне требуется.
93 Garykom
 
гуру
18.09.22
12:32
(91) В SQL кроме SELECT есть еще много разных конструкций.
Например CREATE, DROP и т.д.

И да у меня просто CREATE опущено впереди, краткая форма:
FORM 'FormName1' (Width 400, Height 400, Title 'Авторизация');
GROUP 'Group1' (Title '', Group 'Vertical') IN 'FormName1';
FIELD 'Login' IN 'Group1';
FIELD 'Password' IN 'Group1';

Полная форма:
CREATE FORM 'FormName1' (Width 400, Height 400, Title 'Авторизация');
CREATE GROUP 'Group1' (Title '', Group 'Vertical') IN 'FormName1';
CREATE FIELD 'Login' IN 'Group1';
CREATE FIELD 'Password' IN 'Group1';

Вот если элемент надо удалить то
DELETE (или DEL) FIELD 'Password'

И да получить значение
GET FIELD 'Password'

Установить
SET FIELD 'Login' "Вася"
94 Garykom
 
гуру
18.09.22
12:33
(93)+ Технически "FIELD" можно опускать
DEL 'Password'
GET 'Password'
SET 'Login' "Вася"
95 БигБаг
 
18.09.22
12:36
(6) Вложенность, это свойство разворачивания ссылок. Не нравится вложенность - назначай идентификаторы и ссылайся на них. Либо так, либо так, и третьего варианта вроде нет.
96 Garykom
 
гуру
18.09.22
12:36
(94)+ Некая абстракция из элементов управления (контролов)
И методы общения с ними с сервера, ибо сами контролы на клиенте

Т.е. клиент рассматривается как сервер в аналогии СУБД
А серверный код как выполняющий запросы к формам
97 Garykom
 
гуру
18.09.22
12:37
(95) Вопрос был нет ли уже подобного лаконичного языка работы с UI?
98 БигБаг
 
18.09.22
12:37
(93) Беспорно, можно и так описывать. Но это все одно и то же. Разные фантики оборачиваемые вокруг структур, и один синтаксис подчастую конвертируем в другой.
99 БигБаг
 
18.09.22
12:39
(97) Наиболее компактный это json. В примере (93) синтаксического текста больше написано, чем в json печатать скобочек.
100 БигБаг
 
18.09.22
12:40
Если не нравится вложенность, то а-ля виндовый ini файл...
101 БигБаг
 
18.09.22
12:40
(если не нравятся скобочки)
102 Garykom
 
гуру
18.09.22
12:41
(98) А далее делаем аналогию с SQL
Оно вроде как один и даже стандартизован а реализаций (в виде СУБД) множество как и множество ЯП в которых можно sql запросы

Идея берем некую UI библиотеку аля ExtJS, DHTMLX и т.д.
И вместо изучения ее потрохов работаем через "универсальную" прокладку
103 Asmody
 
18.09.22
12:43
(97) Если бы он был, каждому первому не пришлось бы придумывать свой DSL для описания UI.
А то напридумывали HTML/CSS, XUL, XAML, QML etc.

Просто оказывается UI такая штука, которая со словом "просто" в общем случае ну никак рядом не встаёт.
104 Garykom
 
гуру
18.09.22
12:43
(102)+ Вот и хочу написать микросервис-прокладку
Чтобы из 1С или любого другого бэкендного ЯП рисовать браузерный пользовательский интерфейс и работать с ним универсально.
105 Asmody
 
18.09.22
12:44
(96) сюда смотрел https://divkit.tech/ru/ ?
106 Garykom
 
гуру
18.09.22
12:44
(103) Согласен что не просто.
Хочу урезать по контролам сильно.

Чтобы хотя бы криво но просто рисовать.
107 Garykom
 
гуру
18.09.22
12:46
(105) Да идея похожая
Но вместо JSON язык по типу SQL
108 Garykom
 
гуру
18.09.22
12:56
сервер 1С (http-сервис) - микросервис "прокладка" - браузер клиента

при заходе браузером по адресу прокладка выполняет обратный http-запрос на 1С
1С смотря какой запрос формирует команды "языка UI" или на создание UI
или на выполнение действий с формами на клиенте
в процессе 1C может дозапрашивать (HTTPСоединение) у прокладки некие данные так же на "языке UI", там хранится состояние клиента в течении сессии
109 Garykom
 
гуру
18.09.22
12:58
(108)+ по сути это аналог "Metadata.js" или веб-клиента 1С
110 Garykom
 
гуру
18.09.22
13:02
(108)+ чем то похоже на текстовый протокол HTTP
только высокоуровневая абстракция над ним, заточено для бизнес-контролов

конкретная задача для которой это изобретается это написание личного кабинете клиента привязанного к данным в серверной базе 1С
веб-клиента нельзя ибо лицензий нет столько

в будущем это должно легко допиливаться и сопровождаться обычным 1Сником, без погружений в потроха HTML/CSS/JS
111 Asmody
 
18.09.22
13:02
(107) А что ты в SQL уперся?
Размеченный формат парсить проще.
112 Garykom
 
гуру
18.09.22
13:04
(111) JSON не очень удобно вручную писать или программно, как и отлаживать
Но встроенный парсер в Структуры 1С будет и обратно
113 Garykom
 
гуру
18.09.22
13:05
(112)+ Если JSON за основу то придется визуальный редактор форм ваять
Не хочу.
114 БигБаг
 
18.09.22
13:14
(113) Единственное что отличает СИНТАКСИС у SQL от JSON, это то, что в скл: "create ... ;" а в json: "{}". Все остальное это вопрос того, что и как ты в эти "скобочки" запихнешь.
115 Garykom
 
гуру
18.09.22
13:18
(114) Если не использовать вложенность ("ёлочку") {{}} то нет смысла сохранять эти скобки
Ключевое слово и пробелов достаточно
116 Asmody
 
18.09.22
13:18
(113) А для SQL не придется? Странный аргумент
117 Asmody
 
18.09.22
13:19
(115) Пасиб, поржал. Ты исходники питона блокнотом правил когда-нибудь?
118 Garykom
 
гуру
18.09.22
13:20
(116) не придется, достаточно визуализатора форм
много редакторов-конструкторов SQL и какая в них востребованность?
119 Garykom
 
гуру
18.09.22
13:20
(117) Отступов не будет! Никакого питона-стайл
120 Garykom
 
гуру
18.09.22
13:21
(115)+ сравни

CREATE FORM 'FormName1' (Width 400, Height 400, Title 'Авторизация');

{FORM:'FormName1',{Width:400, Height:400, Title :Авторизация'}};
121 Garykom
 
гуру
18.09.22
13:22
(120) имхо первый вариант без {} читается лучше и пишется легче
122 Garykom
 
гуру
18.09.22
13:24
(120) и
CREATE FORM 'FormName1' (Width 400, Height 400, Title 'Авторизация');
может быть переписан как
CREATE FORM 'FormName1';
SET 'FormName1'.Width 400;
SET 'FormName1'.Height 400;
SET 'FormName1'.Title 'Авторизация';
123 Garykom
 
гуру
18.09.22
13:27
(122)+ CREATE и SET можно опускать
124 Asmody
 
18.09.22
14:00
(120) писать парсер для своего языка проще, чем взять готовы парсер json/xml/...?
125 ДедМорроз
 
18.09.22
14:00
Возьмите Си
Там интерфейс так и пишется
CreateWindow ...
А потом switch на события.
126 Garykom
 
гуру
18.09.22
14:39
(124) да сначала проще взять json
127 Sserj
 
18.09.22
14:46
(122) Посмотри FXML в JavaFX. Как минимум в твоих примерах не видно привязки к процедурам-обработчикам.
128 БигБаг
 
18.09.22
14:47
(120) Что читается лучше, это абсолютно вопрос только привычки. То, к чему глаза привыкли видеть пока годами пялился в эти ЯП.
129 Ivan_495
 
18.09.22
22:06
в delphi был grid,  его можно растянуть на весь экран и в каждый квадрат этого grid вставить , еще grid , если нужно
130 SleepyHead
 
гуру
19.09.22
04:53
(0) На FoxPro 2.5 такое было ))
131 Garykom
 
гуру
19.09.22
05:02
(130) Хмм про ForPro я уже и забыл, сталкивался с ним только как эникей/админ, сам не писал на нем почти.
Да там нечто похожее но лишь частично.

Хотя задача та же, пользовательский интерфейс для базы данных.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн