¿Qué fundamento teórico ha encontrado para el diseño de la base de datos "Patrón de repositorio"? Supongo que ninguno. Es una capa de complejidad que descansa sobre una premisa falsa: que la "capa de persistencia" es algo de lo que necesita estar aislado. Por lo que puedo decir, juega con la ignorancia generalizada de la programación de los principios de diseño relacional, y satisface una centralidad presupuesta del diseño OO de la aplicación. Pero no justifica su existencia por razones racionales, y mucho menos teóricas.
El único camino verdadero al diseño de la base de datos no ha cambiado en 30 años: analice los datos. Encuentra las claves y restricciones y las relaciones de muchos a uno. Diseñe sus tablas de acuerdo con la forma normal de Boyce-Codd. Use vistas y procedimientos almacenados para facilitar el acceso a los datos.
Aunque no sea querido, un DBMS SQL proporciona una mejor capa de aislamiento que cualquier cosa que el programador pueda proporcionar. Es cierto que a medida que la base de datos cambia, el SQL utilizado para acceder podría tener que cambiar. Pero tenga en cuenta que eso es cierto independientemente de si hay o no una capa de mediación . Mientras la aplicación utilice vistas y procedimientos almacenados para acceder al DBMS, las herramientas de ingeniería SQL normales indicarán cuándo los cambios en la base de datos subyacente invalidan esas vistas y procedimientos almacenados.
Ahí radica el desafío, por supuesto. Una capa de mediación proporciona la ilusión de aislamiento y la comodidad para el programador de escribir código, que él sabe cómo hacer. Aprender el diseño de bases de datos y SQL requiere aprender algo nuevo. La mayoría de las personas preferiría morir antes que pensar, y muchas triunfan.
Sin duda, alguien en su equipo objetará que escribir SQL para admitir sus 200 clases es mucho trabajo. Sin duda. Pero al menos es un trabajo útil . Si diseñas una base de datos imitando tu diseño OO, también harás mucho trabajo, en gran parte inútil, y vencerás la mayor parte de lo que te ofrece el DBMS.
Por ejemplo, contempla reflejar la Unidad de trabajo en la base de datos (como tabla o tablas, supongo). Unidad de trabajo es un servicio integrado de la DBMS: begin transaction
... la base de datos de actualización ... commit transaction
. Nada que modelar, excepto la asignación de sus clases a las tablas de la base de datos en SQL.
Su pregunta fue publicada hace 4 años. Estoy respondiendo porque se "actualizó" de alguna manera recientemente, lo que indica que todavía le interesa a alguien. Espero que mi respuesta aliente al lector a aplicar la teoría relacional básica al problema en lugar de adoptar una solución inútil.