Ejemplos de orientación a objetos (OOP) y principios de diseño
27-04-2020
Cuando estamos aprendiendo sobre Programación Orientada a Objetos y sobre de principios de diseño, es complicado encontrar ejemplos reales que vayan más allá del típico rectángulo y el cuadrado. En este artículo, te proporcionamos grabaciones de sesiones de trabajo reales, en un proyecto open source, practicando programación en grupo (mob programming). Tomando decisiones de diseño en vivo y aplicándolas a código que puedes ver, tanto en vídeo como en el repositorio de código fuente.
Principios y técnicas
En la línea del artículo anterior, donde explicaba Value Objects y el code smells como Primitive Obsession con una demostración práctica, en estas sesiones grabadas aparecen temas como:
- Principio de menor sorpresa
- Encapsulación
- Tell don't ask
- Nivel de abstracción
- Simetría
- Single responsibility principle
- Value Objects
- Gestión de excepciones
- Técnicas de testing unitario y de integración
- Mock objects
- Servicios de dominio
- Domain driven design
Proyecto
El proyecto open source en el que estamos trabajando, es el backoffice de HuellaPositiva.com. Se trata de un proyecto que está desarrollando la comunidad de voluntarios AyudaDigital, de la cual muchos de nosotros formamos parte. Además de que el propósito del proyecto es muy motivador y de que es un placer trabajar con nuestros stakeholders, la Fundación Soy Mamut, el proyecto también es excelente para formar a los aprendices de Lean Mind. Así conseguimos varios objetivos a la vez, contribuir a la comunidad, aprender y formarnos.
El repositorio de código está en Github.
Estamos abiertos a que cualquier persona participe en el desarrollo, así que si después de ver los vídeos o ver el código quieres dedicar varias horas semanales a colaborar con nosotros, solo tienes que decirlo. Estamos grabando la mayoría de las sesiones de trabajo, incluidas las sesiones de análisis de requisitos con los stakeholders. Pero esas sesiones solo están accesibles para colaboradores del proyecto, no son públicas en Youtube.
Para aquellas personas que tienen interés en trabajar con nosotros, este proyecto también es una gran oportunidad para conocernos profesionalmente. Nos permite vivir la experiencia de trabajar juntos en un proyecto real, sin necesidad de formalidades contractuales, sin necesidad de acuerdos de confidencialidad, porque es un proyecto de fuente abierta. Y con el nivel de compromiso que cada persona quiera y pueda adquirir, sabiendo que el resultado del trabajo es una donación a la comunidad.
Para empresas de desarrollo que tengan ahora mismo personas en el banquillo, proyectos como este también pueden ser una oportunidad para practicar, aprender y contribuir.
A nivel de tecnología, decir que estamos usando Java y Spring Boot para el backend, además de otras librerías y frameworks como JUnit 5 o Lombok. En el frontend estamos usando React.
Aprendices
En Lean Mind mentorizamos aprendices continuamente. Tanto estudiantes de ciclo formativo o de universidad que nos escogen para realizar sus prácticas en empresa, como personas que tienen tiempo disponible y quieren aprender con nosotros o probar a programar juntos. Actualmente, nuestros convenios para prácticas en empresa son con instituciones canarias, pero estamos abiertos a firmar convenios con cualquier institución que apueste por las prácticas en empresa en remoto. El programa de aprendices consiste en estudiar ciertos libros, hacer cursos online, realizar ejercicios de programación con nosotros (code katas), participar en proyectos open source y también participar en proyectos privados de la empresa como "oyentes". La mentorización consiste en resolución de dudas, orientación para trabajar habilidades técnicas y habilidades blandas, como la comunicación o el trabajo en equipo y las sesiones de práctica deliberada, donde co-creamos juntos como sucede con este proyecto. Lo más importante para que la experiencia sea positiva para todas las partes, son las ganas de las personas, su actitud.
Grabaciones
Existen grabaciones de casi todas las sesiones de desarrollo, pero su acceso está reservado a las personas que deciden involucrarse en el proyecto activamente.
Estas son algunas de las sesiones que he dejado con acceso público en mi canal de Youtube:
- OOP y Value Objects - 22 abril 2020
- Gestión de excepciones, OOP, responsabilidades - 24 abril 2020
- OOP: Tell don't ask, value objects, domain services - 26 abril 2020
Para poner un poco de contexto a los vídeos, decir que la funcionalidad que estabamos implementando es de un dominio que cualquiera puede entender. Se trata del registro de un nuevo usuario de la plataforma, uno con el rol "voluntario" (es una herramienta de gestión de voluntariado). En el registro, la persona solo introduce una dirección de email y una contraseña. El sistema persiste estos datos y le envía un correo electrónico donde hay una URL única a la que el usuario debe acceder para confirmar su dirección de correo electrónico. A partir de ahí, podrá acceder al sistema con sus credenciales. Los tres vídeos son diferentes sesiones trabajando en este proceso de registro.
Agradecimientos
Aprovecho la oportunidad para dar las gracias a todos los compañeros de la comunidad Ayuda Digital por su dedicación y esfuerzo, tanto trabajando en el proyecto como mentorizando a los aprendices. Mención especial a Ibai, Pedro, Lolo y Mateja que están volcados con el proyecto.
Y, por supuesto, gracias a nuestros intrépidos aprendices por las ganas y dedicación que están poniendo: Rubén, Juan Antonio, Ismael, Raúl y Borja.