Hola a todos.
He tenido varias publicaciones sobre el tema de Entity Attribute Value, EAV para abreviar (un patrón de programación para almacenar datos arbitrarios). Desde entonces, terminé la biblioteca para trabajar con EAV y me gustaría compartir mis desarrollos con ustedes.
La biblioteca implementa un escenario básico:
Crear entidad
Crear atributo
Establecer atributos específicos para una entidad
Establecer valor para atributos (crear artículo)
Forme un repositorio de elementos en el formato de una vista, vista materializada, tabla
Calcular valores de filtro para la búsqueda por tema
Buscar por elementos
agregar ítem nuevo
Agregar un nuevo atributo para una entidad
Cambiar el valor de un atributo (cambiar las características de un artículo)
Los cambios en los datos de las cláusulas 8 a 10 se reflejan automáticamente en el almacén de datos independientemente del formato seleccionado en la cláusula 5.
Si alguien siente interés en este tema, sugiero unirse al desarrollo.
Si desea obtener un poco más de experiencia en programación que solo otro HellowWord, también puede proponerle un desafío interesante.
Para quien no lo sepa, EAV es cuando no necesitamos diseñar y crear manualmente una nueva tabla en la base de datos de la aplicación para almacenar información sobre una nueva entidad empresarial, porque ya tenemos tres tablas y esto es suficiente para todo.
. , , , , proof of concept , .
:
PostgreSQL9+ PHP7.4+ ( PHP5, type hitting, )
-
sql
configuration/install-tables-and-roles.sql.example
-
configuration/db_test.php.example
configuration/db_test.php.example
configuration/db_test.php
tests/Integration/AutomatedProcessTest.php
, .
, :) .
AutomatedProcessTest
.
, :
Operator
AllThings\ControlPanel\Operator
Browser
AllThings\ControlPanel\Browser
Schema
AllThings\ControlPanel\Schema
Operator .
Browser .
Schema ( ).
? , : , . .
, , , , . Schema.
Operator
:
1 ( )
public function createBlueprint(
string $code,
string $storageKind = Storable::DIRECT_READING,
string $title = '',
string $description = ''
): IEssence
2 ( )
public function createKind(
string $code,
string $dataType,
string $rangeType,
string $title = '',
string $description = ''
): IAttribute
3
public function attachKind(string $essence, string $kind): Operator
4
public function createItem(
string $essence,
string $code,
string $title = '',
string $description = ''
): Nameable
5 ( )
public function changeContent(
string $thing,
string $attribute,
string $content
)
6 ( )
public function expandItem(
string $thing,
string $attribute,
string $value
): Operator
, , .
, , , Browser.
Browser
1
public function filters(string $code): array
, , DTO , , proof of concept.
2
public function filterData(string $code, $filters = []): array
, .
AllThings\SearchEngine\ContinuousFilter
AllThings\SearchEngine\DiscreteFilter
, , , DTO.
tests/Integration/AutomatedProcessTest.php
.
, . Schema.
Schema
, :
( )
( )
1
public function setup(): Schema
?
, :
Storable::DIRECT_READING
- view
Storable::RAPID_OBTAINMENT
- materialized view
Storable::RAPID_RECORDING
- table
, .
2
public function refresh(?ICrossover $value = null): Schema
, .
ICrossover
.
? .
, ICrossover
, , .
, .
3
public function changeStorage(string $storageKind): Schema
, :
Storable::DIRECT_READING
- view
Storable::RAPID_OBTAINMENT
- materialized view
Storable::RAPID_RECORDING
- table
, .
, . .
, proof of concept, .
. . .
:)
: , , , .
, , proof of concept . , . , , . .
.
En el futuro, probablemente me reuniré y describiré con más detalle el uso de la biblioteca con un ejemplo específico, o escribiré pruebas y mediré el tiempo de ejecución de las operaciones.
Por supuesto, depende de la reacción y elección de la comunidad.
Gracias por la atención.