Desde el punto de vista de como es que los Helpers se meten y tocan el paradigma, resulta muy interesante.
Es un ejercicio que yo tengo pendiente en estudio, y que lo que conozco es por alguna leída en algún que otro lado. No he tocado hasta el momento el tema, y desconozco que tanto soporte tiene Lazarus sobre Helpers.
Yo he visto unos cuantos ejemplos tuyos en CD y me parece interesante el concepto para estudio y análisis. Pero me pregunto hasta que punto esa navaja suiza nos ayuda, y cuando nos cortamos por querer sacar el destornillador que está al lado de la tijera.
El uso en los enumativos confieso que me atrae. La verdad que hacer un Enum.ToString tiene su encanto y más de una vez me quedado pensando porqué no...
Yo también tengo en algunos trabajos interfaces. Las uso, y hasta se debatió el tema. Aunque no me gusta enamorarme demasiado... Lo que no me convence mucho es que nos veamos inclinados y casi obligados a tener que heredar de TInterfacedObject. Podemos evitarnos esa herencia, pero de hacerlo deberá ser nuestra responsabilidad implementar el sistema de conteo de referencia, que justamente es lo que ya hace TInterfacedObject.
Yo soy de la idea de tener mi propios árboles de herencia y de clases lo más limpia posible de clases externas. Y aún habiendo usado interfaces, sigo sintiendo algo de "ruido" ese TInterfacedObject metiéndose en algunas mis ramas.
Si el compilador se encargara de hacer el trabajo del conteo de referencia sin necesidad de haber metido esa clase y hacerlo de forma transparente de forma automática para mi sería estupendo. Algo como "Ha, está declarando que tal clase usa una interface. Entonces aquí debemos hacer conteo de referencias".
El principio abierto-cerrado, que quizá debiera llamarse Principio Abierto, Protegido, Cerrrado es extensible. Puede estirarse y contraerse según la naturaleza del análisis que llevemos. En la medida que vamos explorando las ramas del árbol de herencia de nuestras clases, vamos notando como varía el "porcentaje" o relación entre lo Público y lo Privado.
Pero así también su nombre lo dice: aporta puntos escenciales, básicos, y primarios que uno debe seguir si uno quiere que sus clases sean fáciles de usar y rehusar. Fíjate que de éste Principio es que luego se desprende los conceptos de Herencia, Acoplamiento y Cohesión.
Por supuesto que hay formas de llegar a esos puntos, y es justamente como con estos 6 conceptos dieron origen a los GRAPS, luego con éstos surgen los GoF y con todo esto ya aparecieron los demás patrones que se fueron especializando.
OJO: ten presente que Template , Decorator, Adapter, Interceptor que parecieran tener en escencia un "denominador común" no están pensados para lo mismo.
Cada patrón toma el principio, y "acomoda" los porcentajes de cada cosa, que junto con Bajo Acoplamiento (GRAPS), Alta Cohesión (GRAPS) y en menor medida Variaciones Protegidas (GRAPS) propone un diseño molde para una necesidad puntual, para un problema en un contexto puntual. Ninguno viola el Principio Abierto/Cerrado, simplemente proponen un estado de equilibrio adecuado para ese caso.
El problema está en quedarnos que nuestros diseños son estáticos y no volveremos a tocarlos nunca más. Ahí es cuando aparecen los problemas... tenemos clases ya hechas, necesitamos redefinir partes, ampliar, ¡hasta quitar! Pero claro: tocar algo puede ser un parto... y la máxima de "si lo anda no lo toques" nos dice que es mejor no hacerlo. Los Patrones tienen sus límites, uno se siente tentado a recurrir vías alternativas... Los Helpers pueden ayudar.
Pero no hay que dejarnos llevar demasiado porque es muy fácil luego en que tenemos que volver a meter mano... vuelve a crecer... y de nuevo la casa está en desorden.
Es muy fácil caer en ese ciclo y sentirnos que nunca llegamos a sentirnos conformes y que nos estamos perdiendo de algo... De igual manera es también fácil caer en el otro lado: Nos fuimos por los cerros de Úbeda y nos mandamos un diseño que al final sobredimensionamos la cosa.
¡Lo dice alguien que se mueve por todos los extremos que se encuentren!
Y después me pregunto porque es que existe la Reingeniería

Saludos,