me gusta mucho el 3 + 1 niveles manera de hacer las cosas. Un nivel para la interfaz de usuario, otro para lógica empresarial y para datos persistentes. ¿El último que dices? Objetos de dominio e interfaces. Esto permite cargar uno o dos de los niveles principales más el "nivel" de dominio, y el código debería funcionar.
Se basa en gran medida en dependency injection y principios. El nivel de datos/persistencia solo hace dos cosas. Crea, lee, actualiza y elimina datos, y los mapea en el formato del objeto de dominio.
El nivel UI hace exactamente lo contrario. Muestra y recibe datos de una manera que el usuario puede relacionar, y mapea esa salida/entrada ay desde el formato de objeto de dominio.
El nivel lógico de negocios solo necesita saber una cosa. Lógica de negocios. No le importa de dónde provienen los datos, y no le importa dónde está ubicado el nivel de datos. Sabe que debe marcar una cuenta que acaba de sobregirar, cómo hacer eso físicamente no es realmente parte de su trabajo.
Los propios objetos de dominio no tienen ninguna lógica, solo son contenedores para pasar datos entre los niveles. Esto significa que puede cargar los objetos de dominio y las interfaces sin tener que pensar en absoluto sobre las dependencias.
Al final del día, siento que tengo una base de código bastante clara con niveles claramente separados. Y con algunas interfaces estrictas y buenas clases de base, la mayoría de la codificación solo le dice al software qué hacer cuando sucede X. Cómo se supone que es.
</rant>
Edit: Oh, sí. Esto es cierto para LINQ, SubSonic y otros ORM.
¿Qué sucede si quiere leer 10000 filas de la base de datos y almacenar el total en alguna parte? ¿Por qué arrastrar todo eso a través de la red cuando podía: insertar en totales ... seleccionar de los detalles? –
Con un ORM, no tiene que leer 10000 filas para obtener el total. Por ejemplo, en LinqToSql es posible utilizar un método Sum para hacer una suma de una propiedad, que luego se convierte en SQL adecuado que permite al servidor sql calcular la suma sin devolver todas las filas. –
@Ole: LinqToSql (que solo es compatible con SQL Server, y puede que ya esté muerto a favor de Entity Framework) sigue siendo una caja negra, ¿por qué no escribir el SQL usted mismo? Y si coloca la lógica de resumen en un procedimiento almacenado, no necesita dar acceso sin formato a la aplicación a sus tablas. – ObiWanKenobi