Open jcarrascoa7 opened 2 months ago
Tendría que ver un ejemplo con código pa cachar bien. Pero me parece que la segunda solución es mejor. Yo haría algo como esto:
public bool AreMarksCorrect(List<Student> course)
{
foreach(Student student in couse)
if(! AreMarksCorrect(student))
return false;
return true;
}
private bool AreMarksCorrect(Student student)
=> student.IsEveryMarkBetweenOneAndSeven() &&
student.IsTheNumOfMarksCorrect();
... yo haría algo de ese estilo. Básicamente tendría un método de alto nivel que chequee si el elemento dentro del foreach (el estudiante en este caso) es válido. Y para ver si ese elemento es válido, tendría llamados a los distintos métodos que chequean cada condición. Así no tienes duplicado el foreach ni tienes que iterar más veces de las necesarias por las listas.
¿Esto responde tu pregunta? :)
Sí, me queda claro!
Muchas gracias!
Hola!
Tengo una duda respecto a cómo aplicar correctamente Clean Code en una situación donde chocan dos de sus filosofías:
1.- No duplicar código 2.- Que cada función haga una sola cosa.
La situación que me causa dudas es aquella en la que quiero validar más de una condición para un mismo atributo de una clase.
Por ejemplo, supongamos que existe una clase
Ramo
que tiene una lista de varios elementos de una claseAlumno
. Cada alumno, a su vez, tiene una lista con todas sus notas obtenidas en ese ramo.Supongamos que ahora me gustaría verificar que todas las notas estén entre 1 y 7 y que el número de notas esté entre 0 y el número de evaluaciones que se realizaron.
Se me ocurren dos posibles opciones:
1.- Crear dos funciones independientes donde cada una recorra la lista de todos los alumnos del ramo y luego de sus notas, verificando ambas condiciones por separado, pero repitiendo el código de iteración.
2.- Crear una única función que recorra una única vez la lista de alumnos y sus notas, verificando ambas condiciones dentro de esa iteración. En este caso no se duplicaría código, sin embargo, la función no cumpliría con hacer una única cosa a la vez ya que estaría validando dos cosas distintas.
A primera vista me quedaría con la opción 1, sin embargo, cada vez que leo el código veo el código de iteración duplicado y me hace ruido.