В данной статье я предлагаю ознакомиться с идеей специфичной системы разработки. Система состоит из двух частей:
Подробности под катом:
Дла начала нужно рассмотреть логику базы:
Всё начинается с таблицы объектов (objects), в которой регистрируются единицы системы. Это справочники (Catalog), документы (Document), журналы (Journal), формы отчёта (Report), формы ввода / редактирования (Form) и скрипты (Script) для редактирования всех предыдущих или всей логики в целом.
Затем при создания объекта создаются таблицы: header_«objects.number» и data_«objects.number». В первой содержатся данные, характеризующие список данных: тип, наименование, ссылка на скрипт. Во — второй данные в пронумерованных столбцах по количеству элементов в таблице header_«objects.number». Ссылка состоит из двух частей: в header_«objects.number» сохраняется ссылка на объект (link_object) и ссылка на столбец (link_header). В таблице data_«objects.number» сохраняется индекс ячейки, на которую ссылается запись.
На следующем этапе я думаю создать набор процедур, обращающихся к базе на уровне objects: создание / редактирование, вставка данных и подтверждение операций. В данные процедуры я хочу сделать кодовые вставки, дабы на уровне объектов и стобцов проводить операции изменения данных (что актуально для журналов, документов и форм). Этими процедурами и вставками будет пользоваться подсистема графического посредника, которая отображает данные. Подсистема дизайна будет разрабатывать работу посредника и базы через логику.
Теперь вопросы:
Жду комментариев и советов.
P.S. По поводу функции prepare / bind в связке luasql — sqlite3 — нереализуема. Давно стоит ошибка на стаке и функции просто возвращают nil (http://stackoverflow.com/questions/32670262/prepared-statements-for-lua-with-luasql, http://stackoverflow.com/questions/16176833/prepared-statements-in-luasql-postgres). Посему только BEGIN… COMMIT через execute().
- Особое строение базы для определения объектов и документов;
- Внутренняя логика, управляющая базой и создающая набор функциональных модулей с определённой масштабируемостью;
- Подсистема графического посредника между логикой и пользователем;
- Подсистема дизайна, позволяющая создать интерфейс графического посредника.
Подробности под катом:
Дла начала нужно рассмотреть логику базы:
Строение базы:
Всё начинается с таблицы объектов (objects), в которой регистрируются единицы системы. Это справочники (Catalog), документы (Document), журналы (Journal), формы отчёта (Report), формы ввода / редактирования (Form) и скрипты (Script) для редактирования всех предыдущих или всей логики в целом.
Затем при создания объекта создаются таблицы: header_«objects.number» и data_«objects.number». В первой содержатся данные, характеризующие список данных: тип, наименование, ссылка на скрипт. Во — второй данные в пронумерованных столбцах по количеству элементов в таблице header_«objects.number». Ссылка состоит из двух частей: в header_«objects.number» сохраняется ссылка на объект (link_object) и ссылка на столбец (link_header). В таблице data_«objects.number» сохраняется индекс ячейки, на которую ссылается запись.
На следующем этапе я думаю создать набор процедур, обращающихся к базе на уровне objects: создание / редактирование, вставка данных и подтверждение операций. В данные процедуры я хочу сделать кодовые вставки, дабы на уровне объектов и стобцов проводить операции изменения данных (что актуально для журналов, документов и форм). Этими процедурами и вставками будет пользоваться подсистема графического посредника, которая отображает данные. Подсистема дизайна будет разрабатывать работу посредника и базы через логику.
Теперь вопросы:
- Насколько возможно реализовать эти уровни на языке Lua?
- Насколько перспективнее и легче в реализации просто создать оболочку разработки таблиц, нежели делать всё перечисленное выше?
- Насколько реально сделать функциональные вставки на уровне логики — графической подсистемы при такой схеме?
- Насколько функционально (в плане разбивки данных) и легче в чтении использовать одну таблицу столбцов (header), дополнительно указывая ссылку на объект?
- Насколько легче или сложнее проводить извлечение данных из этой системы? Не забьёт ли такая поправка базу?
Жду комментариев и советов.
P.S. По поводу функции prepare / bind в связке luasql — sqlite3 — нереализуема. Давно стоит ошибка на стаке и функции просто возвращают nil (http://stackoverflow.com/questions/32670262/prepared-statements-for-lua-with-luasql, http://stackoverflow.com/questions/16176833/prepared-statements-in-luasql-postgres). Посему только BEGIN… COMMIT через execute().
Поделиться с друзьями
Комментарии (11)
hantenellotf
06.06.2016 06:38P.S.S. Мне нужны развёрнутые, а не быстрые ответы, потому «Тостер» отпадает.
Lertmind
06.06.2016 07:17+1На хабре — статьи, на тостере — вопросы. Либо ищете специальные форумы. Уже не в первый раз такое. Почему так сложно понять?
hantenellotf
06.06.2016 07:20-11) Это не прописанно в Ваших правилах.
2) Мне нужны подробные комментарии, а не отмазки.DrPass
06.06.2016 09:52> 2) Мне нужны подробные комментарии, а не отмазки.
Ну это же ваша тема, удалите тут всех, кто пишет недостаточно подробные комментарии.
Delphinum
Ну во-первых — тостер.
Во-вторых — как то слабо вы изложили свою мысль, лично я практически ничего не понял из вашей идеи, но если я понял правильно, то такого рода «конструкторов» хватает. Да практически любая современная и устаревшая СУБД сопровождается механизмами для построения UI и отчетов. Есть и более сложные решение, которые позволяют не просто создавать объекты и документы, а разрабатывать полноценное бизнес-приложение, взять ту же платформу CUBA и прилагаемую к ней CUBA-Studio.
amaksr
Из статьи я тоже не понял только лишь всё… Пошел по вашей ссылке, скачал CUBA, с удивлением обнаружил, что у меня тоже есть похожий самописный велосипед. Правда он берёт за изначальные данные структуру БД из операторов CREATE TABLE, не умеет генерировать UI, но зато генерирует код классов и типовых операций над ними на разных языках.
Осталось только выяснить, об этом ли была статья…
Delphinum
CUBA код классов тоже генерит. На счет типовых операций, смотря что таковыми считать. Если мне память еще не изменила, то в CUBA архитектура ориентированна на сервисы, а объекты домена лишь «тупые» болванки, потому в них не особо и нужны типовые операции, но CRUD операции там реализуются прямо из студии.
amaksr
Под типовыми операциями я имел ввиду прежде всего клонирование, и для разных языков. Например пусть есть такой объект:
Для него клонирование (а так же конструирование объектов и JSON-ов) на Javascript должно учесть, что дату лучше клонировать оператором new:
Так же, не думаю, что CUBA умеет генерировать код для MySQL для STORED PROCEDURES. Что-нибудь типа такого:
которое бы автоматически развертывалось в
Ну и по тому же принципу:
развертывалось бы в
Ну и плюс до кучи мой велосипед генерирует код PHP, в частности классы для Laravel со всеми setter-ами и getter-ами и доступом к связанным данным по Foreign Keys.
Delphinum
CUBA это Java фреймворк, ориентированный на PostgreSQL и MS SQL. В нем предлагается своя архитектура.
gimntut
Мне кажется, что я понял о чём статья. По сути автор придумывает свою 1с, с платформой (графический посредник) и конфигуратором (подсистема дизайна). Даже таблицы объектов такие же: справочники, документы, отчёты. Только вместо языка 1с предлагается lua, а вместо файловой базы — sqlite.
Я считаю, даже если всё описанное в «статье» будет реализовано, то этого будет мало. Современному программисту нужны инструменты отладки, механизмы тестирования, версионирование и развертывание.
Зачем мне скриптовый язык, если я не могу его отлаживать?
Как я могу быть уверен, что после внесения нового функционала у пользователя что-нибудь не сломается, если код не покрыт тестами?
Как я могу вернуться к старому коду или посмотреть, что сломало мой код, если нет версионирования?
Даст ли мне среда разработки возможность экспериментировать с кодом не мешая пользователям?
Насколько просто можно влить изменения или отменить их на серверах пользователей и их рабочих станциях?
Вот из-за таких вопросов, в дополнение и даже на замену таким зрелым инструментам как конфигуратор 1с приходят инструменты подобные 1с:Enterprise Development Tools
habrahabr.ru/company/infostart/blog/255757
А автор решил пройти весь этот путь в одиночку.
hantenellotf
Да, будут проблемы со множественной модификацией и доступом по времени, но это значительно упростит процесс разработки и завязки объектов.
P.S. Мало кто из вышеотписавшихся смог понять структуру объекта и никто не смог ответить на предложенные мной вопросы. Жаль, но придётся этот путь действительно проходить самому, без чьей-либо профессиональной поддержки.