Tendo a mantenere gli oggetti coerenti durante la loro vita. In alcuni casi, l'impostazione di un oggetto richiede più chiamate a routine diverse. Ad esempio, un oggetto di connessione può operare in questo modo:
Connection c = new Connection();
c.setHost("http://whatever")
c.setPort(8080)
c.connect()
per favore nota che questo è solo un esempio stupido per farti capire il punto. Tra le chiamate a setHost e setPort l'oggetto è incoerente, perché la Porta non è stata ancora specificata, quindi questo codice si arresterebbe in modo anomalo
Connection c = new Connection();
c.setHost("http://whatever")
c.connect()
Significa che è necessario che connect () abbia chiamate precedenti sia a setHost che a setPort, altrimenti non sarà in grado di funzionare in quanto il suo stato è incoerente.
È possibile risolvere il problema con un valore predefinito, ma potrebbero esserci casi in cui non è possibile definire alcun valore predefinito. Nell'esempio successivo assumiamo che non esiste un valore predefinito 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, indica un design dell'interfaccia scorretta, ma potrei sbagliarmi, quindi voglio sentire la tua opinione.
Organizzate la vostra interfaccia in modo che l'oggetto sia sempre in uno stato coerente (cioè lavorabile) sia prima che dopo la chiamata?
Modifica : non tentare di risolvere il problema che ho esposto sopra. So come risolverlo. La mia domanda è molto più ampia nel senso. Sto cercando un principio di progettazione, dichiarato ufficialmente o informalmente, riguardante la coerenza dello stato dell'oggetto tra le chiamate.