Hace dos años la gente publicó este vídeo y me quedé con la parte de Vertical Slicing por el simple hecho de que Drupal por su propia arquitectura no es posible hacer Arquitectura Exagonal, o lo que sería lo mismo todo estaría en el mismo dominio a menos que se tuviera que programar elementos que si se salieran totalmente de la API habitual de Drupal.
La cuestión es que la arquitectura de Vertical Slicing si que encaja mucho mejor con Drupal. Yo lo que suelo hacer es que cada tipo de nodo es un Slice, luego si algún otro contenido (taxonomías, usuarios, etc....) necesitan mostrar información con su propia URL también pienso en él como un Slice.
Y es aquí donde llego porque estoy montando una página para una taxonomía que en vez de mostrar la información habitual de la taxonomía esta mostrando más información mediante bloques, y al final.
Y es aquí que he tenido la duda de como llamar a los bloques, mi análisis ha sido, para una persona junior un nombre más redundante le va a ayudar a entender el proyecto, para una persona senior tendrá en cuenta el namespace además del nombre del bloque.
Y con esta duda he preguntado a ChatGP/Gemini/Cloude/Deepsheek por curiosidad a ver que me respondían.
La pregunta a todas ellas ha sido la misma:
El proyecto en el que estamos de drupal 10 estamos montando la arquitectura de los módulos custom usando vertical slicing.
Ahora mismo estamos con un módulo que se llama project_term_area_study,
La clase abstracta se llama AreaOfStudyBaseBlock
Uno de los bloques AreaOfStudyDegreeStandardNameListBlock y el otro bloque AreaOfStudyOthersAreaOfStudyBlock
¿Es una nomenclatura correcta?
Y estas han sido las respuestas:
Gemini:
Sí, la nomenclatura que propones es muy buena y sigue las mejores prácticas para una arquitectura de módulos personalizados con "vertical slicing" en Drupal 10.
Analicemos por qué es una nomenclatura correcta y eficaz:
- Prefijo del Módulo (
project_
):
project_
: Es un prefijo claro y consistente para tu organización o proyecto. Esto evita colisiones de nombres con módulos contrib o de terceros, y hace que sea obvio a qué parte de tu codebase pertenece el módulo.- Nombre del Módulo (
project_term_area_study
):
term_area_study
: Es descriptivo y sigue la lógica de "vertical slicing". Indica que este módulo se enfoca en un concepto o "slice" específico: los términos de taxonomía relacionados con el "área de estudio". Esto es ideal, ya que cada módulo maneja una funcionalidad vertical completa.- Clase Abstracta (
AreaOfStudyBaseBlock
):
AreaOfStudy
: Coincide directamente con el dominio o "slice" de tu módulo. Es claro que esta clase base está relacionada con la funcionalidad central del módulo.BaseBlock
: El sufijoBase
es una convención muy común y excelente para clases abstractas que sirven como base para otras clases.Block
indica claramente que es una clase base para plugins de bloque.- Ubicación:
src/Plugin/Block/AreaOfStudyBaseBlock.php
(asumiendo queproject_term_area_study
es el nombre de tu módulo).- Bloques Concretos:
AreaOfStudyDegreeStandardNameListBlock
:
AreaOfStudy
: Consistente con el dominio del módulo.DegreeStandardNameList
: Claramente describe la función específica de este bloque: una lista de nombres de áreas de estudio estándar para grados. Es descriptivo y específico, lo que es clave para el vertical slicing.Block
: Identifica que es un plugin de bloque.AreaOfStudyOthersAreaOfStudyBlock
:
AreaOfStudy
: Consistente con el dominio.OthersAreaOfStudy
: Describe la función de este bloque, mostrando "otras áreas de estudio". También es específico y claro.Block
: Identifica que es un plugin de bloque.- Ubicación:
src/Plugin/Block/AreaOfStudyDegreeStandardNameListBlock.php
src/Plugin/Block/AreaOfStudyOthersAreaOfStudyBlock.php
Ventajas de esta nomenclatura en una arquitectura de "Vertical Slicing":- Claridad: Cualquiera que vea los nombres de los módulos y las clases puede entender rápidamente su propósito y ámbito.
- Organización: Facilita la navegación del código. Sabes exactamente dónde buscar la lógica relacionada con un "slice" particular.
- Modularidad: Refuerza la idea de que cada "slice" es una unidad funcional independiente, lo que facilita el desarrollo, las pruebas y el mantenimiento.
- Cohesión: Las clases relacionadas con un slice específico están agrupadas, mejorando la cohesión.
- Bajo Acoplamiento: Promueve el bajo acoplamiento entre los diferentes "slices" o funcionalidades. En resumen, tu nomenclatura es excelente y demuestra una comprensión sólida de las prácticas de desarrollo de Drupal y los principios de diseño de software modernos como el "vertical slicing".
Deepsheek:
Análisis de Nomenclatura en Arquitectura Vertical Slicing para Drupal 10
Tu estructura sigue buenos principios de vertical slicing, pero podemos optimizar la nomenclatura para mayor claridad y consistencia. Aquí tienes mi análisis detallado:
Estructura Actual
project_term_area_study/ src/ Plugin/ Block/ AreaOfStudyBaseBlock.php (abstracta) AreaOfStudyDegreeStandardNameListBlock.php AreaOfStudyOthersAreaOfStudyBlock.php
Fortalezas de tu enfoque actual
- Coherencia con el dominio: Usas "AreaOfStudy" que refleja claramente el bounded context
- Diferenciación clara: Los nombres distinguen bien los bloques por función
- Jerarquía visible: La clase base se identifica fácilmente con "BaseBlock" ## Sugerencias de mejora ### 1. Para el módulo:
project_term_area_study
→ Considera:project_area_study
(más corto)project_area_study_blocks
(si solo contiene bloques) ### 2. Para la clase abstracta:AreaOfStudyBaseBlock
está bien, pero alternativas podrían ser:AreaOfStudyBlockBase
(más común en Drupal)AbstractAreaOfStudyBlock
(más explícito) ### 3. Para los bloques concretos: ####AreaOfStudyDegreeStandardNameListBlock
- Propuesta:
DegreeStandardNameListBlock
- Razón: El prefijo "AreaOfStudy" es redundante (ya está en el namespace)
- Alternativa:
DegreeStandardListingBlock
(más corto) ####AreaOfStudyOthersAreaOfStudyBlock
- Problema: Redundancia ("AreaOfStudy" aparece dos veces)
- Propuesta:
RelatedAreasOfStudyBlock
oOtherAreasBlock
- Más claro:
AreaOfStudyPeerListBlock
## Estructura recomendadaproject_area_study/ src/ Plugin/ Block/ AbstractAreaOfStudyBlock.php DegreeStandardListingBlock.php RelatedAreasBlock.php
Buenas prácticas observables
- PascalCase para nombres de clase ✓
- Sufijo Block para plugins de bloque ✓
- Agrupación lógica por funcionalidad ✓ ## Consejo adicional sobre vertical slicing Para mantener una arquitectura limpia en vertical slicing:
- Considera agrupar todos los archivos relacionados (controllers, services, blocks) de cada feature en su propio directorio
- Ejemplo alternativa:
project/ area_study/ blocks/ AbstractBlock.php DegreeListing.php RelatedAreas.php services/ controllers/
¿Qué aspecto te gustaría profundizar más? ¿Prefieres mantener la nomenclatura actual o implementar algunos de estos cambios?
Claude:
Analizando la nomenclatura que estás usando para tu módulo de Drupal 10 con vertical slicing, encuentro algunos aspectos que podrían mejorarse:
Análisis de la nomenclatura actual:
Puntos positivos:
- El prefijo
project_
mantiene consistencia con tu namespace del proyectoterm_area_study
indica claramente el dominio funcional- La clase abstracta
AreaOfStudyBaseBlock
es clara y descriptiva Áreas de mejora:- Redundancia en nombres de bloques:
AreaOfStudyDegreeStandardNameListBlock
tiene redundancia con "AreaOfStudy" al inicioAreaOfStudyOthersAreaOfStudyBlock
repite "AreaOfStudy" dos veces- Longitud excesiva:
- Los nombres son muy largos, lo que puede dificultar el mantenimiento ## Sugerencia de nomenclatura mejorada:
Módulo: project_term_area_study Clase abstracta: AreaOfStudyBaseBlock ✓ (está bien) Bloques: - DegreeStandardNameListBlock - OtherAreasListBlock
O si prefieres mantener más contexto:
- DegreeNameListBlock - RelatedAreasBlock
Justificación:
- Al estar dentro del módulo
project_term_area_study
, el contexto "AreaOfStudy" ya está implícito- Los nombres son más concisos pero mantienen claridad semántica
- Siguen las convenciones de naming de Drupal
- Son más fáciles de leer y mantener ¿Te parece mejor esta aproximación o prefieres mantener más contexto explícito en los nombres de las clases?
Chatgpt:
Sí, en líneas generales tu nomenclatura es bastante clara, coherente y alineada con las buenas prácticas de Drupal 10 y la arquitectura vertical slice. Sin embargo, puedo ofrecerte algunas observaciones para hacerla aún más robusta y sostenible:
✅ Cosas que estás haciendo bien
Elemento Comentario project_term_area_study
👍 El nombre del módulo es claro, contextualizado y específico. AreaOfStudyBaseBlock
👍 Nombre adecuado para una clase abstracta base de bloques relacionados. AreaOfStudyDegreeStandardNameListBlock
👍 Descriptivo y sigue el patrón [Dominio][Propósito][Sufijo]
.AreaOfStudyOthersAreaOfStudyBlock
✅ Aunque es largo, también sigue una estructura clara.
🧠 Sugerencias opcionales para más claridad o consistencia
- Evitar repeticiones semánticas innecesarias En
AreaOfStudyOthersAreaOfStudyBlock
, la repetición de "AreaOfStudy" puede causar ruido.
- 🔁 Opción alternativa:
AreaOfStudyRelatedAreasBlock
oOtherAreasOfStudyBlock
.- Si el contexto ya está claro por el namespace y base class, podrías simplificar sin perder significado.
- Patrones orientados a propósito o función Si los bloques son listas, menús, selectores o tabs, puede ser útil que el sufijo lo aclare:
AreaOfStudyDegreeStandardNameListBlock
- ✅ está bien.
- Alternativas (si aplica):
AreaOfStudyStandardNamesBlock
,StandardNamesListBlock
.- Consistencia con el namespace del módulo Asegúrate de que el namespace de las clases refleje bien el contexto vertical. Por ejemplo:
```php
namespace Drupal\project_term_area_study\Plugin\Block;Y si usas servicios comunes: ```php namespace Drupal\project_term_area_study\Service;
📦 Bonus: carpeta y estructura vertical slice recomendada
project_term_area_study/ ├── Plugin/ │ └── Block/ │ ├── AreaOfStudyBaseBlock.php │ ├── AreaOfStudyDegreeStandardNameListBlock.php │ └── AreaOfStudyRelatedAreasBlock.php ├── templates/ │ └── block--area-of-study-degree-standard-name-list.html.twig ├── css/ (si aplica) ├── js/ (si aplica) ├── project_term_area_study.module ├── project_term_area_study.services.yml └── README.md
✅ Veredicto final
- Tu estructura es correcta y profesional.
- Solo podrías considerar simplificar algunos nombres para legibilidad si ves que se vuelven redundantes.
- La orientación vertical está clara y bien aplicada al dominio "area of study". Si quieres, puedo ayudarte a revisar o proponer convenciones para otros módulos verticales (
project_term_degree_type
, etc.) para mantener consistencia global.
Conclusión
Me ha asombrado lo tajante que ha sido Gemini dado que las otras tres han indicado que estaba bien pero se podía mejorar reduciendo la redundancia en los nombres de los bloques y de la clas abstracta.
Por otro lado el contexto del proyecto (que es algo que no he definido en el prompt) también es importante, un equipo que conozca mejor el proyecto, veterano no necesitará nombres tan redundantes mientras que un equipo con menos experiencia en programación, en la arquitectura Vercital Slicing, en el proyecto (al final los nombres de las clases deberían ir determinadas por el negocio y por el Slice.
Top comments (0)