dove dovrebbe mettere il metodo showSchedule nel sistema scolastico

1

Nel mio sistema di gestione della scuola ho questo diagramma di classi parziale:

1 - In un caso d'uso, lo studente desidera vedere il suo programma di lezioni in settimana. questo è quello che suppongo di fare:

ottieni student oggetto dalla sessione e chiama il metodo getSchedule() su quello e mi darà un orario (questo metodo chiama StudentCourse , Course per ottenere la pianificazione).

È un buon posto dove mettere il metodo getSchedule() o dovrei inserirlo altrove?

............................................... ...

2 - In un altro genitore dello studente della classe use vuole vedere la sua schedulazione della classe figlio, ho intenzione di fare qualcosa del genere:

Poiché ho alcuni casi d'uso che il genitore vuole vedere qualche altra informazione dello studente (segno del corso ...), creo l'interfaccia StudentParentInterface che ha il metodo getSchedule() e altri metodi e lo studente implementa StudentParentInterface , quindi genitore ha riferimento a StudentParentInterface non student obj direttamente.

genitore chiama getSchedule() metodo su StudentParentInterface , è corretto?

    
posta mohsenJsh 26.12.2014 - 23:06
fonte

3 risposte

1

Come ho detto nei commenti sull'OP, non credo che una classe di classe di interfacciamento abbia senso in questo caso poiché esiste una relazione diretta tra Studenti e Genitori.

Pensa alle relazioni dei concetti al di fuori del sistema. Ogni studente ha un programma?

Con la mia conoscenza limitata direi che sembra proprio così. Sembra anche che tu voglia che i genitori possiedano qualcosa student.getGrades (). Quindi probabilmente avrai più genitori per uno studente. Lo studente non dovrebbe essere a conoscenza del genitore, ma il genitore deve essere consapevole dello studente in modo che ogni oggetto padre abbia una proprietà Studente e probabilmente chiamerà getSchedule () e getGrades () ecc.

    
risposta data 27.12.2014 - 18:45
fonte
1

A livello generale, il metodo deve andare con l'oggetto che ha la responsabilità della funzione.

In base al tuo dominio, Student ha la responsabilità di fornire un metodo GetSchedule() , in quanto Student possiede i corsi che sta prendendo.

E anche se Parent potrebbe avere l'obbligo di vedere la pianificazione di Student s, la responsabilità di eseguire quel metodo dipende ancora da Student e non da Parent .

Quindi nel caso semplice, GetSchedule() appartiene a Student .

Nel caso più complesso, potresti avere un requisito che dice che Parent dovrebbe essere in grado di vedere la pianificazione di Student senza coinvolgere Student . A quel punto, avrai bisogno di un altro mezzo per accedere al sistema in modo che Parent possa chiamare l'equivalente di GetSchedule(Student) e passare il loro Student come parametro al nuovo metodo.

Quindi potresti creare una classe chiamata Registrar e una Parent può invocare Registrar.GetSchedule(Parent.MyStudent) per consentire a Parent di scoprire la pianificazione di Student senza coinvolgere Student .

    
risposta data 27.12.2014 - 21:02
fonte
1

Non mi è chiaro se stai seguendo una metodologia OO che utilizza prima l'analisi. In questo modo, hai prima classi che rappresentano solo il dominio del problema. Quindi consideri le stesse classi software, ma ti è permesso di deviare da quello.

getSchedule() potrebbe essere un metodo in un cosiddetto Controller caso d'uso conosci anche come Front Controller che può essere visto come un caso speciale di Schema mediatore .

TL; DR

Se hai problemi a trovare il posto giusto per mettere un metodo, perché non è in linea con le responsabilità delle classi esistenti (viola il principio di coesione), allora è OK creare una classe separata che gestisca quella funzione. Craig Larman chiama questo Pure Fabrication , o una classe che non è mappata dominio problematico. Nel tuo caso, potresti chiamarlo ScheduleManager .

    
risposta data 28.12.2014 - 23:34
fonte