Come progettare un diagramma di classe UML per due sottosistemi?

0

Attualmente sto lavorando a un progetto con due sottosistemi: un'applicazione Web e un'API Web (utilizzata dall'app Android) ed entrambi vengono sviluppati come progetto separato poiché il sistema API deve essere distribuito su un server diverso ma accederà allo stesso Banca dati. Dopo aver raccolto i requisiti e prodotto casi d'uso, ho progettato tutte le funzionalità del sistema come un singolo sistema (come un diagramma del caso d'uso singolo e non ho progettato esplicitamente diagrammi separati, per esempio diagramma di comunicazione, diagramma di stato ecc. Per applicazioni web e API). Quindi, il mio problema sta qui. Ad esempio, mentre producevo il diagramma delle classi, ho trovato le funzioni getProductDetails () (una funzione chiamata da android / web api) e addNewProduct () (funzione chiamata dall'applicazione web) appartiene allo stesso prodotto di classe. In questo caso, come trasformo il diagramma di classe in codice considerando il fatto che la funzione verrà implementata in due sottosistemi distinti?

Devo produrre la stessa classe in entrambi i sistemi? In questo caso, la funzione addNewProduct () per il sistema API sarebbe inutile e viceversa.

O devo progettare un design separato per entrambi i sistemi?

Qualche idea sulla progettazione del diagramma di classe sarebbe molto apprezzata. PS. Sono novizio nella progettazione del sistema, quindi sono desideroso di avere una buona guida da voi ragazzi.

    
posta Ra Ka 11.10.2015 - 09:34
fonte

3 risposte

1

Ci sono diverse possibilità per visualizzare i due sottosistemi.

Considerazioni preliminari

Ma il fatto che sia difficile modellare i due sistemi intrecciati in UML può indicare che ci sono alcuni problemi con la soluzione. Pertanto, per prima cosa è necessario porsi la domanda se siano realmente due sistemi. Esistono diverse possibili risposte alternative:

  • i tuoi due sistemi sono un singolo sistema che ha due interfacce * ;
  • uno dei due sistemi è costruito sopra l'altro;
  • i tuoi due sistemi sono in realtà tre sistemi con i due sistemi che hai riconosciuto utilizzando le funzionalità comuni di un terzo sistema;
  • i due sistemi sono un numero di micro servizi cooperanti (cioè sistemi a pieno titolo); o,
  • sono davvero due (intrecciati) sistemi.

Una seconda domanda che puoi porsi è "se una classe C ha responsabilità completamente diverse nel sistema S 1 rispetto al sistema S 2 , è la stessa classe o dovrebbe essere due classi distinte ** .

Per rispondere alla domanda.

Per visualizzare due sistemi intrecciati puoi usare il colore.

Ho usato classi in grey per indicare cose come "classi esistenti in un altro sistema che utilizza questo sistema" e "possibilità di estensione futura che esistono ma che non implementeremo all'inizio". Ad esempio, è possibile bluare le classi di colori oi metodi per il sistema S 1 , giallo per il sistema S e verde per la condivisione tra entrambi i sistemi. Con qualche spiegazione i lettori umani lo capiranno e potranno vedere il quadro generale e il modo in cui i sistemi si riferiscono; gli strumenti automatici d'altra parte non saranno in grado di comprendere la semantica allegata al colore.

Oppure puoi utilizzare i pacchetti UML

Ogni sistema può fare riferimento all'altro sysem come pacchetto. È possibile creare un diagramma per ogni sistema. Includere l'altro sistema come un pacchetto nel diagramma del sistema corrente. E traccia le classi dall'altro sistema, che sono rilevanti per il sistema corrente, all'interno del pacchetto dell'altro sistema.

Gli strumenti UML comprendono i pacchetti. La dipendenza circolare può causare un problema. E quando usi i pacchetti devi davvero decidere con il sistema che appartiene a una classe. Non puoi rappresentare una classe con qualche metodo nel sistema * S 1 e alcuni metodi nel sistema S 2 con i pacchetti UML.

[*]: Forse con una o entrambe le interfacce del sistema che non forniscono l'accesso a tutte le funzionalità del sistema.

[**]: Forse le due classi possono condividere lo stesso nome ma essere in pacchetti diversi (in termini UML) e in spazi dei nomi diversi nella tua lingua di implementazione.

    
risposta data 11.10.2015 - 16:21
fonte
0

In una progettazione a livello di sistema, le classi di disegno sono troppi dettagli. La progettazione del sistema dovrebbe contenere solo i sottosistemi e possibilmente i componenti presenti nel sistema e il modo in cui sono connessi.
Nel tuo caso, la progettazione del sistema descrive i due sottosistemi e comunica solo attraverso il database condiviso.

Quando si progettano i sottosistemi, si descrivono le classi che ogni sottosistema ha e quali metodi ha ciascuna classe. Con due sottosistemi, creerai anche due progetti di sottosistemi.

    
risposta data 11.10.2015 - 15:08
fonte
0

Mi piace SysML (un profilo per UML) migliore di UML per fare questo tipo di progettazione di "Sistema di sistemi". La disposizione dei blocchi è un po 'più intuitiva. Inoltre, il gruppo di lavoro SysML ha fatto un grande sforzo per creare dei buoni costrutti di modellazione per le interfacce.

    
risposta data 11.10.2015 - 15:56
fonte

Leggi altre domande sui tag