Come modellare la gestione degli utenti usando il diagramma delle classi UML?

3

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:

  1. 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.

  • Come modellare un assistente?
  • 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).

    1. 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.

        
    posta PolarCrow 29.04.2017 - 13:41
    fonte

    1 risposta

    4

    1. Come modellare un paziente?

    Il tuo design, con Account , User e le diverse derivate degli utenti sono già un buon inizio.

    Il Patient potrebbe effettivamente essere un tipo speciale di User . Tuttavia, Patient è non a Diabetic , Alzheimer o Pregnant . Lui / lei ha una patologia come Diabetes o Alzheimer , o uno stato come Pregnant . Lui / lei può anche avere diverse patologie allo stesso tempo. Pertanto raccomando vivamente di andare su un'associazione di Patient con uno o più Pathologies . Quindi utilizza il principio di composizione sull'ereditarietà .

    Come sei arrivato a questo orientamento da solo, posso solo confermare che sei un buon esempio.

    Come modellare un Assistente?

    L'assistente è proxy per un Patient , almeno nel senso degli affari. Non fissa un appuntamento per se stesso: prende un appuntamento per conto di un paziente. Altri pazienti possono fare da soli i loro appuntamenti.

    Quindi il metodo per fissare un appuntamento dovrebbe essere offerto da Doctor (o più precisamente dal programma del dottore). Ma questo non si oppone ad avere anche un MakeAppointment() su Assistant , che inoltrerà la chiamata al relativo Doctor .

    E a proposito, un paziente ha anche un programma: non dovresti in linea di principio fare 2 appuntamenti allo stesso tempo per lo stesso paziente. Questo porta ad un ulteriore approccio: potresti vedere molto bene% d_de% come "Script di transazione" , che controlla se l'orario del medico e del paziente è libero in un dato momento, quindi prenota l'appuntamento sul programma del medico, quindi lo prenota sul programma del paziente.

    3. Come rappresentare MVC?

    In effetti dipende dallo scopo del tuo diagramma UML.

    Se è un modello di dominio , allora dovrebbe contenere solo oggetti di dominio (es. pazienti, medici, utenti) e nessun controller o vista, il che renderebbe il modello più difficile da capire.

    Tuttavia, se si tratta di un modello di implementazione, è possibile mostrare qualsiasi classe sia necessaria per creare il software, inclusi i controller e le viste.

    Altre informazioni sul modello di ruolo

    Per tornare al modello di ruolo, il problema discusso su MakeAppointment esiste in realtà anche per altri ruoli. Ad esempio, un medico potrebbe anche essere un paziente, se si rompe una gamba.

    Quindi un utente potrebbe avere diversi ruoli. Ciò richiederebbe similmente un design di composizione: il Pathology avrebbe l'identità e ogni utente potrebbe avere diversi ruoli. Devi quindi pensare a quali attributi sono generali e appartengono all'utente e quali sono specifici per un ruolo.

        
    risposta data 29.04.2017 - 18:14
    fonte

    Leggi altre domande sui tag