En uno de sus últimos artículos Martin Fowler reflexiona sobre la necesidad de que determinados sistemas sean capaces de manejar información contradictoria.

Se presenta el caso del historial médico de un paciente donde se tienen dos notas con los resultados de los análisis de sangre hechos por dos hospitales diferentes. La nota del primer hospital indica que el paciente presenta un tipo de sangre A mientras que la nota del segundo hospital dice que el tipo de sangre del paciente es B.

Podríamos concluir que uno de los dos hospitales se ha equivocado en sus análisis y solicitar un nuevo análisis que nos confirme uno de los dos tipos de sangre. Puede que en este caso no tuviera demasiada importancia el desechar el análisis que hemos confirmado equivocado, sin embargo, podrían existir situaciones donde la contradicción no esté tan clara o incluso pueda deberse a que se haya producido un cambio muy poco probable en el estado de la propiedad bajo consideración. Además, una observación incorrecta podría haber tenido importantes implicaciones en base a decisiones tomadas cuando se pensaba que era cierta, ya que dichas decisiones podrían ser ahora incorrectas. Si eliminamos el valor incorrecto del sistema se pierde el vinculo con esas decisiones y se dificulta su rastreo.

En el caso de un sistema tradicional se hubiera asociado la propiedad ‘Tipo de sangre’ al paciente como un atributo de su clase que solo pudiera presentar un valor en un momento dado, sin embargo, en el articulo se propone un ‘patrón’ para manejar este tipo de información contradictoria de forma genérica y que denomina ‘observación’.

La clase observación guarda todo el estado relativo a una observación dada, como la fecha de su realización o la probabilidad de que sea cierta; puede referirse tanto a la existencia de una cualidad como a su ausencia, algo importante en situaciones donde se desconozca o no sea posible determinar el valor de una propiedad pero el hecho de poder descartar determinados valores amplíe la probabilidades de tomar una decisión correcta.

Se me ocurre que, tal vez entonces, en los casos en que esto sea aplicable, se deba definir una nueva abstracción a un nivel por encima de la ‘observación’, estando dicha abstracción formada por un conjunto de observaciones y por la lógica necesaria para tomar las decisiones apropiadas sobre dicho conjunto en el dominio del problema que se pretenda resolver. Esta nueva abstracción sustituiría a los tradicionales atributos o propiedades de las clases y podría presentarse de tal forma que fuera ‘transparente’ a las entidades que no necesiten más detalles que el valor de la propiedad, y a la vez presentase un interface más o menos complejo para las entidades que deban tomar decisiones en base al conjunto de observaciones.