Creo que estructurar mis proyectos como muchas personas lo hacen. Usted tiene una capa de datos (DAO), capa de servicio (servicios) y capa de presentación (Spring MVC, Wicket, ...).División de servicios -> Business Objects?
Por lo general, un servicio comienza siendo bastante simple y 'corto'. Poco a poco, sin embargo, el servicio debe admitir más y más casos de uso hasta que, después de un tiempo, se convierte en una gran clase con muchas líneas y métodos, y es difícil de leer y mantener. En ese momento, puede decidir quedarse con él o comenzar a refactorizar, que es un trabajo engorroso y "peligroso" que puede llevar mucho trabajo.
Estoy buscando una solución para evitar la necesidad de futuras refacciones.
Un enfoque podría ser dividir sus servicios en varios subservicios y hacer de su servicio original una fachada de servicio. Entonces, por ejemplo, en lugar de un gran UserService, podría tener un UserServiceFacade que delegue las llamadas a PasswordService, RegistrationService, ....
No es una mala solución creo, pero no estoy demasiado con ello porque:
- difícil de definir de antemano en la que subservicios dividir el trabajo; si missjudged, usted todavía puede ser que necesite te aftwards Refactor o tener un servicio con sólo un método, por ejemplo,
- reutilización de la lógica de negocios puede ser más difícil si, por ejemplo, PasswordService y RegistrationService requerir una funcionalidad común
Otra solución podría usar Business Objects que (a mi entender) también se puede ver como un subservicio, pero luego uno por UseCase específico, por lo que puede tener BO's como CreateUserBO, CheckPasswordBO, DeleteUserBO, ....
estoy un poco más entusiasta acerca de este enfoque porque, en mi opnion, ofrece bastantes ventajas:
- el propio Bo es muy fácil de leer y sólo lo hace con su contrato le obliga a hacer; todo lo demás se puede delegar a otra BO, un solo BO será breve y al punto
- fácil de reutilizar la funcionalidad
- más fácil cambiar/conmutar la ejecución de un determinado caso de uso: simplemente inyectar otra aplicación con Spring
- fácil poner a prueba: sólo tiene que probar a uSECASE específica, las delegaciones a otra BO puede ser burlado
- colaboración: menos conflictos si varios desarrolladores trabajan en diferentes BO de entonces cuando trabajan en el mismo servicio
hago Sin embargo, también vemos algunas posibles desventajas:
- un poco de trabajo extra (en el término especie por lo menos)
- clases Mucho más que podría disminuir la legibilidad de su proyecto?
- una capa de más de abstracción: un paso adicional se requiere para encontrar la aplicación real de un caso de uso
La cuestión o más bien preguntas (lo siento) son:
- Are Business Objects la solución ideal para ¿este problema?
- ¿Estás de acuerdo con las ventajas/desventajas de los BO que menciono arriba y/o ves otros?
- ¿Existen otras (buenas) soluciones para evitar que megaservicios arruinen su día?
+1 buena pregunta. – Nilesh