Hola a todos soy bastante nuevo en el proceso de desarrollo por niveles. Actualmente estoy desarrollando una aplicación y tengo algunas preguntas básicas sobre las mejores prácticas/preguntas de arquitectura con la tecnología actual. Voy a usar WCF como capa de servicio. Tenga en cuenta que estoy tratando de desacoplar las cosas tanto como sea posible. No quiero que nada en los niveles superiores tenga que saber nada en los niveles inferiores, que es una de las razones por las que no me gusta LINQ TO SQL o el marco de entidades.Pregunta de arquitectura para el desarrollo de Tier .Net
1) ¿Cuál es la mejor manera de pasar datos entre los niveles? Sé que un conjunto de datos o una tabla de datos sería fácil, pero no creo que aprobar esta estructura de datos inflada entre los niveles sea la mejor solución. También la depuración sería más difícil si los datatables/datasets fueran grandes. ¿Tal vez una gran variedad de objetos POCO sería la mejor solución o hay una mejor manera?
2) La siguiente pregunta es un poco más complicada. Muchas aplicaciones tendrán diferentes vistas de los datos. Es posible que tenga varios informes, una variedad de cuadrículas de datos y tal vez un cuadro o dos. ¿Cómo se hace para diseñar su nivel de datos para esto? ¿Acabas de diseñar una función de tipo "Obtener" para cada tabla y luego tratas de combinarlas en vistas útiles para decir una cuadrícula o un informe en tu capa de negocios o tienes una función especializada para cada vista que necesites en la capa de negocios.
Para ser sincero, no me gusta ninguna de las soluciones. Si decide utilizar la lógica especializada por visión, deberá crear un objeto POCO (suponiendo que va a devolver una matriz de objetos POCO) por vista. Si decide más adelante, necesita agregar más columnas a una de las vistas, entonces estaría rompiendo el código existente (porque está cambiando la interfaz en el POCO). Si decide devolver una vista de cada tabla e intentar combinarla en la capa de negocios, eso podría volverse realmente complicado. TSQL se ha unido por una razón :). Además, es posible que esté devolviendo muchos más datos de los que necesita dependiendo de su diseño, que sería ineficiente.
Tengo más preguntas pero las guardaré para más adelante. No quiero que este post se convierta a grande :)
NCAGE
Piénselo de esta manera ... si diseña su sistema así, tendrá que hacer referencia a su nivel de datos tanto en su nivel de negocio como en su nivel de cliente. ¿Es este un buen diseño? ¿Qué sucede si rompe la interfaz en su nivel de datos porque agregó una columna a la base de datos? Acaba de romper todos los clientes y también los cambios tendrán que implementarse en N Clientes, a menos que no devuelva un tipo anónimo. Además, no puede pasar el objeto de contexto de datos por niveles (WCF). – user81206
Pero lo que se mencionó fue que el SUPERIOR no sabía lo BAJO, no lo BAJO sin saber sobre el SUPERIOR, que es lo que está describiendo aquí. ¿A qué se refiere exactamente como un "nivel" aquí? ¿Son solo proyectos diferentes en una solución? Diferentes procesos en la misma máquina? Diferentes máquinas en total? –
Y, aparte, no puede devolver un tipo anónimo fuera del alcance de su creación (en otras palabras, no puede devolver un tipo anónimo (que no sea como un "objeto") fuera de una función. –