Um dia, na segunda-feira, ocorreu-me o pensamento - “mas eu entro no novo núcleo” (relativamente novo, mas mais sobre isso mais tarde). O pensamento não apareceu do nada, mas os pré-requisitos para ele foram:
- tarefa de teste, de um dos principais estúdios da Mãe Rússia (em que a abreviação ORM apareceu),
- a ideia de escrever um módulo simples,
- o desejo de um dos clientes, no futuro, de fazer uma loja.
Então, quero compartilhar a história desta campanha na densa floresta tropical.
Uma breve introdução
Não me considero um guru da programação nem no Bitrix nem em qualquer outra coisa. O artigo reflete minhas observações, experiências e pensamentos. Críticas construtivas são bem-vindas, bem como disputas bem fundamentadas (como Sócrates legou). Os antecedentes destacaram três tópicos amplos que não serão abordados. Como seu principal aspecto - programação trabalhando com dados na estrutura do kernel do Bitrix D7 (ORM), embora seja um fator fundamental para escrevê-lo.
Na piscina com a cabeça
O aspecto de trabalhar com dados é fundamental e sem eles, em lugar algum, pensei, e decidi ir imediatamente Google examine a documentação, esperando uma descrição detalhada e a disponibilidade de exemplos, e, claro, os cursos. Com a mão leve e a esperança de algo saboroso e novo. Não vendo motivo para preocupação, fui acampar. As nuvens estavam se acumulando ...
O que você precisa saber sobre a selva ou as regras de sobrevivência
Regra número 1 - Cuidado com agentes de viagem sem escrúpulos
Decidi começar com os cursos, tendo visto os itens de menu que me interessam (módulo e ORM), pensei em vários textos e inserções de código - tudo será rápido, vamos lá ... Então, meu próximo erro foi cometido. De fato, aconteceu:
os cursos são mal estruturados - a ordem do estudo não é pensada; você pode encontrar a ausência de qualquer conexão entre os capítulos;
permalinks - Não estou falando de links para documentação, mas links para excesso de pilha e outros capítulos (no final do curso, entre os quais há um mar de informações) são muito perturbadores, isso não é sério;
água e palavras comuns - você pode verificar o número de caracteres;
O tipo de letra em negrito é usado para destacar palavras importantes, termos, frases e frases. Ou seja, o que é especialmente importante no contexto da funcionalidade descrita:
a interpretação de conceitos à sua maneira ainda é um tópico antigo (API - Component - Template aka MVC);
inserções da documentação - copiar e colar peças inteiras, às vezes apenas para preencher um local;
citações de desenvolvedores - simplesmente não há palavras -_-, por que esse alarido;
capítulos desatualizados - apenas parece impossível excluí-los; eles reforçam a confusão às vezes.
Relações entre entidade (obsoleta) ou configurações de desconto do produto
Obviamente, a vantagem é que, em princípio, existem cursos. Provavelmente uma vantagem, porque escrever algo apenas com base ainda é essa tarefa. Oh bem. Depois de revisar os cursos, principalmente inserindo o código, decidi tentar, mas ainda há documentação. Começou a chuviscar ...
Regra número 2 - Cuidado com os matagais densos
Tendo feito algumas amostras simples usando fita adesiva documentação, decidi tentar obter um desconto nas mercadorias. E então a chuva começou. Núcleo de Pseudon e ovos de páscoa:
- dois módulos para descontos - sim, sim, pensei durante muito tempo - por que adicionei o desconto, ele está no produto, mas não consigo obtê-lo através da classe de entidade
DiscountTable
. Eu tive que escrever em apoio. A resposta foi esta:
DiscountTable - descontos em mercadorias, pertencem ao módulo Trade Catalog, a funcionalidade está desatualizada e não é usada. Recomendamos o uso das regras do carrinho.
- falta de documentação - mas você pode obter um link para a documentação - perguntou
eu Esperando que de 2013 a 2015 ela aparecesse. A resposta é:
A documentação para criar as Regras da cesta ainda está em desenvolvimento.
- os cenários de trabalho não foram pensados - minha próxima pergunta era lógica - como posso obter um desconto? À qual recebi uma resposta encantadora e encerrei a comunicação com suporte:
Para obter as regras de cesta que se aplicam ao produto, você precisará criar um objeto de cesta e executar um cálculo para o produto.
- funcionalidade incompleta - alguns métodos de classe podem retornar mensagens de erro como:
Para adicionar descontos de produtos, use a chamada CCatalogDiscount :: Add ()
- arquitetura complexa - para criar uma seleção complexa de várias tabelas, objetos de relacionamento especiais são usados, que devem ser adicionados ao
SomeTable::getMap()
. Isso nem sempre é fácil (algumas classes de descrição da entidade são geradas automaticamente). Além disso, entristece o fato de que é impossível obter uma amostra complexa simplesmente no formato de uma matriz multidimensional. E a construção de relações pode levar mais de uma dúzia de linhas. - labirintos de funcionalidade - no D7 existem lugares que são constantemente reescritos e ao mesmo tempo todas as variações são suportadas. Os mesmos objetos de relacionamento podem ser implementados através de:
Entity\ReferenceField
|| Bitrix\Main\ORM\Fields\Relations
|| runtime
(mediante solicitação)
Tudo isso é muito deprimente e deixa você indignado, para dizer o mínimo. E além disso, existem outros inconvenientes.
Regra 3 - Malditos Insetos
O Bitrix tem uma série de características estranhas e intrusivas que você esquece constantemente, mas novamente piscam diante dos seus olhos:
- regras de nomeação de classe e arquivo - sua própria empilhadeira que reduz tudo para minúsculas, diferentes nomes de classe e arquivo;
- maneiras de conectar soluções de terceiros - por exemplo, compositor ou vue
(que está simplesmente contido na biblioteca BX, sem motivos óbvios e complementos) ;
UPD 1. Alteração ao VueInvestigou a questão.
De fato, o BX reivindica os seguintes benefícios do wrapper Vue:
- Suporte ao multilinguismo (Bitrix Framework) - você pode adicionar algumas funções do BX js ao componente Vue, com a reatividade desativada para eles;
- Barramento de Eventos Global - para comunicação entre aplicativos (se houver vários);
- Herança de componentes - açúcar sintático, simples se estende;
- Customização de componentes - açúcar sintático, algo como uma substituição (como / bitrix / components / e / local / components /);
- Uma única versão da biblioteca (dentro da estrutura do site) - é lógico, eu não pensei imediatamente (obrigado k0rinf ).
- suporte para código antigo - um monte de classes desnecessárias e redundantes e confusão constante;
- componentes esquecidos - somente os componentes do módulo iblock foram atualizados;
- modelos de componentes - notórios e conhecidos por todos, com a lógica de negócios pronta;
- lógica implícita e problemas com a personalização - após alterar o script do pedido, é possível detectar um erro sutil e problemas com os módulos;
- estática onipresente - você começa a pensar que isso é normal;
- painel de administração controverso - às vezes não é conveniente e não é adaptável, mas para desenvolver módulos para ele ... mmm;
Ninharias, mas elas sempre estão próximas.
Regra número 4 - Estranhos e nativos são perigosos
O Bitrix tem mais um benefício (não) - uma grande comunidade. Você pode encontrar qualquer informação, mas sua correção e relevância serão uma grande questão. Freqüentemente, você só pode aprender a criar muletas ou usar um código antigo que já tenha uma substituição adequada. Mas também existem messias que podem mostrar o caminho para o seu rebanho. Um deles disse:
Para trabalhar com infoblocks, use o kernel antigo, que funciona bem e de forma estável.
Eu acho que vou fazer isso.
Regra número 5 - Predadores em algum lugar próximo
Marqueteiros elogiando um produto. Artigos comparativos em que o Bitrix é o líder indiscutível. Um monte o chão programadores, como eu sou. Muitos sites que pedem para terminar seu tormento. Também o flagelo da comunidade.
Regra # 6 - Tenha água
A cada novo problema e a falta de uma solução adequada, a moralidade cai e você pula um movimento pensamentos vêm, mas é tudo o que é necessário para esse desperdício de tempo. A estrutura, a conteinerização e a integração contínua podem ser melhores, e não essas meias medidas. Nesses casos, apenas uma decisão de força de vontade bem, demanda salva a situação.
Regra número 7 - Chuva tropical é difícil
E termina um fato desagradável: tentativas de programação, busca e estruturação de informações, comunicação com especialistas e retorno ao passado, aprendendo algo novo, leva muito tempo, na ausência de um resultado inteligível - deprime constantemente.
Civilização aka conclusões
E aqui você sai da selva. Gasto, mas vivo. Quebrado, mas ainda não quebrado. Seus olhos cansados estão abertos e eles vêem tudo. Um caminho em que realmente vale a pena se deslocar e trilhas onde são necessários cuidados especiais.
Bitrix é um produto controverso, dizendo que ele geralmente desenvolvendo desenvolve incorretamente - não vale a pena. Mas dizer que ele é o melhor sem perceber as falhas é acreditar cegamente.
Para mim, eu decidi, Bitrix - não. Uma rejeição completa, é claro, não funcionará, mas será desenvolvida em um produto no qual o suporte à funcionalidade básica e à documentação inteligível não apareça há 5 anos, para o novo e anunciado kernel - não vejo razão. É melhor escrever uma solução simples que será usada de projeto em projeto no núcleo antigo e aprender uma nova.
O velho Frankenstein, é claro, é digno da vida, pelo menos algumas idéias dignas nele. Afinal, não estamos na Idade Média para queimar na fogueira todos aqueles que pensam de maneira diferente. Ou ainda vale o que você pensa?
PS O artigo é escrito às pressas, se você não conseguir construir uma cadeia consistente de pensamentos.