Mis clases de servicio tienden a tener bastantes unas pocas variables de instancia ...
esto no es necesariamente un código de olor. Si su servicio requiere muchas dependencias para completar su trabajo, entonces esto es simplemente un hecho.
... parecen hacer un montón de trabajo (es decir, tienen muchos métodos).
¿Es aconsejable crear servicios más específicos?
Como regla general, cuanto más granular puede hacer que sus servicios interfaces (es decir, el menor número de métodos), mejor (siempre tenían que buscar a través de una interfaz con cincuenta métodos en él en busca de la que desea ¿llamar?). Pero a menos que esté publicando como una API pública, la granularidad de sus interfaces de servicio se puede refinar a medida que avanza. A menudo, al comenzar un proyecto, comenzaré con un solo servicio y lo dividiré con el tiempo. Si usted es el consumidor de estos servicios, cuando empiece a sentir el dolor de una interfaz que llega a ser grande, sabrá que es hora de romperla. Por supuesto, si esto es una API pública, a continuación, usted tiene que hacer mucho más el diseño inicial.
Además, ¿deberían las clases de servicio almacenar variables de instancia en otras entidades? Leí algo acerca de que los servicios son apátridas, no estoy seguro si estoy rompiendo esa regla al tener esas variables de instancia.
Almacenar dependencias como variables de instancia no implica necesariamente que su servicio no sea apátrida, siempre que las variables de instancia también sean sin estado. Para que se considere apátrida, las llamadas de método a un servicio no deben depender de ningún modo de los métodos anteriores que hayan sido llamados. Debería poder cargar una única instancia de servicio y compartirla para su aplicación (es decir, una instancia de un servicio sin estado no debe ser específica de la sesión de un usuario en particular). En otras palabras, su servicio no debe mantener ningún estado entre llamadas de método. Almacenar una dependencia de repositorio sin estado como una variable en una instancia de servicio no infringe este requisito.
La razón servicios sin estado es un objetivo deseable, es tener ningún estado reduce en gran medida la posibilidad de errores.Simplifica la prueba de un método de servicio al restringir los casos de prueba a variar los parámetros pasados, en lugar de tener que preocuparse por el estado previo del servicio. También puede ofrecer beneficios de rendimiento.
Gracias por la gran respuesta MJ! Esto ayuda mucho. – chobo
@MJ Richardson ¿Puedes compartir tu ID de correo electrónico (el mío se agrega al perfil)? Tengo ciertas dudas que me gustaría aclarar con respecto a esta publicación. –