navaja suiza
Dice la teoría de SOA que un servicio puede tener una o más capacidades. Es decir, que “puede hacer más de una cosa”.
Esto podría iniciar una discusión sobre si es bueno o no que un programa o clase haga más de una cosa en la linea de la buena práctica de separation of concerns. Al fin y al cabo, un módulo de software se conoce por tener una gran cohesión interna (básicamente hace sólo una cosa) y un débil acoplamiento, y los servicios no iban a ser menos.
Pero a veces,  diferenciar si una lógica o servicio hace una cosa o hace varias bastante subjetivo. Si tenemos, por ejemplo, un servicio que gestiona la información de un cliente ¿es mejor tener un servicio llamado “Gestionar cliente” con las operaciones de alta y de baja? ¿o es mejor tener dos servicios diferentes que haga una sola cosa?.
Lo que he visto en estos años es que ha veces esto depende del fabricante o del consultor con el que hables. Incluso esto puede llevar a confusión ya que si en una empresa tienen “miles de servicios” puede ser que en realidad lo que suceda es que tienen miles de “operaciones” y que la relación entre servicio y operación sea de uno a uno. En otra empresa sin embargo, se tiene el concepto de servicio con varias operaciones y por supuesto el número de servicios baja drásticamente.
Independientemente de esto, lo que tiene que estar claro a fin de cuentas, es que la capacidad del servicio tiene que ser expresada mediante el contrato. Según los conceptos “académicos” que se manejan en SOA y si pensamos en una implementación en concreto de servicios SOA… podemos decir que la capacidad del servicio es la “antesala” de la operación del web service. Es decir, la operación es la implementación de esta capacidad de hacer algo del servicio. La primera se define en tiempo de desarrollo y la segunda en tiempo de análisis.
En la línea de mis post anteriores, sobre que antes de la orientación a servicios hay que tener orientación a objetos, yo me decanto más por el paralelismo entre objeto o clase de negocio y servicio. Es decir, el servicio viene a representar a la clase y los métodos de la misma se convierten en las operaciones del servicio.
Es decir, que si tenemos la clase de negocio de alto nivel Cliente con los métodos “alta” y “baja” esto se puede traducir al servicio “Gestionar Cliente” (se podría un verbo en el nombre) y las operaciones de “alta”y “baja”.
¿Coincidimos en esto?