Le but du code ci-dessous est de déterminer si une date donnée est considéré comme un « week-end » soit après 24:00 le jeudi, 2 jours minimum et avant lundi 24:00C# Commutateur Déclaration refactorisation
Est il y a une meilleure façon? Si-Else devient laid et le modèle de stratégie est beaucoup trop de travail pour cela.
public bool ValidateWeekend(DateTime pickupDate, DateTime dropoffDate)
{
TimeSpan ts = dropoffDate.Subtract(pickupDate);
if (ts.TotalDays >= 2 && ts.TotalDays <= 4)
{
switch (pickupDate.DayOfWeek)
{
case DayOfWeek.Thursday:
if (pickupDate.Hour >= 12)
{
switch (dropoffDate.DayOfWeek)
{
case DayOfWeek.Sunday:
return true;
case DayOfWeek.Monday:
if (dropoffDate.Hour <= 12)
{
return true;
}
return false;
}
}
break;
case DayOfWeek.Friday:
switch (dropoffDate.DayOfWeek)
{
case DayOfWeek.Sunday:
return true;
case DayOfWeek.Monday:
if (dropoffDate.Hour <= 12)
{
return true;
}
return false;
}
break;
case DayOfWeek.Saturday:
switch (dropoffDate.DayOfWeek)
{
case DayOfWeek.Sunday:
return true;
case DayOfWeek.Monday:
if (dropoffDate.Hour <= 12)
{
return true;
}
return false;
}
return false;
}
}
return false;
}
En plus de refactoring du code dupliqués dans sa propre méthode comme indiqué ci-dessous, je suis grand fan d'utiliser une approche plus fonctionnelle de la solution. Isolez votre logique pour chaque jour dans sa propre fonction spécifique, puis créez une carte qui a des jours comme clés et la méthode appropriée comme valeurs. Avec une combinaison de mettre vos dates de ramassage dans leurs propres méthodes comme je l'ai dit ci-dessus, puis en utilisant lamdas pour faire votre logique de sortie, je pense que le code devient nettement plus propre. –