… с объектной ориентацией, сериализацией, отражением, полиморфизмом, визуальным программированием, отсутствием кода, блэкджеком и шлюхами — и это на MS SQL 6.5 1995 года! Те, кто знаком с историей ИТ, вспомнят dBase и Clipper, когда услышат слово «одинарное соединение».
Однако я расскажу вам об однозвенной ERP. Интерфейсная программа для этого ERP-система общался с базой данных через несколько интерфейсных таблиц и несколько процедур.
То есть, по сути, она браузер , который не считается слоем.
Да, это #аномальное программирование , что дало ряд уникальных свойств.
Иногда хочется вывернуть ручку на максимум и довести идею до абсурдного логического завершения.
Как рассказали родители одному из героев фильма «О чем говорят мужчины, продолжение» - " Так вы дойдете до цели! "и он подумал" Очень хочу взять и дойти до этого момента! ".
Система называлась Ультима-С , она такая же Нексус .
Судьба его была незавидной — эту ERP сделали для продажи, но продаж не было.
Что, впрочем, было естественно – мы, в том числе и автор этих строк, не имели ни малейшего представления о маркетинге и продажах.
Но я имел удовольствие развлечься за счет своего работодателя.
Так,
Идти
Давайте возьмем это скрипты установки и установить систему на MS SQL 2019. Однако базу данных пришлось загнать в режим совместимости .
Запустите exe. Кстати, он крошечный (пришлось найти ntwdblib.dll ):
и занимает примерно тот же объем памяти, что и Блокнот:
фг Давайте запустим nexus.exe и откройте иерархию классов:
При его использовании возникает очень интересное ощущение, которого я не испытывал со времен MS DOS. Многие операции выполняются мгновенно.
Нет, Действительно немедленно.
В современных программах, даже WinForms (не говоря уже о Web), код настолько тяжёлый, динамически выделяет столько памяти и вызывает GC столько раз, что глаз замечает видимые задержки.
Мы к ним привыкли и не замечаем их.
Но когда программа действительно рисует окно после нажатия клавиши в течение одного кадра экрана, это удивительно.
А когда-то, во времена MS DOS, это было нормально.
Как это работает?
Вся связь с сервером происходит через несколько процедур и три (и немного) таблицы.Если вы хотите открыть папку, мы вызываем процедуру, передавая id папки, и в результирующую таблицу сбрасывается список документов, которые там находятся.
Причём клиента не интересует, каким получился этот список.
Мы щелкаем правой кнопкой мыши и хотим получить список свойств? Также через таблицу.
Пользователь видит понятные для пользователя имена свойств, а также у них есть системные идентификаторы, среди которых обычно есть «просмотр» (по умолчанию просмотр только для чтения) и «редактирование» (основное редактирование).
Наконец, мы выбрали свойство и хотим просмотреть документ. Результат отображается через таблицу Подробный где есть идентификаторы полей, значения (есть столбцы для разных типов) и столбец форматирования.
Это поле содержит тип значения в первой букве.
int, float, деньги, строка, документ (которое на самом деле также является целым числом), а затем имя человека и некоторые теги, указывающие поведение, например: ширина^мин=0^макс=10,0 Конечно, вас интересовало, если таблицы для общения общие, то как много клиентов могут работать одновременно? Все очень просто — во всех этих таблицах есть поле СПИД (=@@спид).
И все клиенты открываются ровно одно соединение и используйте только это (да, такая конструкция была нормой).
Нет пулов соединений.
Представляете, как легко сделать пессимистическую блокировку - по спиду точно знаешь, что клиент не умер и даже с какого хоста он работает! Обычно клиент располагает поля сверху вниз, но для важных документов можно создать красивые формы.
И да, теперь языком дизайна, вероятно, будет HTML, а языком сценариев (мин^макс^ и более сложные итоги) - JS.
Ориентация объекта
Все документы в системе являются производными от общего класса Doc. При создании производных классов такие документы, как Сорт , осуществляя своего рода Отражение .Вы можете увидеть часть иерархии классов на первом скриншоте.
Классы также могут быть абстрактными.
При выполнении операции (развертывание папки, получение свойств и отображение) возникают процедуры с именами типа Class_operation_ID_ , и сначала приходит волна' предварительно' свойства, начиная с Doc до конечного класса, а затем ' почта' , в обратном направлении, от листа к корню.
Как правило, все свойства предварительно , А почта пригодится для удаления данных (удаление лучше производить в обратном порядке, начиная с деталь столы для владелец ).
Для предварительно свойство следующего класса «видит», что сделали классы под ним, поэтому может не просто добавлять поле или свойство, но и «злоупотреблять» тем, что было сделано до него — переименовывать свойство или вообще удалять его, делать поля читаемыми -только дать им значения по умолчанию или вообще скрыть поля специальным флагом (но не удалять их - иначе будут проблемы при записи) Ниже вы видите пример процедур на SQL, к которым был прикреплен самописный макроязык.
Обратите внимание, как производный класс изменяет свойства понятного имени пользователя, а также Иногда добавляет новое свойство.
Работать через Подробный дал еще одну интересную возможность: сериализация .
В конце концов, вы можете просто позвонить в отель.
вид (например), получить ответ и запомнить его.
В результате получилась мертвая копия, ксерокопия, но она выглядела как настоящий документ — только была доступна только для чтения.
Аналогично Аудит (история изменений) работал на уровне корневого класса.
Док , сравнивая Подробный до и после редактирования.
Все производные классы были освобождены от необходимости проходить аудит редактирования!
Без кода
В системе появилась возможность создавать новые документы прямо через интерфейс.Сейчас я покажу вам пример.
Давайте создадим класс, производный от пользователя:
В диалоге создания класса заполните необходимые поля.
Как видите, я лишь поверхностно коснулся — в системе было гораздо больше.
Теперь через щелкните правой кнопкой мыши Используя полученный класс, мы создадим расширение, то есть новое поле — количество пальцев от 5 до 10.
Теперь создаем сотрудника, указав количество пальцев 5, и записываем его.
Давайте посмотрим на результат. Ниже добавлено новое поле:
Давайте сравним обычного пользователя и VIP-пользователя.
Благодаря полиморфизм (одна папка может содержать документы любого типа) в папку можно поместить как обычного пользователя, так и VIP:
С помощью No-code можно было создавать сложные документы, с таблицами в духе продукт-количество-цена и поле Общая сумма , который был пересчитан автоматически — и все это без единой строчки кода.
Однако данные («расширения») хранились в универсальный стол , что плохо с точки зрения производительности.
Поэтому подобные вещи предназначались для небольших дополнений, но основной код все равно писался на TSQL. Вершиной отсутствия кода было помощник пользователя — метод переопределения поведения любых полей.
Администратор мог добавить значение по умолчанию для любого документа, для любого поля, для определенной группы пользователей, сделать поле только для чтения (что вместе со значением по умолчанию заставляет вас использовать только определенное значение) или вообще скрыть поле.
Для полей выбора документов можно было изменить Корень (папка, начиная с которой выбираются документы для ввода) - например, пусть Вася Пупкин при создании платежного поручения сможет указать только этих трёх клиентов (ссылки на этих клиентов добавим в отдельную папку)
Фильтрация
В системе были как обычные папки, похожие на папки с файлами, куда можно было перетаскивать документы мышкой, так и настраиваемые фильтры:Все классы были опрошены через систему событий – по каким полям можно фильтровать?
Далее пользователь мог собрать из этих кирпичиков любой фильтр.
Разумеется, перетаскивание документов в такую папку было запрещено.
Заключение
С тех пор я не видел потенциально более гибкой системы.А такие монстры, как SAP R/3, живут и процветают. Теги: #ИТ-история #Аномальное программирование #ERP-системы #sql #Microsoft SQL Server #ms sql #IT-история
-
Пауки
19 Oct, 24 -
Объявления В Заголовках
19 Oct, 24 -
Вопрос К Дизайнерам Интерфейсов.
19 Oct, 24 -
Фармацевтический Бизнес Изнутри
19 Oct, 24