Catálogo ideal, biblioteca básica

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:





  1. Crear entidad





  2. Crear atributo





  3. Establecer atributos específicos para una entidad





  4. Establecer valor para atributos (crear artículo)





  5. Forme un repositorio de elementos en el formato de una vista, vista materializada, tabla





  6. Calcular valores de filtro para la búsqueda por tema





  7. Buscar por elementos





  8. agregar ítem nuevo





  9. Agregar un nuevo atributo para una entidad





  10. 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 , .





:





  1. ,





  2. ,





  3. ,





PostgreSQL9+ PHP7.4+ ( PHP5, type hitting, )





  1. storage-for-all-things





  2. sql configuration/install-tables-and-roles.sql.example







  3. - configuration/db_test.php.example







  4. configuration/db_test.php.example



    configuration/db_test.php







  5. tests/Integration/AutomatedProcessTest.php







, .





, :) .





AutomatedProcessTest



.





, :





  1. Operator AllThings\ControlPanel\Operator







  2. Browser AllThings\ControlPanel\Browser







  3. 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. ( )





  2. ( )





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.








All Articles