Pregunta

Tiendo a mantener mis objetos consistentes durante su vida. En algunos casos, configurar un objeto requiere múltiples llamadas a diferentes rutinas. Por ejemplo, un objeto de conexión puede funcionar de esta manera:

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

Tenga en cuenta que este es un ejemplo estúpido para que comprenda el punto. Entre las llamadas a Sethost y Setport, el objeto es inconsistente, porque el puerto aún no se ha especificado, por lo que este código se bloquearía

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

Lo que significa que es un requisito para que Connect () tenga llamadas anteriores a Sethost y SetPort, de lo contrario no podrá operar ya que su estado es inconsistente.

Puede solucionar el problema con un valor predeterminado, pero puede haber casos en los que no se pueda idear un valor predeterminado sensato. Suponemos en el ejemplo posterior que no hay un valor predeterminado para el puerto y, por lo tanto, una llamada a c.connect () sin llamar primero a Sethost y Setport será un estado inconsistente del objeto. Esto, para mí, señala un diseño de interfaz incorrecto, pero puedo estar equivocado, así que quiero escuchar su opinión.

¿Organiza su interfaz para que el objeto siempre esté en un estado consistente (es decir, viable) tanto antes como después de la llamada?

Editar: Por favor, no intentes resolver el problema que di arriba. Sé resolver eso. Mi pregunta es mucho más amplia en sentido. Estoy buscando un principio de diseño, declarado oficial o informalmente, con respecto a la consistencia del estado del objeto entre las llamadas.

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
scroll top