O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
Raúl Fraile
• Software developer en
• PHP 5.3 Zend Certified Engineer
• Symfony Certified Developer
• LadybugPHP
raulfraile
1. Refactoring 101
2. Coding Standard
3. IDE
4. Separación código/datos
5. Acoplamiento al entorno
6. Don’t Repeat Yoursel...
Proyecto de prueba
APIJokes (I)
GET /api/list
Obtiene la lista de chistes en JSON
POST /api/add
Añade un nuevo chiste
POST /api/edit
Edita un...
APIJokes (II)
Casos especiales
Se envía un email al administrador
cada vez que se añade o edita un
chiste.
No se permiten ...
raulfraile/apijokes
Refactoring 101
Reescribir VS Refactorizar
Reescribir
http://www.flickr.com/photos/meliah/2601885140/
http://www.flickr.com/photos/90692443@N05/8239219385/
Refactorizar
Refactorizar debe ser un
proceso contínuo
Siempre partiendo de un
software que funciona...
...y con tests
Coding Standard
http://www.flickr.com/photos/zpeckler/2835570492/
¿Cambiar de CS?
Importante: Elegir un CS
y ser consistente
Proyectos open source:
compartir mismo CS
PSR-1/2
http://cs.sensiolabs.org
php-cs-fixer fix ApiJokesBundle/ --level=all --dry-run --diff -v
1) Controller/WebsiteController.php (braces, return)
----...
IDE
Problemas: DIC, foreach,
repositorios...
<?php
 
$mailer = $this->get('mailer');
$mailer->send($message);
<?php
 
/** @var $mailer Swift_Mailer */
$mailer = $this->get('mailer');
$mailer->send($message);
Type hints, aunque no
solo por el IDE
<?php
 
