2012-07-13 8 views
6

Tengo una aplicación en capas N, donde utilizo el patrón de especificación. Ahora, quiero proporcionar algunas formas de construir especificaciones para el código del cliente. Debe haber varias opciones predefinidas, como estos:práctica estándar para exponer el patrón de especificación al código del cliente?

  • Igualdad
  • MayorQue
  • Contiene

Estos objetos (déjame llamar a los filtros) no debe contener ninguna lógica (métodos), solo datos - tipo de filtro y parámetros. Y debe haber una forma natural de transformarlos en especificaciones en el servidor. Aquí es ejemplo de cómo debe mirar desde el lado del cliente:

var serviceClient = new DataModuleService(); 
var equalFilter = new ContainsFilter<Book>("Title","Lord of the Rings"); 
var lordOfTheRingBooks = serviceClient.GetBooks(equalFilter); 

También debe haber tipos de filtros para todas las operaciones estándar (como Equal, más, en, entre, StartsWith de cuerda, etc) y formas de combinar ellos con operadores booleanos (y, o, no).

¿Existen algunos patrones/prácticas estándar para implementar tal cosa?


UPD: la tarea está congelada por ahora, y he empezado a pensar que hay un problema en la definición de tarea en sí.

Respuesta

2

Lo que está tratando de hacer me suena como lo que Hibernate está haciendo con su criteria queries. Puede combine them como quiera construir el filtro que le interesa.

Esto no es C#, pero Java and C# son idiomas similares, así que tal vez pueda tomar algunas ideas de allí.

Además, podría ir por el puerto de Hibernate en .NET (NHibernate) para the same criteria queries (aunque no sé exactamente si la API es la misma que la de Java).

4

Simplemente una respuesta de alto nivel: creo que puede probar expresiones LINQ que soportan todo el operador lógico y condicional que se menciona. Busca en el espacio de nombres System.Linq.Expressions para ver los tipos disponibles.

Enlaces de interés:

+0

"Está muerto Jim." el enlace está muerto –

+1

Gracias, parece que el sitio está caído. He agregado más enlaces – sll

Cuestiones relacionadas