Domanda

Tendo a mantenere coerenti i miei oggetti durante la loro vita. In alcuni casi, la configurazione di un oggetto richiede più chiamate a routine diverse. Ad esempio, un oggetto di connessione può funzionare in questo modo:

Connection c = new Connection();
c.setHost("http://whatever")
c.setPort(8080)
c.connect()

Si prega di notare che questo è solo uno stupido esempio per farti capire il punto. Tra le chiamate tra Sethost e SetPort, l'oggetto è incoerente, poiché la porta non è stata ancora specificata, quindi questo codice si bloccherebbe

Connection c = new Connection();
c.setHost("http://whatever")
c.connect()

Significa che è un requisito per Connect () avere chiamate precedenti sia a Sethost che a SetPort, altrimenti non sarà in grado di operare poiché il suo stato è incoerente.

È possibile risolvere il problema con un valore predefinito, ma potrebbero esserci casi in cui non è possibile ideare alcun valore predefinito. Partiamo dal presupposto che nell'esempio successivo non vi sia alcuna impostazione predefinita per la porta, e quindi una chiamata a C.Connect () senza prima chiamare sia Sethost che SetPort sarà uno stato incoerente dell'oggetto. Questo, per me, punta a un design di interfaccia errato, ma potrei sbagliarmi, quindi voglio sentire la tua opinione.

Organizzi la tua interfaccia in modo che l'oggetto sia sempre in uno stato coerente (cioè praticabile) sia prima che dopo la chiamata?

Modificare: Per favore, non cercare di risolvere il problema che ho dato sopra. So come risolverlo. La mia domanda è molto più ampia di senso. Sto cercando un principio di progettazione, dichiarato ufficialmente o informale, per quanto riguarda la coerenza dello stato degli oggetti tra le chiamate.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top