Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Legibilidad en el código

Estas en el tema de Legibilidad en el código en el foro de PHP en Foros del Web. Hola colegas solicito su opinión. Supongamos el siguiente requerimiento que es hipotetico: Cita: Cuando se guarde un post se puede agregar una imagen y el ...
  #1 (permalink)  
Antiguo 08/11/2018, 11:42
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Legibilidad en el código

Hola colegas solicito su opinión.

Supongamos el siguiente requerimiento que es hipotetico:

Cita:
Cuando se guarde un post se puede agregar una imagen y el slug debe de generarse automáticamente para el titulo del post.
Cual de las siguientes opciones se acerca mas al requerimiento?, y si es legible y se entiende, si no es así y tienen alguna idea adicional comenten.

En este momento solo piense en la forma de uso, sin importar que se esta usando. y con la finalidad de ser mas claro en la intención del código.

¿Alguna opción es cercana al requerimiento?, cual se entiende mas?, cual es mas facil de usar?, tienes otras ideas ?

Código PHP:
Ver original
  1. //Opción 1
  2. $post = Post::make([
  3.     'title' => request('title'),
  4.     'body' => request('body'),
  5.     'slug' => str_slug(request('title')),
  6.     'image' => request()->hasFile('image') ?? request()->store('images'),
  7. ]);
  8. $post->save();
  9.  
  10. //Opción 2 slug implicito
  11. $post = Post::make($request->all())->withImage('image');
  12. $post->save();
  13.  
  14. //Opción 3 todo implicito
  15. $post = Post::publish($request);
  16.  
  17. //Opción 4 slug implicito
  18. $post = Post::write($request)->withImage('image');
  19. $post->save();
  20.  
  21. //Opción 5 todo explicito
  22. $post = Post::write($request)->withImage('image')->withSlugFor('title');
  23. $post->save();
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #2 (permalink)  
Antiguo 08/11/2018, 16:03
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años
Puntos: 120
Respuesta: Legibilidad en el código

yo lo realizaria, en base a POO y funciones anonimas, para poder hacer uso de un IDE que tenga autompletado de CODIGO, ya que podrian pasar meses para recordar la forma correcta de un array, para cambios puntuales a futuro, o incluso delegarlo a un tercero y le sea facil, que cambios hacer y donde, el hecho de usar namepsaces dentro de una funcion anonima, da a entender facilmente donde ay que cambiar, y para proyectos enormes ahorraria tiempo

Código PHP:
Ver original
  1. <?php
  2. $post = post::make(function(\model\Post $post) use ($other_vars){
  3.     $post->titulo = request('title');
  4.     $post->body = request('body');
  5.     //$post->slug = request('slug');//internamente se genera si es que no esta definido
  6.     $post->image = request()->hasFile('image') ?  request()->store('images') : 'http://tuadmin.com/fake_image.png';
  7.     return $post;
  8. });
  9.  
  10. $post->on_errror(function($str_error){
  11.     echo "ocurrio un error:$str_error ";
  12.     funcionLogErrores("ocurrio un error:$str_error");
  13. });
  14.  
  15. $post->save();
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9
  #3 (permalink)  
Antiguo 09/11/2018, 11:15
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Legibilidad en el código

Gracias por comentar, pero en este caso ya estas haciendo cosas de implementación el manejo de errores ya esta resuelto y no la clase no requiere conocimiento de eso, y el closuro en este caso quita legibilidad ya que make es un name constructor.

la idea era ver la parte de uso y reautilización usando el lenguaje del dominio sin detallar como va a hacer las cosas. el objetivo con esto es que alguien mas pueda entender el código viendo que hace y no como lo esta haciendo de forma interna.

De todas formas te agreadesco tu tiempo.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #4 (permalink)  
Antiguo 09/11/2018, 23:26
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 1 mes
Puntos: 1146
Respuesta: Legibilidad en el código

Yo me quedaría con la 2da opción o la 4ta

Código PHP:
Ver original
  1. //Opción 2 slug implicito
  2. $post = Post::make($request->all())->withImage('image');
  3. $post->save();

Me parece mas legible y fácil de digerir., aparte de delegar la imagen a otra funcion que puede o no utilizarse.

La 1ra opción me parece que va de sobra y complica mas el estar construyendo el array en ese momento., sumado a la comprobación de la imagen que bien puede o no requerirse, por lo que me gusta mas delegarlo a otra función.

La 3ra opción es muy practica para usar en casos muy específicos pero le quitas flexibilidad, o da esa impresión, así que pasaría de hacer eso.

La 5ta opción, creo que esta de sobra la posibilidad del asignar el slug, salvo que vayan a reinventar la rueda y utilizar otro campo que no sea el titulo para tal fin.
  #5 (permalink)  
Antiguo 14/11/2018, 12:33
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Legibilidad en el código

Arturo muchas gracias por tu opinion al final quedo algo muy similar a la opción 2 y con esta idea en mente se logro hacer cosas como esta:
Código PHP:
Ver original
  1. Post::published()
  2.     ->for($category)
  3.     ->in($date)->get();

Con eso se quitaron las consultas y ahora se entiende de forma mas sencilla el contexto del código, que creo va mas alineado al problema que se estaba resolviendo.

El caso fue para refactorizar un app en laravel.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:35.