logologo
Початок
Посібник
Розробка
Плагіни
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Початок
Посібник
Розробка
Плагіни
API
logologo

Вступ

Що таке FlowEngine?
FlowEngine та плагіни
Швидкий старт
План навчання

Посібник

Реєстрація FlowModel
Створення FlowModel
Рендеринг FlowModel
Потік подій та конфігурація FlowModel
Збереження FlowModel
Життєвий цикл FlowModel
Система контексту FlowModel
Реактивний механізм: Observable
FlowModel vs React.Component

Визначення

ModelDefinition
FlowDefinition
EventDefinition
ActionDefinition
StepDefinition
Previous PageFlowModel vs React.Component
Next PageFlowDefinition
Повідомлення про переклад ШІ

Ця документація була автоматично перекладена штучним інтелектом.

#ModelDefinition

ModelDefinition визначає параметри створення моделі потоку, які використовуються для створення екземпляра моделі за допомогою методу FlowEngine.createModel(). Він містить основну конфігурацію моделі, її властивості, підмоделі та іншу інформацію.

#Визначення типу

interface CreateModelOptions {
  uid?: string;
  use: RegisteredModelClassName | ModelConstructor;
  props?: IModelComponentProps;
  flowRegistry?: Record<string, Omit<FlowDefinitionOptions, 'key'>>;
  stepParams?: StepParams;
  subModels?: Record<string, CreateSubModelOptions[]>;
  parentId?: string;
  subKey?: string;
  subType?: 'array' | 'single';
  sortIndex?: number;
  flowRegistry?: Record<string, Omit<FlowDefinitionOptions, 'key'>>;
}

#Використання

const engine = new FlowEngine();

// Створити екземпляр моделі
const model = engine.createModel({
  uid: 'unique-model-id',
  use: 'MyModel',
  props: {
    title: 'My Model',
    description: 'A sample model'
  },
  stepParams: {
    step1: { param1: 'value1' }
  },
  subModels: {
    childModels: [
      {
        use: 'ChildModel',
        props: { name: 'Child 1' }
      }
    ]
  }
});

#Опис властивостей

#uid

Тип: string
Обов'язковий: Ні
Опис: Унікальний ідентифікатор екземпляра моделі

Якщо ви його не надасте, система автоматично згенерує унікальний UID.

Приклад:

uid: 'model-123'
uid: 'user-profile-model'
uid: 'data-processing-instance'

#use

Тип: RegisteredModelClassName | ModelConstructor
Обов'язковий: Так
Опис: Клас моделі для використання

Це може бути рядок з назвою зареєстрованого класу моделі або конструктор класу моделі.

Приклад:

// Використання посилання у вигляді рядка
use: 'MyModel'

// Використання конструктора
use: MyModel

// Використання динамічного посилання
const ModelClass = engine.getModelClass('MyModel');
use: ModelClass

#props

Тип: IModelComponentProps
Обов'язковий: Ні
Опис: Конфігурація властивостей моделі

Це об'єкт властивостей, що передається конструктору моделі.

Приклад:

props: {
  title: 'My Model',
  description: 'A sample model instance',
  config: {
    theme: 'dark',
    language: 'zh-CN'
  },
  metadata: {
    version: '1.0.0',
    author: 'Developer'
  }
}

#stepParams

Тип: StepParams
Обов'язковий: Ні
Опис: Конфігурація параметрів кроку

Встановлює параметри для кожного кроку в робочому процесі.

Приклад:

stepParams: {
  loadData: {
    url: 'https://api.example.com/data',
    method: 'GET',
    timeout: 5000
  },
  processData: {
    processor: 'advanced',
    options: {
      format: 'json',
      encoding: 'utf8'
    }
  },
  saveData: {
    destination: 'database',
    table: 'processed_data'
  }
}

#subModels

Тип: Record<string, CreateSubModelOptions[]>
Обов'язковий: Ні
Опис: Конфігурація підмоделей

Визначає підмоделі моделі, підтримуючи як масиви, так і поодинокі підмоделі.

Приклад:

subModels: {
  // Підмодель типу масиву
  childModels: [
    {
      use: 'ChildModel1',
      props: { name: 'Child 1', type: 'primary' }
    },
    {
      use: 'ChildModel2',
      props: { name: 'Child 2', type: 'secondary' }
    }
  ],
  // Одинична підмодель
  singleChild: {
    use: 'SingleChildModel',
    props: { name: 'Single Child' }
  }
}

#parentId

