version 7 - Design

Abierto
#372 9 comentarios 3 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
20/100
Tipo de issue
Nueva funcionalidad
Claridad
Necesita aclaración
Estado de actividad
Estancado
Stack tecnológico
javascript
Área
backend

Línea de trabajo

Este es un hilo de diseño de la versión 7, no una tarea de implementación, y no menciona archivos, pruebas ni puntos de entrada. Empieza revisando el motor de reglas actual de 6.x y los Issues relacionados a los que se hace referencia en la discusión; para darlo por terminado se necesitaría un diseño acordado para la extensibilidad, la estructura, Facts, Almanac, Conditions, Rules y Engine.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

next-major

Starting a thread here to put notes on a version 7 design.
Version 7 is an opportunity to make a number of changes that have been suggested in issues filed here that would make the JSON rules engine more extensible at the cost of breaking backwards compatibility with the current 6.x versions.

Extensibility vs. Structure

With version 7 we want to consider the tradeoff between extensibility and having a known structure. For instance introducing the ability to add custom Condition classes or custom Rule subclasses allows for the system to be highly extensible but makes it much harder to reason about the input and output of the rules engine without knowing about all these extensions.

Ultimately we need to draw this line somewhere and my initial inclination is to draw it in favor of more extensibility in order to allow the broadest possible use of the rules engine.

Concepts

Starting from a clean stale the following basic concepts will be part of the rules engine

Facts
Facts are things that are known by the rules engine during execution.

Almanac
The Almanac is the system for storing and looking up Facts.

Conditions
Conditions are executable, contain a priority, and return a result containing a boolean value. Generally there are 2 types of conditions, comparison conditions which check the value of a fact against another value, and composite conditions like all, any, and not which use 1 or more nested conditions to produce a result. By being fully extensible it's possible to introduce other types of conditions.

Rules
Rules are also executable and contain a priority. They generally are comprised of a set of conditions which are executed. Rules produce events as a result of execution.

Engine
The engine provides the mechanism to evaluate rules, and conditions. It includes mechanisms to resolve the values of facts or other special objects. Changing the engine can significantly change the behavior of the system.

Lenguaje dominante
JavaScript
Estrellas
3.1k
Forks
507
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de CacheControl/json-rules-engine

Todos los issues de CacheControl/json-rules-engine

Issues similares

Más issues de JavaScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.