$data = array_map(function ($item) {
return array(
'id' => $item->getId(),
'content' => $item->getContent()
);
}, ...
<?php
 
$data = array_map(function (Joke $item)
{
return array(
'id' => $item->getId(),
'content' => $item->getContent()
)...
Separación
código/datos
Son distintos
http://www.flickr.com/photos/yukariryu/121153772/
Un cambio en datos o
configuración no debe
requerir cambiar código
public function load(ObjectManager $manager)
{
$jokes = array(
'There’s no place like 127.0.0.1',
'If at first you don’t s...
# fixtures/joke.yml
jokes:
- 'I would love to change the world, but they won’t...'
- 'There’s no place like 127.0.0.1'
- '...
public function load(ObjectManager $manager)
{
$jokes = Yaml::parse(__DIR__ . '/fixtures/joke.yml');
 
foreach ($jokes['jo...
Acoplamiento al
entorno
http://www.flickr.com/photos/darkhornet/4945282009/
FAIL
{% if app.environment == 'prod' %}
<script type="text/javascript">
// Google Analytics code
</script>
{% endif %}
La aplicación no debe
tomar decisiones
dependiendo del entorno
Mejor: configuraciones
distintas por entorno
{% if enable_analytics %}
<script type="text/javascript">
// Google Analytics code
</script>
{% endif %}
Don’t Repeat
Yourself
// do not allow jokes about java)
if (stripos($content, 'java') !== false) {
throw new BadRequestHttpException(
'Java joke...
use SymfonyComponentValidatorConstraint;
 
/**
* @Annotation
*/
class ContainsJava extends Constraint
{
public $message = ...
 
use SymfonyComponentValidatorConstraint;
use SymfonyComponentValidatorConstraintValidator;
 
class ContainsJavaValidator...
Fat controllers
¡A dieta!
http://www.flickr.com/photos/golf_pictures/3017331832/
Configuración, eventos,
anotaciones, servicios, métodos
más simples, herencia, param
converters...
https://joind.in/8835
¿Preguntas?
Refactorización de aplicaciones PHP/Symfony2
Refactorización de aplicaciones PHP/Symfony2
Refactorización de aplicaciones PHP/Symfony2
Refactorización de aplicaciones PHP/Symfony2
Próximos SlideShares
Carregando em…5
×

de

Refactorización de aplicaciones PHP/Symfony2 Slide 1 Refactorización de aplicaciones PHP/Symfony2 Slide 2 Refactorización de aplicaciones PHP/Symfony2 Slide 3 Refactorización de aplicaciones PHP/Symfony2 Slide 4 Refactorización de aplicaciones PHP/Symfony2 Slide 5 Refactorización de aplicaciones PHP/Symfony2 Slide 6 Refactorización de aplicaciones PHP/Symfony2 Slide 7 Refactorización de aplicaciones PHP/Symfony2 Slide 8 Refactorización de aplicaciones PHP/Symfony2 Slide 9 Refactorización de aplicaciones PHP/Symfony2 Slide 10 Refactorización de aplicaciones PHP/Symfony2 Slide 11 Refactorización de aplicaciones PHP/Symfony2 Slide 12 Refactorización de aplicaciones PHP/Symfony2 Slide 13 Refactorización de aplicaciones PHP/Symfony2 Slide 14 Refactorización de aplicaciones PHP/Symfony2 Slide 15 Refactorización de aplicaciones PHP/Symfony2 Slide 16 Refactorización de aplicaciones PHP/Symfony2 Slide 17 Refactorización de aplicaciones PHP/Symfony2 Slide 18 Refactorización de aplicaciones PHP/Symfony2 Slide 19 Refactorización de aplicaciones PHP/Symfony2 Slide 20 Refactorización de aplicaciones PHP/Symfony2 Slide 21 Refactorización de aplicaciones PHP/Symfony2 Slide 22 Refactorización de aplicaciones PHP/Symfony2 Slide 23 Refactorización de aplicaciones PHP/Symfony2 Slide 24 Refactorización de aplicaciones PHP/Symfony2 Slide 25 Refactorización de aplicaciones PHP/Symfony2 Slide 26 Refactorización de aplicaciones PHP/Symfony2 Slide 27 Refactorización de aplicaciones PHP/Symfony2 Slide 28 Refactorización de aplicaciones PHP/Symfony2 Slide 29 Refactorización de aplicaciones PHP/Symfony2 Slide 30 Refactorización de aplicaciones PHP/Symfony2 Slide 31 Refactorización de aplicaciones PHP/Symfony2 Slide 32 Refactorización de aplicaciones PHP/Symfony2 Slide 33 Refactorización de aplicaciones PHP/Symfony2 Slide 34 Refactorización de aplicaciones PHP/Symfony2 Slide 35 Refactorización de aplicaciones PHP/Symfony2 Slide 36 Refactorización de aplicaciones PHP/Symfony2 Slide 37 Refactorización de aplicaciones PHP/Symfony2 Slide 38 Refactorización de aplicaciones PHP/Symfony2 Slide 39 Refactorización de aplicaciones PHP/Symfony2 Slide 40 Refactorización de aplicaciones PHP/Symfony2 Slide 41 Refactorización de aplicaciones PHP/Symfony2 Slide 42 Refactorización de aplicaciones PHP/Symfony2 Slide 43 Refactorización de aplicaciones PHP/Symfony2 Slide 44 Refactorización de aplicaciones PHP/Symfony2 Slide 45 Refactorización de aplicaciones PHP/Symfony2 Slide 46 Refactorización de aplicaciones PHP/Symfony2 Slide 47 Refactorización de aplicaciones PHP/Symfony2 Slide 48 Refactorización de aplicaciones PHP/Symfony2 Slide 49 Refactorización de aplicaciones PHP/Symfony2 Slide 50 Refactorización de aplicaciones PHP/Symfony2 Slide 51
Próximos SlideShares
SQL or NoSQL - TrueNorthPHP
Avançar
Transfira para ler offline e ver em ecrã inteiro.

2 gostaram

Compartilhar

Baixar para ler offline

Refactorización de aplicaciones PHP/Symfony2

Baixar para ler offline

Slides de la charla "Refactorización de aplicaciones PHP/Symfony2" en deSymfony

Refactorización de aplicaciones PHP/Symfony2

  1. 1. Raúl Fraile • Software developer en • PHP 5.3 Zend Certified Engineer • Symfony Certified Developer • LadybugPHP raulfraile
  2. 2. 1. Refactoring 101 2. Coding Standard 3. IDE 4. Separación código/datos 5. Acoplamiento al entorno 6. Don’t Repeat Yourself 7. Fat controllers Agenda
  3. 3. Proyecto de prueba
  4. 4. APIJokes (I) GET /api/list Obtiene la lista de chistes en JSON POST /api/add Añade un nuevo chiste POST /api/edit Edita un chiste GET / Web con la lista de chistes en HTML
  5. 5. APIJokes (II) Casos especiales Se envía un email al administrador cada vez que se añade o edita un chiste. No se permiten chistes sobre Java.
  6. 6. raulfraile/apijokes
  7. 7. Refactoring 101
  8. 8. Reescribir VS Refactorizar
  9. 9. Reescribir http://www.flickr.com/photos/meliah/2601885140/
  10. 10. http://www.flickr.com/photos/90692443@N05/8239219385/ Refactorizar
  11. 11. Refactorizar debe ser un proceso contínuo
  12. 12. Siempre partiendo de un software que funciona...
  13. 13. ...y con tests
  14. 14. Coding Standard
  15. 15. http://www.flickr.com/photos/zpeckler/2835570492/ ¿Cambiar de CS?
  16. 16. Importante: Elegir un CS y ser consistente
  17. 17. Proyectos open source: compartir mismo CS
  18. 18. PSR-1/2
  19. 19. http://cs.sensiolabs.org
  20. 20. php-cs-fixer fix ApiJokesBundle/ --level=all --dry-run --diff -v 1) Controller/WebsiteController.php (braces, return) ---------- begin diff ---------- --- Original +++ New @@ @@ -class WebsiteController extends Controller { - public function indexAction() { +class WebsiteController extends Controller +{ + public function indexAction() + { $em = $this->getDoctrine()->getManager(); $jokes = $em->getRepository('...')->findAll(); + return $this->render('...', array( 'jokes' => $jokes )); } } ---------- end diff ----------
  21. 21. IDE
  22. 22. Problemas: DIC, foreach, repositorios...
  23. 23. <?php   $mailer = $this->get('mailer'); $mailer->send($message);
  24. 24. <?php   /** @var $mailer Swift_Mailer */ $mailer = $this->get('mailer'); $mailer->send($message);
  25. 25. Type hints, aunque no solo por el IDE
  26. 26. <?php   $data = array_map(function ($item) { return array( 'id' => $item->getId(), 'content' => $item->getContent() ); }, $jokes);
  27. 27. <?php   $data = array_map(function (Joke $item) { return array( 'id' => $item->getId(), 'content' => $item->getContent() ); }, $jokes);
  28. 28. Separación código/datos
  29. 29. Son distintos http://www.flickr.com/photos/yukariryu/121153772/
  30. 30. Un cambio en datos o configuración no debe requerir cambiar código
  31. 31. public function load(ObjectManager $manager) { $jokes = array( 'There’s no place like 127.0.0.1', 'If at first you don’t succeed; call it version 1.0', 'Beware of programmers that carry screwdrivers', 'What color do you want that database?' );   foreach ($jokes as $item) { $joke = new Joke(); $joke->setContent($item);   $manager->persist($joke); }   $manager->flush(); }
  32. 32. # fixtures/joke.yml jokes: - 'I would love to change the world, but they won’t...' - 'There’s no place like 127.0.0.1' - 'If at first you don’t succeed; call it version 1.0' - 'You know it’s love when you memorize her IP...' - 'Beware of programmers that carry screwdrivers' - 'Best file compression around: “rm *.*” = 100...' - 'The truth is out there…anybody got the URL?' - 'What color do you want that database?'
  33. 33. public function load(ObjectManager $manager) { $jokes = Yaml::parse(__DIR__ . '/fixtures/joke.yml');   foreach ($jokes['jokes'] as $item) { $joke = new Joke(); $joke->setContent($item);   $manager->persist($joke); }   $manager->flush(); }
  34. 34. Acoplamiento al entorno
  35. 35. http://www.flickr.com/photos/darkhornet/4945282009/ FAIL
  36. 36. {% if app.environment == 'prod' %} <script type="text/javascript"> // Google Analytics code </script> {% endif %}
  37. 37. La aplicación no debe tomar decisiones dependiendo del entorno
  38. 38. Mejor: configuraciones distintas por entorno
  39. 39. {% if enable_analytics %} <script type="text/javascript"> // Google Analytics code </script> {% endif %}
  40. 40. Don’t Repeat Yourself
  41. 41. // do not allow jokes about java) if (stripos($content, 'java') !== false) { throw new BadRequestHttpException( 'Java jokes are not allowed' ); }
  42. 42. use SymfonyComponentValidatorConstraint;   /** * @Annotation */ class ContainsJava extends Constraint { public $message = 'Java jokes are not allowed'; }
  43. 43.   use SymfonyComponentValidatorConstraint; use SymfonyComponentValidatorConstraintValidator;   class ContainsJavaValidator extends ConstraintValidator { public function validate($value, Constraint $constraint) { if (stripos($value, 'java') !== false) { $this->context->addViolation($constraint->message); } } }
  44. 44. Fat controllers
  45. 45. ¡A dieta! http://www.flickr.com/photos/golf_pictures/3017331832/
  46. 46. Configuración, eventos, anotaciones, servicios, métodos más simples, herencia, param converters...
  47. 47. https://joind.in/8835 ¿Preguntas?
  • jjbier

    Aug. 11, 2013
  • xavifuentes

    Jun. 22, 2013

Slides de la charla "Refactorización de aplicaciones PHP/Symfony2" en deSymfony

Vistos

Vistos totais

2.544

No Slideshare

0

De incorporações

0

Número de incorporações

987

Ações

Baixados

40

Compartilhados

0

Comentários

0

Curtir

2

×