Pregunta

He estado leyendo sobre DDD y creo que pueden usar los servicios mal o al menos de una manera no tan ideal. Mis clases de servicio tienden a tener un buen número de variables de instancia que contienen referencias de depósito y parece que hacer un montón de trabajo (es decir, tienen una gran cantidad de métodos).

¿Es aconsejable crear servicios más específicos? Al igual que un método por el servicio que realiza alguna lógica específica? Además, deben clases de servicio almacenar variables de instancia a otras entidades? He leído algo acerca de los servicios de ser sin estado, no estoy seguro de si estoy rompiendo esa regla por tener esas variables de instancia.

Gracias!

¿Fue útil?

Solución

  

Mis clases de servicio tienden a tener bastante   una pocas variables de instancia ...

Esto no es necesariamente un código de olor. Si el servicio requiere de muchas dependencias para completar su trabajo, este es simplemente un hecho.

  

... que parecen hacer mucho trabajo (es decir,   tener una gran cantidad de métodos).

     

¿Es aconsejable crear servicios más específicos?

Como regla general, cuanto más granular que puede hacer que sus servicios interfaces (es decir, el menor número de métodos), el mejor (he tenido que arrastre a través de una interfaz con cincuenta métodos en él en busca de la que se desea llamar? ). Pero a menos que usted está liberando como una API pública, la granularidad de sus interfaces de servicio puede ser refinado a medida que avanza. A menudo, cuando se inicia un proyecto, voy a empezar con un solo servicio, que se dividió con el tiempo. Si usted es el consumidor de estos servicios, a continuación, cuando se empieza a sentir el dolor de una interfaz de llegar a grande, usted sabrá que es hora de romper para arriba. Por supuesto, si esto es una API pública, entonces usted tendrá que hacer un montón de diseño más por adelantado.

  

Además, deben clases de servicio almacenar variables de instancia a otras entidades? He leído algo acerca de los servicios de ser sin estado, no estoy seguro de si estoy rompiendo esa regla por tener esas variables de instancia.

El almacenamiento de dependencias como variables de instancia no implica necesariamente que su servicio no es sin estado, siempre y cuando las variables de instancia son también sin estado. Para ser considerado sin estado, las llamadas a métodos en un servicio no deben de ninguna manera dependen de los métodos anteriores tienen que llama. Usted debe ser capaz de cargar una sola instancia de servicio, y lo han compartido para su aplicación (es decir, una instancia de un servicio sin estado no debe ser específica para la sesión de un usuario en particular). En otras palabras, su servicio no debe mantener cualquier estado entre llamadas a métodos. Almacenamiento de un repositorio de la dependencia sin estado como una variable en una instancia de servicio no viola este requisito.

La razón por la que los servicios sin estado es un objetivo deseable, está teniendo ningún estado reduce en gran medida la posibilidad de errores. Simplifica el ensayo de un método de servicio mediante la restricción de los casos de prueba a la variación de los parámetros pasados, en lugar de tener que preocuparse por el estado previo del servicio. También puede ofrecer ventajas de rendimiento.

Otros consejos

Yo recomendaría leer sobre la inyección de dependencias, la inversión de control y similares.

Aquí está el artículo de Fowler: http://martinfowler.com/articles/injection.html , aunque yo siempre le pareció un poco por encima. Me gustaría tratar de caminar a través de un tutorial que representa el uso de un contenedor de DI / COI.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top