Hallo allerseits,
ich habe letztens ein paar Videos zum Thema Refaktorisierung gesehen. Und da habe ich festgestellt, dass das mein Code teilweise dringend nötig hätte. Daraufhin habe ich mein aktuelles Projekt überarbeitet, aber an einer Stelle habe ich keine Ahnung, wie ich das refaktorisieren könnte.
Kurze Erklärung zum Code: Die Methode bekommt einen beliebigen Wochentag per Parameter und errechnet dann die Woche drum herum. Wenn also ein Mittwoch der 14. reinkommt, berechnet er also den Dienstag den 13. und Montag den 12. und die darauffolgenden Tage bis Sonntag, sodass das ganze grafisch dann so aussieht:
Hat jemand eine Idee, wie ich das schöner machen, also refaktorisieren kann? Denn besonders wenn ich jetzt auch noch die Erkennung ausbaue, dass vor dem 1. eines Monats nicht der 0. und -1. kommt oder nach dem 31. nicht der 32. folgt, wird das noch verwirrender.
Falls jemand Ideen hat, wäre ich sehr dankbar.
Gruß,
Prafy
P.S.: Oder gibt es vielleicht sogar grundlegend andere Vorschläge, weil ich es mir wieder viel zu kompliziert mache? Hinweis: Ja, ich habe extra eine eigene Klasse Day geschrieben, die ich deshalb hier in der Methode auch so gesondert behandeln muss.
ich habe letztens ein paar Videos zum Thema Refaktorisierung gesehen. Und da habe ich festgestellt, dass das mein Code teilweise dringend nötig hätte. Daraufhin habe ich mein aktuelles Projekt überarbeitet, aber an einer Stelle habe ich keine Ahnung, wie ich das refaktorisieren könnte.
Code:
private Day[] createWeek(Day day)
{
DayOfWeek dayName = DayOfWeek.MONDAY;
week = new Day[7];
switch(day.getDay())
{
case MONDAY:
for(int i = 0; i < 7; i++)
{
week[i] = new Day(dayName.plus(i), (byte) (day.getDayNumber() + i), day.getMonth(), day.getYear());
}
week[0].setToday(true);
break;
case TUESDAY:
week[0] = new Day(dayName, (byte) (day.getDayNumber() - 1), day.getMonth(), day.getYear());
for(int i = 0; i < 6; i++)
{
week[i + 1] = new Day(dayName.plus(i + 1), (byte) (day.getDayNumber() + i), day.getMonth(), day.getYear());
}
week[1].setToday(true);
break;
case WEDNESDAY:
week[0] = new Day(dayName.plus(0), (byte) (day.getDayNumber() - 2), day.getMonth(), day.getYear());
week[1] = new Day(dayName.plus(1), (byte) (day.getDayNumber() - 1), day.getMonth(), day.getYear());
for(int i = 0; i < 5; i++)
{
week[i + 2] = new Day(dayName.plus(i + 2), (byte) (day.getDayNumber() + i), day.getMonth(), day.getYear());
}
week[2].setToday(true);
break;
case THURSDAY:
for(int i = 0, j = 3; i < 3; i++, j--)
{
week[i] = new Day(dayName.plus(i), (byte) (day.getDayNumber() - j), day.getMonth(), day.getYear());
}
for(int i = 0; i < 4; i++)
{
week[i + 3] = new Day(dayName.plus(i + 3), (byte) (day.getDayNumber() + i), day.getMonth(), day.getYear());
}
week[3].setToday(true);
break;
case FRIDAY:
for(int i = 0, j = 4; i < 4; i++, j--)
{
week[i] = new Day(dayName.plus(i), (byte) (day.getDayNumber() - j), day.getMonth(), day.getYear());
}
for(int i = 0; i < 3; i++)
{
week[i + 4] = new Day(dayName.plus(i + 4), (byte) (day.getDayNumber() + i), day.getMonth(), day.getYear());
}
week[4].setToday(true);
break;
case SATURDAY:
for(int i = 0, j = 5; i < 5; i++, j--)
{
week[i] = new Day(dayName.plus(i), (byte) (day.getDayNumber() - j), day.getMonth(), day.getYear());
}
for(int i = 0; i < 2; i++)
{
week[i + 5] = new Day(dayName.plus(i + 5), (byte) (day.getDayNumber() + i), day.getMonth(), day.getYear());
}
week[5].setToday(true);
break;
default:
for(int i = 0, j = 6; i < 7; i++, j--)
{
week[i] = new Day(dayName.plus(i), (byte) (day.getDayNumber() - j), day.getMonth(), day.getYear());
}
week[6].setToday(true);
break;
}
return week;
}
Hat jemand eine Idee, wie ich das schöner machen, also refaktorisieren kann? Denn besonders wenn ich jetzt auch noch die Erkennung ausbaue, dass vor dem 1. eines Monats nicht der 0. und -1. kommt oder nach dem 31. nicht der 32. folgt, wird das noch verwirrender.
Falls jemand Ideen hat, wäre ich sehr dankbar.
Gruß,
Prafy
P.S.: Oder gibt es vielleicht sogar grundlegend andere Vorschläge, weil ich es mir wieder viel zu kompliziert mache? Hinweis: Ja, ich habe extra eine eigene Klasse Day geschrieben, die ich deshalb hier in der Methode auch so gesondert behandeln muss.