tier software programming programacion orientadas orientada net español ejemplo driven dominio domain ddd capas arquitectura application app c# .net architecture n-layer

c# - software - .NET N-Tier Architecture: ¿Qué hago con los objetos Model?



tier server (4)

En una aplicación relativamente pequeña, puede compartir sus Domain Entities hasta su Presentation layer pero tenga en cuenta el acoplamiento que esto introduce.

Si en su Enlace de datos, excepto una Entidad de tipo Customer con una Address propiedad con una propiedad StreetLine1 y StreetLine2 , todas sus capas están estrechamente unidas y un cambio en una capa probablemente provocará cambios en otras capas.

Por lo tanto, su decisión debe basarse en la escala de su proyecto y la cantidad de acoplamiento que puede tener.

Si elige un diseño de bajo acoplamiento, su BLL usará su DAL para recuperar entidades y usar esas entidades para ejecutar el comportamiento. El BLL luego usará los Data Transfer Objects para pasar a su Presentation layer para que no haya un acoplamiento entre su presentation layer y su Domain Model .

Estoy creando una solución desde cero, utilizando formularios web ASP.NET C #.

Me preocupan los objetos modelo ya que no quiero crear conjuntos duplicados de objetos modelo en cada capa. ¿Cuál es la mejor práctica para usar objetos de modelo en arquitectura de 3 capas en Web Forms ?

La estructura que tengo en mente es la siguiente:

  • UI
  • BLL
  • DAL
  • Modelo

El Modelo contendrá todas las clases de modelo que se pueden usar en cada sección de las capas. Pensé que esto sería útil ya que cada capa necesita acceso a los objetos modelo. Por ejemplo:

  1. La IU llama a un método en BLL que pasa en un objeto modelo lleno de datos.
  2. BLL llama a un método en DAL que pasa por el objeto que se guarda en la base de datos, etc.

Gracias


Los modelos pueden ser una preocupación transversal con sus capas, que es una manera rápida de hacerlo. O bien, puede crear interfaces para sus modelos de modo que simplemente pueda pulir la interfaz en algo como el BLL; esto al menos evita que sea transversal.

Además, depende de si sus modelos son contenedores de datos simples ( modelo de dominio anémico ) o contienen un comportamiento, como la capacidad de validar ellos mismos o realizar un seguimiento de los cambios ( modelo de dominio enriquecido ).

Puede encontrar que su DAL en realidad consta de dos partes: la plantilla repetitiva, nunca específica de un código de la aplicación para hablar con la base de datos, y el código de poblar el modelo específico de la aplicación. Tenemos esta situación. Compartimos interfaces de nuestros modelos, el código DAL específico de la aplicación puede usar esta interfaz para extraer y extraer datos del modelo, pero el código DAL "verdadero" funciona con elementos en bruto.


Como tema relacionado, consulte esta respuesta relacionada que publiqué recientemente para evitar la duplicación de código y la arquitectura correcta en un sistema cliente / servidor multiplataforma.

Hice +1 en los otros pósters en este hilo, ya que no pretende ser una respuesta completa, solo información útil relacionada con la pregunta.

Atentamente,


mira mi respuesta aquí: https://.com/a/7474357/559144 esta es la manera habitual en que hago las cosas y funciona bien, no solo para MVC y Entity Framework ... de hecho, en MVC el modelo podría ser un tipo de entidad que solo tiene algunos de los campos contenidos por las entidades comerciales reales definidas en capas inferiores, depende si realmente necesita absolutamente todos los campos en el nivel UI o solo algunos para hacer algún tipo de representación y entrada de datos ...