Muy interesante el problema con el offset y la solución con el cursor, nunca me lo había planteado, si nunca me encuentro con este problema ya se por donde tirar, jejejeje. Gracias!!! 🍻🍻🫶🏻
alguna vez tuve este problema usando el patron dao, pero la solucion es bastante simple: public interface DataAccess { void insert(T o); void delete(Filter f); void update(T o, Filter f); List select(Filter f); } esta fue la solucion que implemente en su momento. muy parecida a la que muestran
!Muchas gracias por el vídeo! Me surge una duda al ver el repositorio y está filosofía respecto a la relación entre los filtros. Por lo que veo ahora mismo se asume que todos los filtros tienen una relación AND entre ellos, pero, ¿como haríamos para relaciones OR o híbridas? Por ejemplo, si queremos buscar en dos campos de texto (operator contains pero con relación OR entre estos dos filtros) y filtrar por fecha (operador Lt pero este filtro es un AND con los otros dos filtros) ¿Cómo se construye el criteria para este caso?
Excelente pregunta, la wiki tiene ejemplos de implementaciones de otros operadores y como se encadenan perfectamente con este patron de diseño en.wikipedia.org/wiki/Specification_pattern#Code_examples
Chicos podrían hacer un curso solamente para implementar bien el patron 'Criteria' o 'Specification' en Typescript? ¿Cómo usarlo con el patrón Repository y hacer mejor uso del backend? pliiis
Pues estamos pensando en hacer algo así justamente. Si vemos que hay interés le damos caña. Apúntate en este formulario y así lo tenemos en cuenta 😊 docs.google.com/forms/d/1yHtvJp8iwF0wF4QnfjxuUIWdGpbPRKBMsJo-R_R5wl4/viewform
Chicos hay alguna razon tactica por la que nunca usan alias en los imports? Al final si los alias son una feature del lenguaje y su dominio no tiene que verse afectado porque los alias se tienen que resolver en el tiempo del despliegue, cuando hacemos el build. No se me gustara saber la razon. Gracias cracks
¡Muchas gracias por el contenido! En generla me gusta la expresividad que añade esta solución aunque me llama mucho la atención que no se mencione que en LongCourses y TopCourses estás acoplandote a algo de infra desde dominio, pongo un ejemplo con LongCourses: En LongCourses usas los strings "duration" y "name" en FilterField("duration") y OrderBy("name") pero esos strings realmente pertenecen a la infra y dominio no debería de acoplarse a ellos, en este caso, dominio no debería de conocer ese detalle de implementación de la base de datos. Imagina que cambias la columan de sql o el atributo de mongo, estarías afectando a dominio con el cambio. No creo que esto descarte la solución, para nada, simplemente es algo a tener en cuenta como trade off. El detalle de los cursores para paginar es interesante, quizá se podría hacer un contenido centrado solo en paginados a bases de datos con análisis de trade offs. Un saludo
7:53 en vez de un string "views", no hay en typescript un nameof como el de c#, que funciona sin instanciar?, ej en c# string viewsfield = nameof(NameClass.Field).ToLower();
Me queda una duda con el uso de FilterValue en 5:28. La clase extiende StringValueObject. De hecho, recibe un string en el constructor. Así que para pasarle un valor de 20 minutos tenemos que pasar el valor como cadena. De ahí el: new FilterValue('20'). ¿Eso significa que el campo se va a comparar como cadena? Si fuese así, '20' >= '100' y al mismo tiempo '20'
veo difícil implementar este patrón en una arquitectura ddd teniendo en cuenta que muchas veces los campos del dominio no están igual de estructurados que las entidades de la base de datos, haría falta realizar algún tipo de mapeo, el cual a decir verdad, veo bastante complejo e innecesario.
No me parece del todo semántico topcourses creo que me gusta más TopViewCourses y el parámetro lo pondría como howManycourses ya que top y top courees no dice que son ni vistas ni la cantidad de cursos. Si mañana se quiere el top rated ya no podrías usar topcourses sin más... Que opináis Como siempre enhorabuena.
Buena propuesta. Definitivamente TopViewsCourses revela más la intención y es más explícito. Ya no tanto por el argumento de dejar hueco a top rated, porque por ese mismo motivo en verdad podríamos pensar que, a futuro, lo que ahora es TopCourses con un criterio de ordenación por visionados, podría pasar a ser un mix de “top” por visionados y por ser más nuevos. Que de hecho, a día de hoy realmente es lo que hacemos en la web. Pero para el caso del vídeo de compro lo de TopViewsCourses 😊 Gracias por comentar!
que nivel se debe tener para entender sus videos, no entiendo NADA de lo que enseñan parecen puras clinicas para expertor ULTRA SENIORS FULLSTACK AEROESPACIALES no se les entiende NADAAA, parece que les doliera completar una linea de palabras con conceptos sencillos de inmediato empiezan a envolverlo todo en una super complejidad
En serio, el murciano no se entiende si se habla como si fuera el último día del universo. He tenido que bajar la velocidad, que parece que hable Ferrán Adrià con tanta revolución y poca dicción.
Jajajaj lo siento! Me cuesta controlarme y acabo hablando como si no hubiera un mañana 😅 Espero que eso no haya impedido que disfrutes del vídeo. Un saludo desde Córdoba!
@@rubensalado Saludos de vuelta. No creo que debas disculparte, porque sé de buena gana que no es un fallo tuyo. A mi entender es un fallo de producción. Verás, cuando se presenta un material didáctico, este tiene que ser préviamente revisado. No estábais haciendo un directo, por lo tanto se debería haber revisado; y aspectos como la dicción o la velocidad de exposición, que son fundamentales para un recurso videográfico, hubiera pasado por filtro alguno.
Muy interesante el problema con el offset y la solución con el cursor, nunca me lo había planteado, si nunca me encuentro con este problema ya se por donde tirar, jejejeje. Gracias!!! 🍻🍻🫶🏻
12:33 ¿como se aplica el "starting with" cuando las claves son UUID?
En Oracle se podria usar el RowId pero en otro motor que no lo tenga...
Activo desde RD 🇩🇴
alguna vez tuve este problema usando el patron dao, pero la solucion es bastante simple:
public interface DataAccess {
void insert(T o);
void delete(Filter f);
void update(T o, Filter f);
List select(Filter f);
}
esta fue la solucion que implemente en su momento. muy parecida a la que muestran
!Muchas gracias por el vídeo! Me surge una duda al ver el repositorio y está filosofía respecto a la relación entre los filtros. Por lo que veo ahora mismo se asume que todos los filtros tienen una relación AND entre ellos, pero, ¿como haríamos para relaciones OR o híbridas? Por ejemplo, si queremos buscar en dos campos de texto (operator contains pero con relación OR entre estos dos filtros) y filtrar por fecha (operador Lt pero este filtro es un AND con los otros dos filtros) ¿Cómo se construye el criteria para este caso?
Excelente pregunta, la wiki tiene ejemplos de implementaciones de otros operadores y como se encadenan perfectamente con este patron de diseño en.wikipedia.org/wiki/Specification_pattern#Code_examples
Chicos podrían hacer un curso solamente para implementar bien el patron 'Criteria' o 'Specification' en Typescript? ¿Cómo usarlo con el patrón Repository y hacer mejor uso del backend? pliiis
Pues estamos pensando en hacer algo así justamente. Si vemos que hay interés le damos caña. Apúntate en este formulario y así lo tenemos en cuenta 😊 docs.google.com/forms/d/1yHtvJp8iwF0wF4QnfjxuUIWdGpbPRKBMsJo-R_R5wl4/viewform
Gracias chicos, respondido, ojalá lo saquen ♥@@CodelyTV
Brutal! Gracias!
Chicos hay alguna razon tactica por la que nunca usan alias en los imports? Al final si los alias son una feature del lenguaje y su dominio no tiene que verse afectado porque los alias se tienen que resolver en el tiempo del despliegue, cuando hacemos el build. No se me gustara saber la razon. Gracias cracks
¡Muchas gracias por el contenido!
En generla me gusta la expresividad que añade esta solución aunque me llama mucho la atención que no se mencione que en LongCourses y TopCourses estás acoplandote a algo de infra desde dominio, pongo un ejemplo con LongCourses:
En LongCourses usas los strings "duration" y "name" en FilterField("duration") y OrderBy("name") pero esos strings realmente pertenecen a la infra y dominio no debería de acoplarse a ellos, en este caso, dominio no debería de conocer ese detalle de implementación de la base de datos. Imagina que cambias la columan de sql o el atributo de mongo, estarías afectando a dominio con el cambio.
No creo que esto descarte la solución, para nada, simplemente es algo a tener en cuenta como trade off.
El detalle de los cursores para paginar es interesante, quizá se podría hacer un contenido centrado solo en paginados a bases de datos con análisis de trade offs.
Un saludo
✋
7:53 en vez de un string "views", no hay en typescript un nameof como el de c#, que funciona sin instanciar?,
ej en c#
string viewsfield = nameof(NameClass.Field).ToLower();
like por la musica final
Como se transforman los criteria a queries? o se hace el filtrado por codigo?
Me queda una duda con el uso de FilterValue en 5:28. La clase extiende StringValueObject. De hecho, recibe un string en el constructor. Así que para pasarle un valor de 20 minutos tenemos que pasar el valor como cadena. De ahí el: new FilterValue('20'). ¿Eso significa que el campo se va a comparar como cadena? Si fuese así, '20' >= '100' y al mismo tiempo '20'
Para REST-API no seria mejor utilizar un filter parser como el de Odata o FIQL?
En TopCourses el OrderType no deberia ser DESC?? 🤔🤔
Yes. Ese criterio retorna los X cursos con menos views.
veo difícil implementar este patrón en una arquitectura ddd teniendo en cuenta que muchas veces los campos del dominio no están igual de estructurados que las entidades de la base de datos, haría falta realizar algún tipo de mapeo, el cual a decir verdad, veo bastante complejo e innecesario.
No me parece del todo semántico topcourses creo que me gusta más TopViewCourses y el parámetro lo pondría como howManycourses ya que top y top courees no dice que son ni vistas ni la cantidad de cursos.
Si mañana se quiere el top rated ya no podrías usar topcourses sin más...
Que opináis
Como siempre enhorabuena.
Buena propuesta. Definitivamente TopViewsCourses revela más la intención y es más explícito. Ya no tanto por el argumento de dejar hueco a top rated, porque por ese mismo motivo en verdad podríamos pensar que, a futuro, lo que ahora es TopCourses con un criterio de ordenación por visionados, podría pasar a ser un mix de “top” por visionados y por ser más nuevos. Que de hecho, a día de hoy realmente es lo que hacemos en la web. Pero para el caso del vídeo de compro lo de TopViewsCourses 😊
Gracias por comentar!
que nivel se debe tener para entender sus videos, no entiendo NADA de lo que enseñan parecen puras clinicas para expertor ULTRA SENIORS FULLSTACK AEROESPACIALES no se les entiende NADAAA, parece que les doliera completar una linea de palabras con conceptos sencillos de inmediato empiezan a envolverlo todo en una super complejidad
ua-cam.com/video/u_87ME-7JVc/v-deo.html
¿No sería orden descendente en lugar de ascendente??
12:33 ¿como se aplica el "starting with" cuando las claves son UUID?
En Oracle se podria usar el RowId pero en otro motor que no lo tenga...
En serio, el murciano no se entiende si se habla como si fuera el último día del universo. He tenido que bajar la velocidad, que parece que hable Ferrán Adrià con tanta revolución y poca dicción.
Jajajaj lo siento! Me cuesta controlarme y acabo hablando como si no hubiera un mañana 😅 Espero que eso no haya impedido que disfrutes del vídeo. Un saludo desde Córdoba!
@@rubensalado Saludos de vuelta. No creo que debas disculparte, porque sé de buena gana que no es un fallo tuyo. A mi entender es un fallo de producción. Verás, cuando se presenta un material didáctico, este tiene que ser préviamente revisado. No estábais haciendo un directo, por lo tanto se debería haber revisado; y aspectos como la dicción o la velocidad de exposición, que son fundamentales para un recurso videográfico, hubiera pasado por filtro alguno.