Estoy agregando funcionalidad a nuestro sitio web que realiza procesos de larga ejecución de forma asincrónica utilizando MSMQ. Sin embargo, hacer este ansynch significa que debemos notificar a los usuarios cuando se completen sus solicitudes. Utilizando el patrón de comando, creé una interfaz * llamada INotify y la compuse en la clase de mensaje, por lo que la clase de procesamiento de mensaje simplemente puede llamar a GiveNotice() en el objeto INotify del mensaje. La primera implementación, EmailNotify, fue más difícil de lo esperado, ya que me sorprendió descubrir que MailMessage no es serializable, pero lo puso en marcha.implementando objetos de funcionalidad de base de datos en una arquitectura N-Tier?
Ahora estoy trabajando en un nuevo notificador concreto, DBNotify, que llamará a un SP de algún tipo y actualizará un estado en la base de datos transaccional principal. He tropezado con que me gustaría volver a utilizar la arquitectura DAL que ya hemos creado, pero INotify es miembro del proyecto Model, que es más fundamental que el DAL.
Nuestra jerarquía se ve así: Común> Modelo> DAL> BAL
Aquí hay más detalles acerca de los niveles. Tenga en cuenta que heredé esto de: Common es responsable de todas las funciones de "utilidad" que se usan en muchos lugares de la aplicación, como el acceso a la configuración, el análisis de cadenas de caracteres y la funcionalidad no relacionada con el negocio.
El modelo son objetos comerciales, lo que algunos llaman objetos de transferencia de datos, colecciones de getters y setters. He agregado algunas "herramientas inteligentes" en esta capa, pero solo reglas de negocio internas para ese objeto, como "El nombre de un elemento debe comenzar con un carácter alfanumérico".
DAL es la capa de acceso a los datos, en teoría, todo lo que sucede aquí es que los objetos modelo se mueven dentro y fuera de la base de datos.
BAL es la capa Business; en teoría, las reglas comerciales que rigen la interacción de los objetos se aplican (es decir, "un formulario debe tener al menos dos elementos").
Por lo tanto, la interfaz de INotify se define como una abstracción para permitir que el método de notificación varíe de forma independiente (es decir, correo electrónico, TXT, twitter, etc.). Es fundamental para el sistema, por lo que lo he creado en el nivel Modelo, que es independiente del nivel DAL. Sin embargo, estoy creando una nueva implementación concreta de INotify cuyo método de notificación es llamar a un SP en una base de datos.
¿Alguien más ha tratado con un objeto comercial cuyo objetivo es interactuar con una base de datos, y cómo lo sitúa en su arquitectura N-tier?
Antes de decirme que use Linq en Sql, muchas gracias. Esta no es una pregunta técnica (¿cómo hago esto?), Es una pregunta de diseño (¿cómo debo hacer esto?).
Creo que hay un sitio StackExchange más centrado en este tipo de preguntas de diseño independientes del lenguaje, así que voy a copiar esto allí.
* Interfaz sólo de nombre, ya que en realidad quiero serializar estos objetos, que tenía que hacer una clase abstracta. –
Estoy confundido acerca de su jerarquía. ¿De qué son responsables el Modelo y el BAL? Tomé BAL para representar Business Access Layer pero luego el Modelo parece estar fuera de lugar. En el código que he visto, el modelo suele ser el más abstracto y se encuentra arriba (usos) o es parte de la capa empresarial ... Además, si el modelo es más fundamental que el DAL, ¿cuál es el problema con las clases que usan DAL? desde y llamando a métodos en el Modelo? –
Ah, y en caso de que no lo supiera, no necesita agregar información en comentarios, simplemente puede editar su pregunta ... –