¿Por qué, Bitrix? O el mundo de las hadas 1C

Un día, el lunes, se me ocurrió la idea: "pero cavo en el nuevo núcleo" (relativamente nuevo, pero más sobre eso más adelante). El pensamiento no apareció de la nada, pero los requisitos previos para ello fueron:


  • tarea de prueba, de uno de los grandes estudios de Mother Russia (en el que apareció la abreviatura ORM),
  • la idea de escribir un módulo simple
  • El deseo de uno de los clientes, en el futuro, de hacer una tienda.

Entonces, quiero compartir la historia de esta campaña en la densa selva tropical.


Una breve introduccion


No me considero un gurú de la programación ni en Bitrix ni en ninguna otra cosa. El artículo refleja mis observaciones, experiencias y pensamientos. La crítica constructiva es bienvenida, así como las disputas bien razonadas (como Sócrates legó). Los antecedentes han resaltado tres temas generales que no se abordarán. Como su aspecto principal programacion trabajando con datos dentro del marco del kernel Bitrix D7 (ORM), aunque es un factor fundamental para escribirlo.


En la piscina con la cabeza


El aspecto de trabajar con datos es fundamental y sin él, en ninguna parte, pensé, y decidí ir de inmediato. google mire a través de la documentación, esperando una descripción detallada y la disponibilidad de ejemplos, y por supuesto mire los cursos. Con una mano ligera y la esperanza de algo sabroso y nuevo. Al no ver motivo de preocupación, fui a acampar. Las nubes se estaban reuniendo ...


Lo que necesitas saber sobre la jungla o las reglas de supervivencia


Regla número 1 - Cuidado con las agencias de viajes sin escrúpulos


Decidí comenzar con los cursos, ver los elementos del menú que me interesan (módulo y ORM), pensé en un montón de textos e inserciones de código: todo será rápido, vámonos ... Así que cometí mi siguiente error. De hecho, resultó:


  • los cursos están mal estructurados : el orden de estudio no está pensado, puede encontrar la ausencia de una conexión entre los capítulos;


  • enlaces permanentes : no estoy hablando de referencias a la documentación, pero los enlaces al desbordamiento de pila y otros capítulos (al final del curso, entre los cuales hay un mar de información) son muy molestos, esto no es serio;


  • agua y palabras comunes : puede verificar la cantidad de caracteres;


    La tipografía en negrita se utiliza para resaltar palabras, términos, frases y oraciones importantes. Es decir, lo que es especialmente importante en el contexto de la funcionalidad descrita:

  • la interpretación de los conceptos a su manera sigue siendo un tema antiguo (API - Componente - Plantilla, también conocido como MVC);


  • inserciones de la documentación : copiar y pegar piezas enteras, a veces solo para llenar un lugar;


  • citas de desarrolladores : simplemente no hay palabras -_-, ¿por qué es esta fanfarronada?


  • capítulos obsoletos : parece imposible eliminarlos; a veces refuerzan la confusión.


    Relaciones entre la entidad (obsoleta) o la configuración de descuento del producto


Por supuesto, la ventaja es que, en principio, hay cursos. Probablemente una ventaja, porque escribir algo solo sobre su base sigue siendo esa tarea. Oh bien Después de revisar los cursos, en su mayoría insertando el código, decidí probar, pero todavía hay documentación. Comenzó a lloviznar ...


Regla número 2 - Cuidado con los matorrales densos


Habiendo hecho un par de muestras simples usando cinta adhesiva documentación, decidí tratar de obtener un descuento en los productos. Y entonces comenzó la lluvia. Pseudon core y huevos de pascua:


  • dos módulos para descuentos , sí, sí, pensé durante mucho tiempo, por qué agregué el descuento, está en el producto, pero no puedo obtenerlo a través de la clase de entidad DiscountTable . Tuve que escribir en apoyo. La respuesta fue esta:

DiscountTable: descuentos en productos, pertenecen al módulo Trade Catalog, la funcionalidad está desactualizada y no se utiliza. Recomendamos usar las Reglas del carrito.

  • falta de documentación , pero puede obtener un enlace a la documentación, preguntó
    yo Esperando que desde 2013-2015 ella apareciera. La respuesta es:

La documentación para crear las reglas de la cesta aún está en desarrollo.

  • los escenarios de trabajo no fueron pensados - mi siguiente pregunta fue lógica - ¿Cómo puedo obtener un descuento? A lo que recibí una respuesta encantadora y terminé la comunicación con apoyo:

Para obtener las reglas de la cesta que se aplican al producto, deberá crear un objeto de cesta y realizar un cálculo para el producto.

  • funcionalidad incompleta : algunos métodos de clase pueden devolver mensajes de error como:

Para agregar descuentos de productos, use la llamada CCatalogDiscount :: Add ()

  • arquitectura compleja : para crear una selección compleja de varias tablas, se utilizan objetos de relación especiales, que deben agregarse al SomeTable::getMap() . Esto no siempre es fácil (algunas clases de descripción de entidad se generan automáticamente). Además, entristece el hecho de que es imposible obtener una muestra compleja simplemente en el formato de una matriz multidimensional. Y la construcción de relaciones puede tomar más de una docena de líneas.
  • laberintos de funcionalidad : en D7 hay lugares que se reescriben constantemente y, al mismo tiempo, se admiten todas las variaciones. Los mismos objetos de relación se pueden implementar a través de: Entity\ReferenceField || Bitrix\Main\ORM\Fields\Relations || runtime (a pedido)

