coldfusion cfc railo cfml

Extendiendo ColdFusion con UDFs de aplicación



cfc railo (1)

Si realmente le preocupa la estructura y mantiene las cosas independientes, ni siquiera comience con singletons o herencia que amplíen la funcionalidad. En su lugar, amplíe la funcionalidad base dentro de ColdFusion agregando su biblioteca no componente en tiempo de ejecución / solicitud, consulte la Guía del desarrollador de ColdFusion . Esto no resuelve mágicamente todos los problemas, pero al menos esa es la forma correcta de implementar funciones de propósito general.

He estado explorando diferentes métodos de estructuración de mis aplicaciones ColdFusion y estoy buscando algunas opiniones sobre la mejor manera de proporcionar UDF de aplicación.

Para cada una de mis aplicaciones, generalmente uso un montón de funciones adicionales que realmente no pertenecen a ningún objeto en particular. Cosas de manipulación de datos en su mayoría. Quiero que estas funciones estén disponibles en toda mi aplicación, tanto para uso en plantillas de CFM como en CFC instanciados de aplicación.

La forma en que lo veo hay varios métodos para lograr esto, pero todos tienen sus propias limitaciones:

  1. Cree una instancia de Utils CFC base en el alcance de la aplicación. Este es el método que he usado más a menudo. Todas las funciones están disponibles para toda la aplicación, pero si instalo el mismo CFC desde múltiples aplicaciones, cada una tendrá su propio alcance de aplicación, lo que significa que cada una de ellas debe instanciar su propia base de Utils CFC. No hay nada de malo en esto, pero parece que no estoy encapsulando el CFC lo suficiente. No estoy interesado en hacer referencia al alcance de la aplicación desde el CFC.

  2. Cree una Base Util CFC y haga que cada CFC extienda esto. Esto funciona bien, y significa que el CFC puede hacer referencia a las funciones de Utils directamente desde el alcance THIS de CFC. Sin embargo, significa que las funciones de Utils se mantienen en la memoria para cada CFC. Tampoco se sienta bien conceptualmente ya que mis otros CFC no tienen ninguna relación con el Utils CFC.

  3. Inyecte mi base Utils CFC en mis otros CFC. Otro método con el que he estado jugando consiste en crear una instancia de mi Utils CFC base en el ámbito de la Aplicación, pero luego pasarlo como un objeto a un argumento en mis otros CFC. Esto funciona para mí conceptualmente y para la encapsulación. De la misma manera que configuraré mis fuentes de datos en mi método init, puedo hacer lo mismo con mis UDF. Esto tiene el mismo problema que las UDF están incluidas en cada CFC. Cuando vuelco todos mis CFC obtengo cada UDF varias veces, sin embargo, como paso un objeto instanciado, asumo que no se está tomando ningún espacio de memoria adicional. Si alguien pudiera confirmar eso, sería útil, ¡solo lo estoy asumiendo! El único problema real que tengo con este método es que parece un poco intrincado.

  4. Haga que mi aplicación CFC extienda mi Utils CFC. Esto es lo que parecen hacer muchos frameworks. No he usado este método, pero estoy seguro de que hay pros y contras.

  5. CFIncluir mis UDF de plantillas separadas, directamente en Application.cfc. Esto es funcionalmente similar a crear instancias en el ámbito de la Aplicación.

  6. Agregue mis UDF a Components.cfc del servidor. Es una gran idea en teoría: puedo mantener una copia de los Utils básicos y asegurarme de que todo en el servidor pueda acceder a ellos. Sin embargo, si quiero ejecutar aplicaciones en varios servidores, entonces ellos Todos necesitarán esas funciones. Además, cualquier actualización del servidor puede sobrescribir los componentes. Simplemente parece piratear el núcleo, lo cual estoy seguro de que todos podemos atestiguar a partir de una experiencia amarga, es malo.

Entonces, mi pregunta es esta: ¿cuál es la mejor práctica para extender CF con UDF de una manera elegante y reutilizable? ¿Alguna de las opciones anteriores o algo en lo que no he pensado?