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

Wprowadzenie

Czym jest FlowEngine?
FlowEngine a wtyczki
Szybki start
Ścieżka nauki

Przewodnik

Rejestracja FlowModel
Tworzenie FlowModel
Renderowanie FlowModel
Strumień zdarzeń i konfiguracja FlowModel
Utrwalanie FlowModel
Cykl życia FlowModel
System kontekstu FlowModel
Mechanizm reaktywny: Observable
FlowModel vs React.Component

Definicje

ModelDefinition
FlowDefinition
EventDefinition
ActionDefinition
StepDefinition
Previous PageFlowModel vs React.Component
Next PageFlowDefinition
TIP

Ten dokument został przetłumaczony przez AI. W przypadku niedokładności, proszę odnieść się do wersji angielskiej

#ModelDefinition

ModelDefinition określa opcje tworzenia modelu przepływu pracy, które są wykorzystywane do tworzenia instancji modelu za pomocą metody FlowEngine.createModel(). Zawiera podstawową konfigurację modelu, jego właściwości, podmodele oraz inne istotne informacje.

#Definicja typu

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'>>;
}

#Sposób użycia

const engine = new FlowEngine();

// Tworzenie instancji modelu
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' }
      }
    ]
  }
});

#Opis właściwości

#uid

Typ: string
Wymagane: Nie
Opis: Unikalny identyfikator instancji modelu.

Jeśli nie zostanie podany, system automatycznie wygeneruje unikalny identyfikator UID.

Przykład:

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

#use

Typ: RegisteredModelClassName | ModelConstructor
Wymagane: Tak
Opis: Klasa modelu do użycia.

Może to być nazwa zarejestrowanej klasy modelu (jako string) lub konstruktor klasy modelu.

Przykład:

// Użycie referencji stringowej
use: 'MyModel'

// Użycie konstruktora
use: MyModel

// Użycie dynamicznej referencji
const ModelClass = engine.getModelClass('MyModel');
use: ModelClass

#props

Typ: IModelComponentProps
Wymagane: Nie
Opis: Konfiguracja właściwości dla modelu.

Jest to obiekt właściwości przekazywany do konstruktora modelu.

Przykład:

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

#stepParams

Typ: StepParams
Wymagane: Nie
Opis: Konfiguracja parametrów dla kroków.

Ustawia parametry dla każdego kroku w przepływie pracy.

Przykład:

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

Typ: Record<string, CreateSubModelOptions[]>
Wymagane: Nie
Opis: Konfiguracja podmodeli.

Definiuje podmodele dla danego modelu, obsługując zarówno podmodele tablicowe, jak i pojedyncze.

Przykład:

subModels: {
  // Podmodel typu tablicowego
  childModels: [
    {
      use: 'ChildModel1',
      props: { name: 'Child 1', type: 'primary' }
    },
    {
      use: 'ChildModel2',
      props: { name: 'Child 2', type: 'secondary' }
    }
  ],
  // Pojedynczy podmodel
  singleChild: {
    use: 'SingleChildModel',
    props: { name: 'Single Child' }
  }
}

#parentId

Typ: string
Wymagane: Nie
Opis: UID modelu nadrzędnego.

Służy do ustanawiania relacji rodzic-dziecko między modelami.

Przykład:

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

#subKey

Typ: string
Wymagane: Nie
Opis: Nazwa klucza podmodelu w modelu nadrzędnym.

Służy do identyfikacji pozycji podmodelu w modelu nadrzędnym.

Przykład:

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

#subType

Typ: 'array' | 'single'
Wymagane: Nie
Opis: Typ podmodelu.

  • 'array': Podmodel typu tablicowego, który może zawierać wiele instancji.
  • 'single': Pojedynczy podmodel, który może zawierać tylko jedną instancję.

Przykład:

subType: 'array'  // Typ tablicowy
subType: 'single' // Typ pojedynczy

#sortIndex

Typ: number
Wymagane: Nie
Opis: Indeks sortowania.

Służy do kontrolowania kolejności wyświetlania modelu na liście.

Przykład:

sortIndex: 0  // Na samym początku
sortIndex: 10 // Pozycja środkowa
sortIndex: 100 // Dalej na liście

#flowRegistry

Typ: Record<string, Omit<FlowDefinitionOptions, 'key'>>
Wymagane: Nie
Opis: Rejestr przepływów pracy.

Rejestruje konkretne definicje przepływów pracy dla instancji modelu.

Przykład:

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) => {
          // Niestandardowa logika przetwarzania
        }
      }
    }
  }
}

#Pełny przykład

class DataProcessingModel extends FlowModel {}

// Rejestracja klasy modelu
engine.registerModel('DataProcessingModel', DataProcessingModel);

// Tworzenie instancji modelu
const model = engine.createModel({
  uid: 'data-processing-001',
  use: 'DataProcessingModel',
  props: {
    title: 'Instancja przetwarzania danych',
    description: 'Przetwarza dane użytkownika za pomocą zaawansowanych algorytmów',
    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: 'Główna baza danych',
          connection: 'mysql://localhost:3306/db1'
        }
      },
      {
        use: 'APISource',
        props: {
          name: 'Zewnętrzne API',
          url: 'https://api.external.com/data'
        }
      }
    ],
    processors: [
      {
        use: 'DataProcessor',
        props: {
          name: 'Główny procesor',
          type: 'neural-network'
        }
      }
    ],
    outputHandler: {
      use: 'OutputHandler',
      props: {
        name: 'Obsługa wyników',
        format: 'json'
      }
    }
  },
  flowRegistry: {
    'dataProcessingFlow': {
      title: 'Przepływ pracy przetwarzania danych',
      manual: false,
      sort: 0,
      steps: {
        load: {
          use: 'loadDataAction',
          title: 'Wczytaj dane',
          sort: 0
        },
        process: {
          use: 'processDataAction',
          title: 'Przetwórz dane',
          sort: 1
        },
        save: {
          use: 'saveDataAction',
          title: 'Zapisz wyniki',
          sort: 2
        }
      }
    },
    'errorHandlingFlow': {
      title: 'Przepływ pracy obsługi błędów',
      manual: true,
      on: 'error',
      steps: {
        log: {
          use: 'logErrorAction',
          title: 'Zaloguj błąd'
        },
        notify: {
          use: 'notifyErrorAction',
          title: 'Powiadom administratora'
        }
      }
    }
  }
});

// Użycie modelu
model.applyFlow('dataProcessingFlow');