Recientemente empecé a notar una repetición en algunos de mis códigos. Por supuesto, una vez que notas una repetición, se vuelve irritante. Por eso estoy haciendo esta pregunta.¿Hay un término para este concepto, y existe en un lenguaje de tipo estático?
La idea es esta: a veces escribes diferentes versiones de la misma clase: una versión sin formato, una versión bloqueada, una versión de fachada de solo lectura, etc. Estas son cosas comunes que hacer a una clase, pero las traducciones son muy mecánico. Rodee todos los métodos con lock acquire/releases, etc. En un lenguaje dinámico, podría escribir una función que hiciera esto en una instancia de una clase (por ejemplo, iterar sobre todas las funciones, reemplazándolas por una versión que adquiera/libere un bloquear.).
Creo que un buen término para lo que quiero decir es 'clase reflejada'. Crea una transformación que toma una clase y devuelve una clase modificada en una ruta deseada. La sincronización es el caso más fácil, pero hay otros: hacer una clase inmutable [ajustar los métodos para que clonen, muten el clon, y lo incluyan en el resultado], hagan una clase de solo lectura [suponiendo que puedan identificar métodos de mutación], hagan una clase parece que funciona con tipo A en lugar de tipo B, etc.
La parte importante es que, en teoría, estas transformaciones tienen sentido en tiempo de compilación. Aunque un ActorModel <T> tiene métodos que cambian en función de T, dependen de T de una manera específica cognoscible en tiempo de compilación (ActorModel <T> métodos devolverían un futuro del tipo de resultado original).
Me pregunto si esto se ha implementado en un idioma y cómo se llama.
Sin duda suena similar, y cubre algunos de los casos. Pero, usando aspectos, ¿puedo tomar una clase y hacer que los métodos devuelvan futuros en lugar de los valores normales? –
Normalmente, no se puede cambiar el tipo de devolución con AOP, un poco el punto es que el código que lo usa desconoce los aspectos. –