Тип: string
Обов'язковий: Ні
Опис: UID батьківської моделі

Використовується для встановлення зв'язку "батько-нащадок" між моделями.

Приклад:

parentId: 'parent-model-123'
parentId: 'master-instance'

#subKey

Тип: string
Обов'язковий: Ні
Опис: Ключове ім'я підмоделі в батьківській моделі

Використовується для ідентифікації позиції підмоделі всередині батьківської моделі.

Приклад:

subKey: 'childModels'
subKey: 'subComponents'
subKey: 'nestedItems'

#subType

Тип: 'array' | 'single'
Обов'язковий: Ні
Опис: Тип підмоделі

  • 'array': Підмодель типу масиву, яка може містити кілька екземплярів
  • 'single': Одинична підмодель, яка може містити лише один екземпляр

Приклад:

subType: 'array'  // Тип масиву
subType: 'single' // Одиничний тип

#sortIndex

Тип: number
Обов'язковий: Ні
Опис: Індекс сортування

Використовується для керування порядком відображення моделі у списку.

Приклад:

sortIndex: 0  // На початку списку
sortIndex: 10 // Середня позиція
sortIndex: 100 // Ближче до кінця

#flowRegistry

Тип: Record<string, Omit<FlowDefinitionOptions, 'key'>>
Обов'язковий: Ні
Опис: Реєстр робочих процесів

Реєструє конкретні визначення робочих процесів для екземпляра моделі.

Приклад:

flowRegistry: {
  'customFlow': {
    title: 'Custom Flow',
    manual: false,
    steps: {
      step1: {
        use: 'customAction',
        title: 'Custom Step'
      }
    }
  },
  'anotherFlow': {
    title: 'Another Flow',
    on: 'click',
    steps: {
      step1: {
        handler: async (ctx, params) => {
          // Власна логіка обробки
        }
      }
    }
  }
}

#Повний приклад

class DataProcessingModel extends FlowModel {}

// Зареєструвати клас моделі
engine.registerModel('DataProcessingModel', DataProcessingModel);

// Створити екземпляр моделі
const model = engine.createModel({
  uid: 'data-processing-001',
  use: 'DataProcessingModel',
  props: {
    title: 'Data Processing Instance',
    description: 'Processes user data with advanced algorithms',
    config: {
      algorithm: 'neural-network',
      batchSize: 100,
      learningRate: 0.01
    },
    metadata: {
      version: '2.1.0',
      author: 'Data Team',
      createdAt: new Date().toISOString()
    }
  },
  stepParams: {
    loadData: {
      source: 'database',
      query: 'SELECT * FROM users WHERE active = true',
      limit: 1000
    },
    preprocess: {
      normalize: true,
      removeOutliers: true,
      encoding: 'utf8'
    },
    process: {
      algorithm: 'neural-network',
      layers: [64, 32, 16],
      epochs: 100,
      batchSize: 32
    },
    saveResults: {
      destination: 'results_table',
      format: 'json',
      compress: true
    }
  },
  subModels: {
    dataSources: [
      {
        use: 'DatabaseSource',
        props: {
          name: 'Primary DB',
          connection: 'mysql://localhost:3306/db1'
        }
      },
      {
        use: 'APISource',
        props: {
          name: 'External API',
          url: 'https://api.external.com/data'
        }
      }
    ],
    processors: [
      {
        use: 'DataProcessor',
        props: {
          name: 'Main Processor',
          type: 'neural-network'
        }
      }
    ],
    outputHandler: {
      use: 'OutputHandler',
      props: {
        name: 'Results Handler',
        format: 'json'
      }
    }
  },
  flowRegistry: {
    'dataProcessingFlow': {
      title: 'Data Processing Flow',
      manual: false,
      sort: 0,
      steps: {
        load: {
          use: 'loadDataAction',
          title: 'Load Data',
          sort: 0
        },
        process: {
          use: 'processDataAction',
          title: 'Process Data',
          sort: 1
        },
        save: {
          use: 'saveDataAction',
          title: 'Save Results',
          sort: 2
        }
      }
    },
    'errorHandlingFlow': {
      title: 'Error Handling Flow',
      manual: true,
      on: 'error',
      steps: {
        log: {
          use: 'logErrorAction',
          title: 'Log Error'
        },
        notify: {
          use: 'notifyErrorAction',
          title: 'Notify Admin'
        }
      }
    }
  }
});

// Використати модель
model.applyFlow('dataProcessingFlow');