Ho un progetto scolastico in cui io e il mio team dobbiamo costruire un sistema sanitario. Consiste di diversi moduli tra cui:
Un modulo per i medici: consente al medico di accedere alle cartelle cliniche dei suoi pazienti, inviare indicazioni a loro, consultare il suo programma ...
Un modulo per i pazienti: un paziente può prendere un appuntamento con il medico, segnalare un'emergenza o inviare indicatori (livello di glicemia, peso, pressione arteriosa). Ci sono tre tipi di pazienti che devono essere curati dal sistema: donne con una gravidanza rischiosa, diabetici e persone che soffrono di Alzheimer. Questi ultimi sono assistiti da persone della loro famiglia o del personale medico.
Un modulo per il trasporto: per influenzare e inviare un'ambulanza nel luogo in cui un paziente ha segnalato un'emergenza.
Quando proviamo a modellare la soluzione attraverso un diagramma di classe UML (che in realtà è un documento dovuto per il progetto), ci siamo imbattuti in tre problemi / dilemmi:
- Come modellare un paziente?
Il nostro primo pensiero è stato quello di creare una classe utente da cui ereditare le altre classi come questa:
.
Maquestononconsentirebbeadunpazientediessereincintaediabetico,adesempio.Cheèfastidioso.
DopoavercercatosuInternet,abbiamoscopertoilcontrollodegliaccessibasatosuiruoli,noncisiamoapprofonditiperchépensavamochefossedestinatoallagestionedegliaccountealleautorizzazioni,nonaquestionilegatealbusinesscomeunpazienteconruolidiversi(diabeticoeincinta,adesempio).
AllafineabbiamodecisodicreareunaclassePathologyediaggiungereunelencodipatologieperognipaziente.Questoviolaqualsiasiprincipiodibuonaprogettazione?Esisteunmodostandardomiglioreperfarlo?
Unaltroproblemasimilesipresentaconl'assistente.Dalmomentochepuòessereunmembrodellafamigliadelpazienteodellostaffmedico,vorremmochecadessenellaclasseAssistenteinUtenteoinMedicalAssistantclasseinMedicalStaff.Mapensochequestosialostessoproblemadellepatologiedelpaziente.
Sempre con l'assistente, è qui per aiutare un paziente che soffre di Alzheimer: gli fa appuntamenti medici per lui e gli viene comunicato se si allontana troppo lontano (abbiamo incluso un braccialetto indossabile dotato di un GPS nella soluzione) . Ciò ha sollevato il problema della ridondanza poiché abbiamo classi Assistente e Patient che implementano il metodo MakeAppointment (Doctor, Date) . Ciò ha sollevato due possibilità:
- Questo metodo dovrebbe essere nella classe Doctor invece?
- Dovremmo avere un'interfaccia IAppointement contenente il metodo?
Personalmente ritengo che il metodo debba essere spostato nella classe Doctor (forse questa è anche una cosa OOP di base).
- Come rappresentare MVC?
Creeremo un sito Web e un'app mobile che supporta il sistema. Abbiamo pensato di utilizzare ASP.NET per darci una mano e conoscere il modello di progettazione MVC. Dopo un po 'di documentazione (principalmente dalla serie "MVC In PHP" di Tom Butler e "GUI Architectures di Martin Fowler (entrambi sui loro siti Web), siamo venuti a chiederci se i livelli Controller e View dovrebbero essere rappresentati in un diagramma di classe come questo:
.
Abbiamo trovato questo post su StackOverflow che fa una domanda simile:
Come creare diagrammi di classe UML per MVC
Si dice che solo il modello (classi correlate alle imprese) dovrebbe essere rappresentato. Ma è una regola generale? Dovrebbero essere rappresentate le classi Controller e View? Come si tradurrebbe in un diagramma di sequenza?
Mi dispiace per il fatto che il post sia così lungo e le domande abbastanza eterogenee. Grazie in anticipo per qualsiasi aiuto, consiglio o commento che potresti darci.