Exemplos de código de modo de valor de atributo completo (modo EAV) do modo de design PHP (35)

O modo EAV Entidade - atributo - valor pode facilitar a implementação do modelo EAV pelo PHP.

objetivo

Entidade-atributo-valor EAV é um modelo de dados que descreve os atributos (atributos, parâmetros) de entidades. Ele pode ser usado para descrever seu potencial enorme, mas na verdade, o número de entidades que serão aplicadas a uma determinada entidade é relativo Menos.

Em matemática, esse padrão é chamado de matriz esparsa.

EAV também é conhecido como modelo de valor de atributo do objeto, modelo de banco de dados vertical e arquitetura aberta.

Gráficos UML

★ Comunidade oficial de intercâmbio de aprendizagem avançada "click" de gerenciamento para organizar alguns materiais, a BAT e outras empresas de primeira linha têm sistemas de conhecimento avançados (materiais de aprendizagem relevantes e perguntas de entrevista por escrito) e não se limitam a: arquitetura distribuída, alta escalabilidade, alta Desempenho, alta simultaneidade, ajuste de desempenho do servidor, TP6, laravel, YII2, Redis, Swoole, Swoft, Kafka, otimização Mysql, scripts de shell, Docker, microsserviços, Nginx e outros pontos de conhecimento, produtos secos avançados avançados

Código

  • Entity.php

<?php

namespace DesignPatterns\More\EAV;

class Entity
{
    /**
     * @var \SplObjectStorage
     */
    private $values;

    /**
     * @var string
     */
    private $name;

    /**
     * @param string $name
     * @param Value[] $values
     */
    public function __construct(string $name, $values)
    {
        $this->values = new \SplObjectStorage();
        $this->name = $name;

        foreach ($values as $value) {
            $this->values->attach($value);
        }
    }

    public function __toString(): string
    {
        $text = [$this->name];

        foreach ($this->values as $value) {
            $text[] = (string) $value;
        }

        return join(', ', $text);
    }
}
  • Attribute.php
Value.php
<?php

namespace DesignPatterns\More\EAV;

class Attribute
{
    /**
     * @var \SplObjectStorage
     */
    private $values;

    /**
     * @var string
     */
    private $name;

    public function __construct(string $name)
    {
        $this->values = new \SplObjectStorage();
        $this->name = $name;
    }

    public function addValue(Value $value)
    {
        $this->values->attach($value);
    }

    /**
     * @return \SplObjectStorage
     */
    public function getValues(): \SplObjectStorage
    {
        return $this->values;
    }

    public function __toString(): string
    {
        return $this->name;
    }
}
  • Value.php

<?php

namespace DesignPatterns\More\EAV;

class Value
{
    /**
     * @var Attribute
     */
    private $attribute;

    /**
     * @var string
     */
    private $name;

    public function __construct(Attribute $attribute, string $name)
    {
        $this->name = $name;
        $this->attribute = $attribute;

        $attribute->addValue($this);
    }

    public function __toString(): string
    {
        return sprintf('%s: %s', $this->attribute, $this->name);
    }
}

teste

  • Testes / EAVTest.php

<?php

namespace DesignPatterns\More\EAV\Tests;

use DesignPatterns\More\EAV\Attribute;
use DesignPatterns\More\EAV\Entity;
use DesignPatterns\More\EAV\Value;
use PHPUnit\Framework\TestCase;

class EAVTest extends TestCase
{
    public function testCanAddAttributeToEntity()
    {
        $colorAttribute = new Attribute('color');
        $colorSilver = new Value($colorAttribute, 'silver');
        $colorBlack = new Value($colorAttribute, 'black');

        $memoryAttribute = new Attribute('memory');
        $memory8Gb = new Value($memoryAttribute, '8GB');

        $entity = new Entity('MacBook Pro', [$colorSilver, $colorBlack, $memory8Gb]);

        $this->assertEquals('MacBook Pro, color: silver, color: black, memory: 8GB', (string) $entity);
    }
}

O caminho de crescimento do arquiteto de Internet PHP * O guia definitivo para "padrões de design"

PHP Internet Architect 50K Growth Guide + Industry Problem Solving Guide (Continuous Update)

Entrevista com 10 empresas, obtenha 9 ofertas, perguntas da entrevista PHP em 2020

★ Se você gosta do meu artigo e deseja se comunicar e aprender com desenvolvedores mais experientes, obtenha mais consultoria técnica e orientação relacionada a entrevistas com grandes empresas, bem-vindo ao nosso grupo, senha: phpzh

O último tutorial avançado de PHP em 2020, série completa!

Se o conteúdo for bom, espero que todos apoiem e incentivem a dar um like / like, e sejam bem-vindos a se comunicarem juntos; além disso, se você tiver alguma dúvida, pode sugerir o que deseja ver nos comentários.

Acho que você gosta

Origin blog.csdn.net/weixin_43814458/article/details/108732773
Recomendado
Clasificación