Question

J'ai tendance à garder mes objets cohérents au cours de leur vie. Dans certains cas, la configuration d'un objet nécessite plusieurs appels à différentes routines. Par exemple, un objet de connexion peut fonctionner de cette manière:

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

Veuillez noter que ce n'est qu'un exemple stupide pour vous permettre de comprendre le point. Entre les appels à Sethost et Setport, l'objet est incohérent, car le port n'a pas encore été spécifié, donc ce code se bloquerait

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

Cela signifie qu'il est nécessaire pour Connect () d'avoir des appels précédents à Sethost et Setport, sinon il ne pourra pas fonctionner car son état est incohérent.

Vous pouvez résoudre le problème avec une valeur par défaut, mais il peut y avoir des cas où aucune valeur par défaut ne peut être conçue. Nous supposons dans l'exemple ultérieur qu'il n'y a pas de défaut pour le port, et donc un appel à C.Connect () sans d'abord appeler Sethost et Setport sera un état incohérent de l'objet. Cela, pour moi, pointe sur une conception d'interface incorrecte, mais je me trompe peut-être, donc je veux entendre votre opinion.

Organisez-vous votre interface afin que l'objet soit toujours dans un état cohérent (c'est-à-dire réalisable) avant et après l'appel?

Éditer: S'il vous plaît, n'essayez pas de résoudre le problème que j'ai posé ci-dessus. Je sais comment résoudre ce problème. Ma question est beaucoup plus large dans le sens. Je recherche un principe de conception, officiellement ou de manière informelle, concernant la cohérence de l'état d'objet entre les appels.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
scroll top