El mejor video que he visto sobre este patrón implementado en Laravel incluyendo videos en inglés y español, es una obra maestra didáctica sobre el tema, buenísimo.
Sisi, es que hay muchos patrones similares, la idea es ir mostrando cada uno con un ejemplo para tener la posibilidad de decidir cuando se necesite Gracias por el aporte!
genial muchas gracias investigando el patrón no me quedaba claro como implementar el contexto , tu video me ayudo muchísimo para resolver un problema de mi trabajo jajaj grande , vale ese cafe !!
@@return194 Exacto, a mi me pasaba lo mismo, pq en los textos aparece ese famoso "contexto" que yo pensaba que se refería al contexto en el que se necesitaba ... en este caso al controlador, pero súper bien que mostraste que era una clase aparte.
@@return194 la verdad que siempre prnse en como hacer mas limpia la logica de negocio y que sea de simple lectura, muy buena la implementacion y ayuda que das
Puedo usar repositories adentro de strategys? Devolviendo el repositorio que solicite el cliente usando el patron strategy coomo en tu ejemplo. Buen video
@@return194 Recibo un request desdel clien front (Cliente), en el controllador. En ese request pueden venir varios parametros = (rango de fecha, empresa, nombre de cliente, numero de cliente, codigo postal), pueden venir todos los parametros o pueden venir solo algunos de ellos. Al recibirlos hago un if else if para verificar que parametros me llegan y segun los parámetros armo la consulta en el modelo a la base de datos. Funciona muy bien, pero veo que hay mejores maneras posibles de hacerlo orientada a objetos. 1) desacomplando la base de datos del controlador 2) creando una clase por cada tipo de consulta, o un repositorio por cada tipo de consulta segun sus parametros. Controllador: public function filterProducts(FilterProducts $request){ $dataRequest = $request->dataRequest ? json_decode($request->dataRequest,true) : false;
$products = Product::filterProducts($request) ->selectRaw("*,match(name, content, slug) against('(".e(request('filter'))."*) (".e(request('filter')).")' IN BOOLEAN MODE) as relevance") ->orderByRaw('relevance DESC') ->paginate(isset($dataRequest["limit"]) ? $dataRequest["limit"] : 10); if(count($products)>0){ return response()->json($products); }else{ return response()->json(['error' => 'No hay resultados en la busqueda'],200); } } Model Products public function scopeFilterProducts($query,$request){ return $query->when(!$request->status || ($request->status && $request->status === 0), function($query){ return $query->with('category')->with('gallery') ->where(function($query){ $query->whereRaw("match(name, content, slug) against('(".e(request('filter'))."*) (".e(request('filter')).")' IN BOOLEAN MODE)"); }); })->when($request->status && ($request->status === 1 || $request->status === 2), function($query){ $query->with('category')->with('gallery') ->whereRaw("match(name, content, slug) against('(".e(request('filter'))."*) (".e(request('filter')).")' IN BOOLEAN MODE)") ->where('status',request('status')); })->when($request->status && $request->status === 3, function($query){ $query->with('category')->with('gallery') ->whereRaw("match(name, content, slug) against('(".e(request('filter'))."*) (".e(request('filter')).")' IN BOOLEAN MODE)") ->where('inventory',0); })->when($request->status && $request->status === 4, function($query){ $query->with('category')->with('gallery') ->whereRaw("match(name, content, slug) against('(".e(request('filter'))."*) (".e(request('filter')).")' IN BOOLEAN MODE)") ->onlyTrashed(); }); }
El contexto no hereda la interfaz, el contexto sabe a que clase llamar según lo que necesita el cliente. Las clases que heredan la interfaz son las estrategias concretas (todas las clases de los estados, por ej: InTransit.php...) de esta forma todas tienen que hacer la implementacion del método de la interfaz
Excelente, ya lo había aplicado en Laravel y ahora quise aplicarlo en Angular guiándome por este mismo video y espectacular, muchas gracias gracias!
excelente el video, muy claro y al hueso ja..ojala que publiques otros patrones!!Saludo
Si, se vienen varios patrones más
@@return194estaré al tanto compañero..
Sos un genio Return
Muy buen video
💯
El mejor video que he visto sobre este patrón implementado en Laravel incluyendo videos en inglés y español, es una obra maestra didáctica sobre el tema, buenísimo.
Muchísimas gracias
Creo que era mejor aplicar el patron state
Buen video
Sisi, es que hay muchos patrones similares, la idea es ir mostrando cada uno con un ejemplo para tener la posibilidad de decidir cuando se necesite
Gracias por el aporte!
genial muchas gracias investigando el patrón no me quedaba claro como implementar el contexto , tu video me ayudo muchísimo para resolver un problema de mi trabajo jajaj grande , vale ese cafe !!
Me alegro que pudiste resolver
@@return194 Exacto, a mi me pasaba lo mismo, pq en los textos aparece ese famoso "contexto" que yo pensaba que se refería al contexto en el que se necesitaba ... en este caso al controlador, pero súper bien que mostraste que era una clase aparte.
@ Me imagino que hay otras formas de hacerlo, pero ami me parece una buena solución de esa forma descentralizandolo
lo mejor que vi, muy buenos videos
Muchas gracias, pronto haré más videos de nuevo
EXELENTE VIDEO MUY CLARO Y BIEN EXPLICADO
Muy claro todo!! Seguí haciendo videos así!
Excelentes vídeos bro
Muchas gracias
Muy buen tutorial, lo que si podrías bajar un poco la velocidad en cuando creabas los nuevos strategies para los diferentes escenarios.
sorry pero pienso que esa es el chiste de que sea un video .... mostrar un ejemplo y los otros se hacen igual siguiendo la misma logica
Excelente contenido!!!
Buen video, bien explicado. 👍
Excelente la explicación, También me gustaría ver aplicado a PHP Puro sin Frameworks ni librerías
clarisimo, muchas gracias, ahora me cayo la ficha
Eso que acabas de hacer es el patrón factory 🏭. Generaste una fábrica para creación de nuevos objetos dependiendo de la necesidad del cliente.
me gusta mucho los videos tuyos, podrias realizar alguno con la arquitectura hexagonal y sus ventajas?
Es uno de los temas que tengo pensado para más adelante. Hay mucho por hacer y de a poco voy largando.
Me alegro que te sirva, muchas gracias
@@return194 la verdad que siempre prnse en como hacer mas limpia la logica de negocio y que sea de simple lectura, muy buena la implementacion y ayuda que das
Puedo usar repositories adentro de strategys? Devolviendo el repositorio que solicite el cliente usando el patron strategy coomo en tu ejemplo. Buen video
no sería lo correcto, pero como sería el escenario ?
@@return194 Recibo un request desdel clien front (Cliente), en el controllador. En ese request pueden venir varios parametros = (rango de fecha, empresa, nombre de cliente, numero de cliente, codigo postal), pueden venir todos los parametros o pueden venir solo algunos de ellos. Al recibirlos hago un if else if para verificar que parametros me llegan y segun los parámetros armo la consulta en el modelo a la base de datos. Funciona muy bien, pero veo que hay mejores maneras posibles de hacerlo orientada a objetos. 1) desacomplando la base de datos del controlador 2) creando una clase por cada tipo de consulta, o un repositorio por cada tipo de consulta segun sus parametros.
Controllador:
public function filterProducts(FilterProducts $request){
$dataRequest = $request->dataRequest ? json_decode($request->dataRequest,true) : false;
$products = Product::filterProducts($request)
->selectRaw("*,match(name, content, slug) against('(".e(request('filter'))."*) (".e(request('filter')).")' IN BOOLEAN MODE) as relevance")
->orderByRaw('relevance DESC')
->paginate(isset($dataRequest["limit"]) ? $dataRequest["limit"] : 10);
if(count($products)>0){
return response()->json($products);
}else{
return response()->json(['error' => 'No hay resultados en la busqueda'],200);
}
}
Model Products
public function scopeFilterProducts($query,$request){
return $query->when(!$request->status || ($request->status && $request->status === 0), function($query){
return $query->with('category')->with('gallery')
->where(function($query){
$query->whereRaw("match(name, content, slug) against('(".e(request('filter'))."*) (".e(request('filter')).")' IN BOOLEAN MODE)");
});
})->when($request->status && ($request->status === 1 || $request->status === 2), function($query){
$query->with('category')->with('gallery')
->whereRaw("match(name, content, slug) against('(".e(request('filter'))."*) (".e(request('filter')).")' IN BOOLEAN MODE)")
->where('status',request('status'));
})->when($request->status && $request->status === 3, function($query){
$query->with('category')->with('gallery')
->whereRaw("match(name, content, slug) against('(".e(request('filter'))."*) (".e(request('filter')).")' IN BOOLEAN MODE)")
->where('inventory',0);
})->when($request->status && $request->status === 4, function($query){
$query->with('category')->with('gallery')
->whereRaw("match(name, content, slug) against('(".e(request('filter'))."*) (".e(request('filter')).")' IN BOOLEAN MODE)")
->onlyTrashed();
});
}
Lee sobre las query scopes y decime si te sirve, con eso deberías poder solucionar creo yo
Amigo un libro de programación orientada a objetos que reomiendes al 100%
Muy bueno el video, pero según el diagrama, no me queda claro cual es la clase Contexto que hereda de la interfaz Estrategia
El contexto no hereda la interfaz, el contexto sabe a que clase llamar según lo que necesita el cliente. Las clases que heredan la interfaz son las estrategias concretas (todas las clases de los estados, por ej: InTransit.php...) de esta forma todas tienen que hacer la implementacion del método de la interfaz
@@return194 Muchas gracias por la respuesta!!