Todo esto es muy deprimente y te indigna, por decir lo menos. Y además de esto, hay otros inconvenientes.


Regla 3 - Malditos insectos


Bitrix tiene una serie de características extrañas e intrusivas de las que te olvidas constantemente, pero que vuelven a aparecer ante tus ojos:


  • reglas de denominación de clases y archivos : su propio montacargas que reduce todo a minúsculas, diferentes clases y nombres de archivos;
  • formas de conectar soluciones de terceros , por ejemplo, compositor o vue (que simplemente está contenido en la biblioteca BX sin razones obvias y complementos) ;

UPD 1. Enmienda para Vue

Profundizado en la pregunta.
De hecho, BX afirma los siguientes beneficios del envoltorio Vue:


  1. Soporte para multilingüismo (Marco Bitrix) : puede agregar algunas funciones de BX js al componente Vue, con la reactividad desactivada para ellos;
  2. Bus de eventos globales : para la comunicación entre aplicaciones (si hay varias);
  3. Herencia de componentes : azúcar sintáctico, extensiones simples;
  4. Personalización de componentes : azúcar sintáctico, algo así como una sustitución (como / bitrix / components / y / local / components /);
  5. Una única versión de la biblioteca (dentro del marco del sitio) : es lógico, no pensé de inmediato (gracias k0rinf ).

  • soporte para código antiguo : un montón de clases redundantes e innecesarias y confusión constante;
  • componentes olvidados : solo se actualizaron los componentes del módulo iblock;
  • plantillas de componentes : notorias y conocidas por todos, con la lógica empresarial lista;
  • lógica implícita y problemas con la personalización : después de cambiar el script de orden, puede detectar un error sutil y problemas con los módulos;
  • estática omnipresente : comienzas a pensar que esto es normal;
  • controvertido panel de administración : a veces no es conveniente ni adaptable, pero para desarrollar módulos para él ... mmm;

Bagatelas, pero siempre están cerca.


Regla número 4: los extraños y los nativos son peligrosos


Bitrix tiene un beneficio más (no): una gran comunidad. Puede encontrar cualquier información, pero su corrección y relevancia será una gran pregunta. A menudo, solo puede aprender a crear muletas o usar un código antiguo que ya tiene un reemplazo adecuado. Pero también hay mesías que pueden mostrar el camino a su rebaño. Uno de estos dijo:


Para trabajar con bloques de información, use el núcleo antiguo, que funciona bien y de manera estable.

Creo que lo haré.


Regla número 5 - Depredadores en algún lugar cercano


Comercializadores alabando un producto. Artículos comparativos donde Bitrix es el líder indiscutible. Un montón el piso programadores, como soy yo. Muchos sitios que piden terminar con su tormento. También el flagelo de la comunidad.


Regla # 6 - Tener agua


Con cada nuevo problema y la falta de una solución adecuada, la moral cae y te saltas un movimiento vienen los pensamientos, pero es todo lo que se necesita para esta pérdida de tiempo. El marco, la contenedorización y la integración continua pueden ser mejores, en lugar de estas medias medidas. En tales casos, solo una decisión decidida bueno, demanda salva la situación


Regla número 7 - La lluvia tropical es dura


Y termina un hecho desagradable, para los intentos de programar, buscar y estructurar información, comunicarse con expertos y volver al pasado, aprender algo nuevo, lleva mucho tiempo, en ausencia de un resultado inteligible, es deprimente constantemente.


Civilización aka conclusiones


Y aquí sales de la jungla. En mal estado pero vivo. Roto pero aún no roto. Tus ojos cansados ​​están abiertos y lo ven todo. Un camino donde realmente vale la pena moverse y senderos donde se necesita un cuidado especial.


Bitrix es un producto controvertido, diciendo que él generalmente en desarrollo se desarrolla incorrectamente, no vale la pena. Pero decir que él es el mejor sin darse cuenta de los defectos es creer ciegamente.


Por mi parte, decidí, Bitrix, no. Una falla completa, por supuesto, no funcionará, pero desarrollar un producto en el que durante 5 años no haya habido soporte para la funcionalidad básica y la documentación inteligible para el kernel nuevo y anunciado, no veo ninguna razón. Es mejor escribir una solución simple que se utilizará de un proyecto a otro en el núcleo antiguo y aprender una nueva.


El viejo Frankenstein, por supuesto, es digno de vida, al menos un par de ideas valiosas. Después de todo, no estamos en la Edad Media para quemar en la hoguera a todos los que piensan de manera diferente. ¿O todavía vale lo que piensas?


PD: El artículo está escrito a toda prisa, si no puedes construir una cadena de pensamientos consistente.

Source: https://habr.com/ru/post/473672/


All Articles