nice notes to good practices in development
metodologiasGeneral Good Practices in programming:
Primero Transformar los datos, después organizar:
Siempre que debamos trabajar con datos y una estructura que requiera ambos pasos. es mejor primero filtrar,limpiar, sacar poner, etc… y finalmente si organizar,agrupar,ordenar,etc…
✦----------------------------------------------------------------------------------------------------------------✦
Una buena forma de buscar buenas practias de codigo es evitar estos code smells
DRY:
Don’t Repeat Yourself
La idea consiste en que no vuelvas a implementar lo que Ya implementastes antes
- funciones
- clases
- constantes
- etc…
Siempre que puedas reutiliza lo util :) ✦----------------------------------------------------------------------------------------------------------------✦
code smells:
boolean parameters:
Ocurre cuando se usan parámetros booleanos (true/false) en métodos, lo que hace que sea imposible saber qué opción se está activando sin leer la implementación interna.
ProcessOrder(orderId, false);SendEmail("a@gmail.com", "b@gmail.com", "Hello!", true);var result = Round (1.234, false);
✅ fix:
La solución es usar enums, sobrecargas de métodos o configuraciones explícitas.
ProcessOrder(orderId, Priority. High);SendEmail("a@gmail.com", "b@gmail.com", ContentType.HTML);var result = Round (1.234, RoundingType.Up);
data clumps:
Se da cuando un grupo de datos (como nombre, apellido y correo) aparece constantemente junto en múltiples firmas de métodos.
Notese como las funciones usan EXACTAMENTE LA MISMA FIRMA. y no solo eso sino que corresponden a los mismos datos en cuestion. esto
function CreateUser(string firstName, string lastName, string email) { ... }function SendWelcomeEmail(string firstName, string lastName, string email) { ... }function UpdateProfile(int userId, string firstName, string lastName, string email) { ... }
✅ fix:
La solución es extraer estos datos en una clase u objeto dedicado para mejorar la organización.
Excessive Dependencies:
Sucede cuando una clase inyecta demasiadas dependencias en su constructor, indicando que tiene demasiadas responsabilidades.
public class OrderService
{
private readonly IOrderRepository _orderRepository;
private readonly IEmailService _emailService;
private readonly IPaymentService _paymentService;
private readonly IInventoryService _inventoryService;
private readonly ILoggingService _loggingService;
private readonly IDiscountService _discountService;
private readonly INotificationService _notificationService;
private readonly IShippingService _shippingService;
} ✅ fix:
- La solución es dividir la clase en componentes más pequeños y enfocados.
Primitive Obsession:
Consiste en usar tipos primitivos (string, int, decimal) para representar conceptos complejos que tienen sus propias reglas de negocio (como una moneda o un email).
✅ fix:
- La solución es crear tipos o clases específicas para encapsular la validación y el comportamiento de esos datos.
Feature Envy:
Ocurre cuando un método parece estar más interesado en los datos de otra clase que en los de su propia clase, accediendo constantemente a las propiedades de un objeto externo.
✅ fix:
- La solución es mover el método a la clase donde residen los datos que manipula.