Digamos que tiene una aplicación dividida en 3 niveles: GUI, lógica de negocios y acceso a datos. En la capa de lógica de negocios que ha descrito sus objetos comerciales: getters, setters, accessors, etc. ... se entiende la idea. La interfaz de la capa de lógica de negocios garantiza el uso seguro de la lógica de negocios, por lo que todos los métodos y accesores que llame validarán la entrada.Interfaces en diferentes capas lógicas
Esto es genial cuando primero escribe el código UI, porque tiene una interfaz claramente definida en la que puede confiar.
Pero aquí viene la parte difícil, cuando empiezas a escribir la capa de acceso a datos, la interfaz con la lógica de negocios no se adapta a tus necesidades. Necesita tener más accesadores y captadores para establecer los campos que están/solían estar ocultos. Ahora está obligado a erosionar la interfaz de su lógica comercial; ahora es posible configurar los campos desde la capa UI, que la capa UI no tiene configuración comercial.
Debido a los cambios necesarios para la capa de acceso a datos, la interfaz con la lógica de negocio se ha erosionado hasta el punto en que es posible establecer incluso la lógica de negocio con datos no válidos. Por lo tanto, la interfaz ya no garantiza un uso seguro.
Espero haber explicado el problema con suficiente claridad. ¿Cómo se evita la erosión de la interfaz, se mantiene la ocultación y el encapsulamiento de la información, y aún así se acomodan las diferentes necesidades de interfaz entre las diferentes capas?
Supongo que esto podría funcionar si todo lo que hace es colocar una pantalla encima de una tabla de base de datos. –
No, no estoy hablando de aplicaciones que son así de simples. Estoy hablando de escribir procs de grano grueso para manejar toda tu lógica de negocio en aplicaciones empresariales complejas y mantener el código que llama a los procesos lo más simple posible. –
No veo cómo la migración de la lógica empresarial a los procedimientos almacenados ayuda. Preferiría mantenerlos en una buena capa de negocios en un lenguaje que admita buenas pruebas unitarias. –