-
Notifications
You must be signed in to change notification settings - Fork 0
[Tutorial] CRC y DFTBLWB
Bruce Tate ha definido un concepto llamado CRC que básicamente permite separar las funciones en tres responsabilidades: construir, reducir y convertir.
El objetivo es permitir utilizar los Pipes (|>
) lo mayor posible, evitando el uso de with
. Se evita el uso de with
ya que eso obliga a romper la cadena de pipeline
. Si es necesario utilizar with
se recomienda envolverlo en una función que permita continuar con la cadena.
iex(17)> input \
|> constructor \
|> reducer(item) \
|> reducer(item) \
|> reducer(item) \
|> converter -> # beautiful output
Ejemplos de envoltura de funciones dentro de un pipeline.
def md5(str) do
str
|> (fn(s) -> :erlang.md5(s) end).()
|> Base.encode16(case: :lower)
end
Permite crear un acumulador para ser enviado a los distintos reductores (Reducers) y finalmente ser procesados por el conversor (Converter).
En Phoenix esto sería la función mount
.
Ejemplos de acumuladores: assigns
, changeset
.
Los acumuladores tradicionalmente serían un struct
o map
con los campos necesarios
para transmitir la información entre los reductores.
Toma un acumulador en su primer parámetro, le realiza distintas operaciones y devuelve una versión modificada del acumulador.
En Phoenix esto sería la función handle_event
Toma un acumulador y lo convierte a un formato amigable al usuario. Normalmente sería la última función en el pipeline de funciones.
En Phoenix esto sería la función render
.
El acumulador es transformado a un formato final, por ejemplo un string o número que será mostrado como resultado.