Para los que quieran echarle un ojo (en los enlaces faltó el link de github):
git clone https://github.com/mchojrin/GuestBook.git
Comprender los objetivos y pre-requisitos del curso
Todo lo que aprenderás sobre buenas prácticas para escribir código
¿A quién beneficia contar con código bien escrito?
Ejes que hacen a la calidad del código
Aprender a escribir código legible
Código prolijo
Identificadores mnemotécnicos, específicos y precisos
Aprender a escribir código mantenible
Código modular
Código reutilizable
Código organizado
Escribir código libre de vicios
Evitar el hardcoding
Evitar efectos colaterales
Conocer los principios SOLID
Principios SOLID: Single Responsibility Principle
Open/Closed Principle
Liskov Substitution Principle
Interface Segregation Principle
Dependency Inversion Principle
Conocer los conceptos de Patrones de diseño y su aplicación
Patrones de diseño: Singleton
Factory
Command
Comprender las nociones de testing automatizado
Introducción al Testing Automatizado
Armado del entorno de pruebas en PHP
Test Driven Development
Incorporar habilidades para el trabajo en equipo
Pull requests
Documentación
Reforzar lo aprendido
A quién beneficia el código bien escrito
Aplicar lo aprendido: Libro de visitas
Conclusiones
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 25
Preguntas 5
Para los que quieran echarle un ojo (en los enlaces faltó el link de github):
git clone https://github.com/mchojrin/GuestBook.git
Debo reforzar conocimientos de PHP y POO
Me queda claro las prácticas que tuvo, pero desconozco un poco el lenguaje
Genial, y si no me equivoco, la clase MessageBag podría aplicarse al patrón de diseño Singleton, ya que realmente solo necesitaremos una instancia de esa clase en todo el proyecto, empezaré a aplicar todos estos consejos!
El único problema es JavaScript, que realmente no tiene una base fuerte de POO, pero si no me equivoco he visto por ahí algo llamado TypeScript que si lo tiene, sería cuestión de verlo:D
Excelente ejemplo. Muchas gracias, profesor. Parece trivial, pero muchos proyectos que he visto no tienen algo de tipo MessageBag, incluyendo algunos de mi autoría 😂. Lo importante es que poco a poco se va aprendiendo a escribir mejor código.
Me queda claro que debo reforzar mis conocimientos de programación orientada objetos, al parecer hace la vida mucho más fácil.
El ejemplo esta bien realizado, me hubiera gustado que se grabara desde cero. Aunque con el repositorio se guía uno.
Buen video.
muy buen resumen y me llamo la atención o de los serielizadores que convierten un objeto a string.
Quiero compartirles una pequena modificacion en el archivo index.php
No impacta la logica de la aplicacion, tiene que ver con dos tecnicas que aprendi:
.
Dependency Injection: Se encarga de ‘atar’ a la aplicacion ciertos recursos, cosas como el archivo de configuracion.
Separation of Concerns: Simplemente para separar logica de programacion de logica de presentacion, cree carpeta views.
.
Nota: el monton de comentarios es para entender bien la explicacion del profesor (para mi yo del futuro)
<?php
// Este es un front controller, el PUNTO DE ENTRADA de la aplicacion
require_once __DIR__ . '/../vendor/autoload.php';
// Buenas practica: evitar hardcoding, archivo de configuraciones
require_once __DIR__ . '/../core/bootstrap.php';
use App\MessageBag;
use App\CommentsRepository;
use App\CommentsJsonSerializer;
// Buena practica: evitar hardcoding
$trans = new MessageBag(require_once __DIR__ . '/../config/messages.php');
// serializador: transformar un objeto en una representacion de texto
$commentsSerializer = new CommentsJsonSerializer();
// Modifico usando inyeccion de dependencias
$commentsRepo = new CommentsRepository((App::get('config')['comments_file']), $commentsSerializer);
$comments = $commentsRepo->read();
require('../views/index.view.php');
Excelente llevar a la practica los conceptos eseñados
Todo muy claro. Gracias
Despues de varias horas de hacer correcciones al codigo de acuerdo a las pruebas, casi lo he logrado:
Comment
✔ New comments will be dated with current date if not explicitly provided
✔ New comments will be dated with parameter if explicitly provided
Comments Json Serializer
✔ Serialize will return valid json
✔ Unserialize will return an array of comments
Comments Repository
✔ Get comments will return a comments array
Meesage Bag
✔ Translate
Time: 00:00.011, Memory: 6.00 MB
OK (6 tests, 9 assertions)
F:\laragon\www\2022-Platzi\08-Patrones-Diseno\04-proyecto-guestbook>
Sin embargo tengo problemas con esta prueba:
public function testUnserializeASerializedCommentWillReturnTheOriginalComment()
{
$sut = new CommentsJsonSerializer();
$date = new DateTimeImmutable('first day of last month');
// die(var_dump($date['date']));
$comments = [
new Comment(
'Mauro',
'A comment',
$date
)
];
$this->assertEquals($comments, $sut->unserialize($sut->serialize($comments)));
}
Arroja:
Comments Json Serializer
✘ Unserialize a serialized comment will return the original comment
┐
├ Failed asserting that two arrays are equal.
├ --- Expected
├ +++ Actual
├ @@ @@
├ 0 => App\Comment Object (
├ 'author' => 'Mauro'
├ 'contents' => 'A comment'
├ - 'date' => 2022-08-01T04:26:49.967968+0000
├ + 'date' => 2022-08-01T04:26:49.000000+0000
├ )
├ )
Gracias, buen contenido
La del diccionario es súper útil
Sarasa… Argentinidadas XD
Está fallando el archivo de test CommentsRepositoryTest.php porque le esta enviando un solo argumento al constructor de la clase CommentsRepository, no sé porque si en el video está todo completo
Excelente ejemplo, lo único es que no pude instalar correctamente el entorno de pruebas para poder aplicar los conocimientos
Es muy bueno ver en la practica el uso de lo aprendido. A veces lo mas dificil no es entender los conceptos sino utilizarlos en nuestras aplicaciones dejando de lado los viejos vicios.
que bueno Palito Ortega! xD
Excelente aplicación!
Excelente el ejemplo
Ahora nos toca practicar lo aprendido!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?