Ho un metodo che inserisce nel calendario Android un evento. Puoi vedere uno snippet semplificato in due passaggi: 1) dichiarare le variabili 2) I put
in un tipo di matrice che alla fine sarà insert
nel calendario e funziona flawlessy:
private void InsertCalendarEvent() {
//1)here I declare the variables startMills and endMills
Calendar beginTime = Calendar.getInstance();
beginTime.set(2018, 9, 11, 8, 30);
startMillis = beginTime.getTimeInMillis();
Calendar endTime = Calendar.getInstance();
endTime.set(2018, 9, 11, 10, 30);
endMillis = endTime.getTimeInMillis();
//2)here insert the values in the db with put(to buid the array)
// and then finalizing with insert
cr = this.getContentResolver();
ContentValues values = new ContentValues();
values.put(CalendarContract.Events.DTSTART, startMillis);
values.put(CalendarContract.Events.DTEND, endMillis);
values.put(CalendarContract.Events.TITLE, editTextValue);
values.put(CalendarContract.Events.DESCRIPTION, "Time to Run!");
Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values);
}//end of the method
Ora il mio caso d'uso è che ho bisogno di inserire lo stesso evento in momenti diversi.
Quindi mi chiedo quale schema di progettazione dovrei usare per evitare duplicazioni. Fondamentalmente ho bisogno di cambiare il punto "1)" le 2 variabili del tempo startMillis
e endMillis
, e mantenere iterando immagino il punto "2)" in modo che le due diverse variabili temporali vai al punto "2" e inserisci diversi eventi
Ho pensato approcci diversi 1) DAVVERO CATTIVO. Ripeti tutto il codice ogni volta scrivendo metodi consecutivi come
insertCalendarEventNow();
insertCalendarEventAfterFifteenHours();
insertCalendarEventAfterTweentyEightHours();
//TODO and so on
2) Dividere insertCalendarEvent in due metodi, in qualche modo refactoring il codice in un'altra classe, magari usando un POJO, ArrayList con Map < & gt ;, ma non sono sicuro di come implementare
3) Crea più classi per mantenere la Single Responsibility ma non so come farlo
In che modo un buon architetto potrebbe procedere con questo caso d'uso?
EDIT:
La seconda soluzione sarebbe la strada da percorrere, evitando ArrayList
e POJO
?
1) Più semplice ma cattivo La soluzione più semplice duplica molto codice:
//just pass equal methods with different settings
addEventAfterOneHour();
addEventAfterSixHours();
addEventAfterEightHours();
addEventAfterThirtyHours();
2) Meglio nella stessa classe senza usare POJO:
addEvent(startTimeOneHour,EndTimeOneHour);
addEvent(startTimeSixhours,endTimeSixHours);
addEvent(startTimeEighthours,endTimeEightHours);
addEvent(startTimeThirtyhours,endTimeThirtyHours);
//with an addEvent(Long startTime,Long endTime)