Ir al contenido principal

Entradas

De Coverlet a JaCoCo: Trayendo la magia de la cobertura a Android Studio

Todo comenzó un día cualquiera, mientras revisaba un reporte de cobertura de pruebas generado por Coverlet para un proyecto en .NET. Me quedé fascinado por el nivel de detalle y claridad que proporcionaba: saber exactamente qué partes del código estaban cubiertas por las pruebas, y cuáles no. Fue entonces cuando me pregunté: ¿Y si pudiera tener algo así en mi proyecto de Android con Kotlin y Jetpack Compose? La Chispa Inicial ✨ Como desarrollador, siempre busco mejorar la calidad de mi código, y contar con herramientas que me permitan medir la cobertura de pruebas es clave. Después de una rápida búsqueda, me topé con **JaCoCo**, una herramienta muy popular para medir cobertura de código en proyectos Java y Kotlin. ¡Lo mejor de todo es que es compatible con Android Studio! Mi objetivo estaba claro: debía integrar JaCoCo en mi proyecto de Android para tener reportes detallados de cobertura, tal como lo había visto en Coverlet. El Desafío: Configurar JaCoCo en un Proyecto Android 🛠️ El p...

Orientaciones iniciales para una arquitectura limpia

Orientación para estructurar un proyecto de forma escalable: 1. API en un proyecto :  * Objetivos:    * Crear una interfaz para que otras aplicaciones o servicios interactúen con la lógica de negocio.    * Definir endpoints para diferentes operaciones (CRUD, autenticación, etc.).    * Establecer un contrato claro entre la capa de presentación y la lógica de negocio.  * Herramientas:    * ASP.NET Core Web API: Framework popular para crear APIs RESTful en .NET.    * Entity Framework Core: ORM para mapear modelos de dominio a bases de datos.    * Swagger: Herramienta para generar documentación de la API.  * Pasos:    * Crear un proyecto ASP.NET Core Web API.    * Definir los modelos de dominio que representan las entidades del negocio.    * Crear controladores para cada endpoint, mapeando las solicitudes HTTP a operaciones con los modelos de dominio.    * Implementar la lógica...

Standard de Nomenclatura de nombres para C#

Estándar para nombrar en c# 1. ** Clases y Estructuras: **    - PascalCase: `MiClase`, `MiEstructura`. 2. ** Interfaces :**    - PascalCase: `IMiInterface`. 3. ** Métodos y Propiedades :**    - PascalCase: `MiMetodo`, `MiPropiedad`. 4. ** Variables y Parámetros :**    - camelCase: `miVariable`, `miParametro`. 5. ** Constantes :**    - MAYÚSCULAS_CON_GUIONES_BAJOS: `MI_CONSTANTE`. 6. ** Campos :**    - camelCase con subrayado inicial para campos privados: `_miCampoPrivado`. 7. ** Eventos :**    - PascalCase con el sufijo "EventHandler" para delegados de eventos: `MiEvento`, `MiEventoHandler`. 8. ** Delegados :**    - PascalCase con el sufijo "Delegate": `MiDelegado`. Estas son las convenciones básicas, pero recuerda que lo más importante es mantener la consistencia dentro de tu código y seguir las convenciones establecidas en tu equipo de desarrollo.

Modificadores de acceso c#

En C#, los modificadores de acceso se utilizan para controlar la visibilidad y accesibilidad de clases y sus miembros (campos, métodos, propiedades, etc.). 1. public : El miembro es accesible desde cualquier parte del código, tanto dentro de la misma clase como desde otras clases que estén en el mismo ensamblado o en ensamblados diferentes.         public class MiClase     {         public int MiVariable;         public void MiMetodo() { }     }      2. private : El miembro es accesible solo dentro de la clase en la que se define. No es accesible desde clases externas ni desde otras partes del código.          public class MiClase     {         private int MiVariable;         private void MiMetodo() { }     }      3. protected : El miembro es accesible dentro de la clase que lo define y en las c...

Programación asíncrona comparación Kotlin y C#

La programación asíncrona es un enfoque en la programación que permite que las tareas se ejecuten de manera independiente y no bloqueante. En lugar de esperar a que una tarea se complete antes de pasar a la siguiente, las tareas se pueden ejecutar en paralelo o de manera secuencial, lo que mejora la eficiencia y la capacidad de respuesta de las aplicaciones. ¿Como implementar programación asíncrona en Kotlin? Usando Coroutines. Las coroutines en Kotlin son una forma de escribir código asíncrono de manera más concisa y legible. En lugar de bloquear el hilo principal mientras esperamos a que se complete una tarea, las coroutines permiten que el hilo siga ejecutándose mientras esperamos que una tarea asincrónica termine. Esto mejora la eficiencia y la capacidad de respuesta de las aplicaciones. Un ejemplo básico: KOTLIN import kotlinx.coroutines.* fun main() {     println("Inicio")     // Lanzar una coroutine     GlobalScope.launch {       ...

El Principio de Responsabilidad Única

  Responsabilidad Única El Principio de Responsabilidad Única (Single Responsibility Principle, SRP) establece que una clase debe tener una única responsabilidad y que esta responsabilidad debe estar encapsulada en esa clase. En otras palabras, una clase debe tener un único motivo para cambiar.   La idea detrás del principio de responsabilidad Única es mantener el código limpio y modular, evitando que una clase tenga múltiples responsabilidades que puedan generar acoplamiento innecesario y dificultar el mantenimiento y la reutilización del código. Al adherirse a este principio, se busca mejorar la cohesión de las clases, donde cada una se centra en una tarea específica y bien definida. El siguiente ejemplo NO aplica el principio de responsabilidad Única: El siguiente ejemplo SI aplica el principio de responsabilidad Única:      

Principios SOLID del Tio Bob

  Principios SOLID del Tio Bob Los principios sólidos son un conjunto de pautas de diseño de software que se centran en lograr código limpio, modular y mantenible. Estos principios fueron propuestos por Robert C. Martin (Uncle Bob) y se consideran fundamentales en el desarrollo de software orientado a objetos. Los cinco principios sólidos son los siguientes:   1. Principio de Responsabilidad Única (Single Responsibility Principle, SRP): Una clase debería tener una única responsabilidad. Esto significa que una clase debe tener una única razón para cambiar. Al tener una responsabilidad única, se logra un código más cohesivo y fácil de mantener.   2. Principio de Abierto/Cerrado (Open/Closed Principle, OCP): Las entidades de software (clases, módulos, etc.) deben estar abiertas para su extensión pero cerradas para su modificación. Esto significa que el comportamiento de una entidad puede ser extendido sin necesidad de modificar su código fuente original.  ...