Em qualquer site moderno (e em sites mais antigos) existem estruturas aninhadas, uma hierarquia de objetos, árvores. O exemplo mais comum é um diretório.
Hoje muitos projetos estão sendo desenvolvidos em Javascript. Como armazenar estruturas em árvore neste caso? É sobre isso que eu gostaria de falar.
Agora estou diante da tarefa de traçar uma estrutura hierárquica do catálogo com base nos parâmetros do produto.
Existem vários algoritmos para armazenar árvores e exemplos de tais algoritmos são Lista de Adjacência, Caminho Matherializado, Conjunto Aninhado e Tabela de Fechamento.
Se você puder aconselhar mais alguma coisa, ficarei feliz em ouvir e aprender.
Ao escrever extensões para Joomla, usei muito o conjunto aninhado. Foi neste CMS que conheci este modelo. Mas agora a pilha mudou e agora é Javascript. Os hábitos permaneceram, e os sites em Joomla também. É necessário transferir dados para novos serviços e projetos.
Há muitas informações sobre conjuntos aninhados na Internet e você sempre pode encontrar se quiser, mas, no entanto, devo dizer algumas palavras sobre este modelo de dados.
O ponto do conjunto aninhado é que cada nó na hierarquia tem uma chave esquerda e um par de chaves direita. Dependendo de seus valores, a árvore é percorrida. As qualidades positivas do algoritmo, em minha opinião, são a velocidade da amostragem de dados. Não há recursão neste algoritmo. Ao mesmo tempo, para alterar a estrutura da árvore, adicionar, excluir e transferir nós, é necessário recalcular todas as chaves.
Para usar dados do conjunto aninhado em projetos Javascript, você precisa de um módulo que possa trabalhar com este modelo.
Pesquisando no npm, encontrei módulos cuja funcionalidade era buscar dados da estrutura de conjuntos aninhados, ou seja, todas as chaves já devem ter sido afixadas. Havia necessidade de editar a estrutura, mas não encontrei essa oportunidade.
Outro problema é que, na maioria dos casos, os dados e a estrutura em árvore são armazenados na mesma entidade, mas na minha opinião é muito mais eficiente separar essas coisas.
Assim, uma única e mesma categoria (essas categorias) pode estar em pais diferentes. Isso permitirá que os usuários encontrem o que procuram mais rapidamente com uma hierarquia bem elaborada.
Embora do ponto de vista de SEO, existam duas páginas com URLs diferentes e o mesmo conteúdo, mas isso pode ser resolvido por links canônicos.
Se isso não estiver correto, peço aos especialistas em SEO que me corrijam.
No final, decidi escrever um módulo e publicá-lo no npmjs.com.
Se for útil para alguém, ficarei muito feliz.
Agora continuo trabalhando nisso e planejando implementar a transferência do nó através da árvore.
Aqui está um link para o npm, de onde você pode baixar o pacote .
Aqui está um link para o github onde você pode baixar as fontes .
A documentação está lá e lá.
Quaisquer comentários seriam bem vindos.
Desejamos a você bons projetos e tarefas interessantes.