La porta di un componente UML può essere solo un singleton?

1

Sto lavorando su un incarico software in cui il design è basato su componenti. I componenti hanno porte che forniscono interfacce.

Il mio professore sostiene che la classe Port che è esposta da ciascun componente dovrebbe essere un Singleton, in quanto la porta deve essere l'unico modo per interagire con il componente. A mio avviso, più istanze non interferiscono con il requisito che la porta debba essere il singolo punto di interazione.

È come singleton il modo giusto per implementare una porta per il componente?

Per fare un esempio: L'incarico è un modello di un aeroplano e di un aeroporto. I componenti sono parti diverse di un aeroplano e l'aeroporto. Poiché si tratta di un incarico di gruppo, diversi studenti devono implementare diverse componenti. Questo è il diagramma UML delle diverse componenti dell'aeroporto:

Le interfacce sono implementate in una classe chiamata Port, che è una classe interna all'attuale implementazione. La classe esterna ha una porta di campo pubblica ed è un singleton. I diversi componenti interagiscono caricando il Jar-File e accedendo all'istanza Port tramite reflection.

    
posta patrick246 30.01.2018 - 16:06
fonte

2 risposte

4

Can the port of a UML component only be a singleton?

Secondo il link UML ha notazione per indicare più istanze di una porta , oltre a interfacce multiple in una porta.

Multiplicity of a port (if any) is shown after the port name in square brackets. Both name and multiplicity of port are optional.

UML Port with multiplicity - Library Services class has 1 to 6 searchPort ports.

Library Services class has 1 to 6 searchPort ports.

Nei diagrammi UML, molto probabilmente vedrai la maggior parte dei diagrammi con una porta. Da una prospettiva logica , questo è corretto. Da una prospettiva di implementazione , non dovrebbe avere importanza.

Logicamente, ci si connette a un'istanza di un componente che espone funzionalità sulla porta. Nella vita reale ci possono essere più istanze dello stesso componente e ti interessa solo l'interazione con uno di loro.

    
risposta data 30.01.2018 - 16:39
fonte
1

Singelton come concetto

Sì, poiché la porta è una risorsa limitata dovrebbe esserci un solo oggetto in fase di runtime (un singleton) che interagisce con esso. Dovrebbe gestire l'accesso simultaneo di altri componenti a quella porta.

Quindi la tua applicazione dovrebbe creare solo un'istanza di "PortHandler".

Singelton come modello di codice

Spesso il logico singelton come descritto sopra è realizzato in codice usando il Singelton Pattern ( private constructor e static accessor method)

Questo dovrebbe essere evitato.

Il motivo è che questo accesso statico rende il codice strettamente accoppiato e quindi difficile da riutilizzare e, di conseguenza, difficile da testare. Anche questi "singeltons supportati dal codice" sono semplicemente delle variabili globali che sono conosciute come cattive fin dall'inizio della programmazione ...

es .: se vuoi unittest il tuo codice interagendo con il "PortHandler", potresti voler sostituire il vero "PortHandler" con un test doppio che puoi programmare configurare per produrre dati ben definiti per il codice testato.

Se il tuo codice sotto test ottiene il "PortHandler" tramite il metodo di accesso statico di Singelton Pattern è difficile da sostituire.

Se passi il "PortHandler" in dependency injection (usando un framework DI per caso) sostituendolo per il test è facile ...

    
risposta data 30.01.2018 - 16:24
fonte

Leggi altre domande sui tag