Mi forma de verlo es: si es necesario se hace y lo llamo como sea, me parece que hay gente ortodóxa y gente productiva, tampoco estamos metiendole una patada a las tablas de Moises :), es decir (y de paso metiendo a Ayende) si Moq llama a todo igual sea mock o stub o algo, no importa, mi objetivo es hacer un test de unidad si para usar Rhino tengo que pensar si va un dynamic, un stub y mock....no sé, yo me dedico a escribir software no a profesar la palabra :P
PD: Me puse en modo "debate"
si tenes un fx para definir los repositorios, estas en un problema ;)
a lo q voy es q es feo tener algo tipo Persona.FirstName o cosas similarmente entreveradas.
Me gustaría saber que piensan sobre esto.
3) Mocking de DB o RDBMS en RAM no sirven si lo que se está testeando es el acceso a datos
El problema con esta metodología es que NH (o lo que fuere) se filtra en todas las capas de tu aplicación (no se si es realmente un problema) y que al no tener un IRepository no lo podés mockear :) y tenes que testear si o si contra una BD.
2009/5/14 Fabio Maulo <fabio...@gmail.com>:
> Quisiera ver que pasa con las referencias cuando tengas un IComplexQuery ...
> IRepository<T>.Find(IComplexQuery)
> Si tenes una sola implementación quiero ver lo que pasa.
> A parte eso...
> Yo he visto IRepository<T>.Clear() y aún recuerdo la sensación de dolor que
> tuve en los h....
--
Carlos Peix
public class GenericSlicedQuery<T> : IComplexQuery where T : class
{
public int Start { get; set; }
public int Limit { get; set; }
public ICriteria GetQuery(ISession session)
{
ICriteria criteria = session.CreateCriteria<T>();
criteria.SetFirstResult(Start).SetMaxResults(Limit);
return criteria;
}
}
Ya se, ICriteria e ISession estan en nh. Pero no implemento
IComplexQuery para cualquier pavada como esta.
Y si algún día necesito cambiar el ORM (lo cual no creo), voy a tener
que hacer alguna magia con el repositorio (su única implementación) y
con las "complex" queries, es decir con las queries que realice a partir
de una feature del orm... No queryable. Que eso lo voy a tener que hacer
cualquiera sea la implementación que realice.
(y repito: este es un caso en el que justamente no utilizaría complex y
probablemente tampoco simple)
Aca va una del otro tipo:
public class SlicedQuery<T> : ISimpleQuery<T> where T : class
{
public string Sort { get; set; }
public SortDirectionEnum SortDirection { get; set; }
public int? Limit { get; set; }
public int? Start { get; set; }
public IQueryable<T> GetQuery(ISession session)
{
IQueryable<T> result = session.Linq<T>();
if (!string.IsNullOrEmpty(Sort) &&
!string.IsNullOrEmpty(SortDirection))
result = SortDirection = SortDirectionEnum.ASC ?
result.OrderBy(Sort) : result.OrderByDescending(Sort);
if (Limit.HasValue && Start.HasValue)
result = result.Skip(Start.Value).Take(Limit.Value);
return result;
}
}
Esta utiliza unos extensions methods para iqueryable que permiten
ordenar por string en vez de lambda.
Carlos Peix escribió:
Para mi es el responsable de las queries..
No virus
found in this incoming message.
Checked by AVG - www.avg.com
Version: 8.5.329 / Virus Database: 270.12.26/2110 - Release Date: 05/12/09
06:22:00
Carlos Peix escribió:
100% de acuerdo.
From: altnet-a...@googlegroups.com
[mailto:altnet-a...@googlegroups.com] On Behalf Of Fabio Maulo
Sent: jueves, 14 de mayo de 2009 15:33
To: altnet-a...@googlegroups.com
Subject: [altnet-argentina] Re: Dao, Repository y clases Query
Yo veo ISession por todos lados e ISession es de NH.
Eso no es tan así. Podemos hacer queries sobre objetos que se transforman en SQL solo para algunos casos. No hay providers de LINQ para todo (de hecho hay muy pocos providers de LINQ “terminados”).
Es cierto que en un sistema promedio se podría asumir que casi todo va a tener un provider de LINQ por detrás. Pero hay casos en los que no es así, y yo no quiero tener un modelo de arquitecta distinto para los casos en los que no.
No virus found in this incoming message.
Como dijo un poeta de La Plata “el futuro llego hace rato”, en nuestro caso varias veces y con distintos nombres: COM+, MFC, XSLT, Remoting, Web Services, etc. solo por nombrar algunos J
Yo no sería tan extremista en decir que IQueryable es el futuro (que de hecho no creo que lo sea, ya que la expansión de LINQ providers es, y va seguir siendo, muuuuy lenta), es solo un herramienta más que hay que usar adecuadamente y en el marco de un buen diseño. En ese sentido sigo sin ver cómo me puede ayudar a tener un diseño más cohesivo.
Además no puedo ignorar el problema hasta que sea irrelevante, desgraciadamente necesito trabajar hoy (y ayer).
PD: Estuve leyendo el artículo que mando Mauricio (http://codebetter.com/blogs/gregyoung/archive/2009/01/16/ddd-the-generic-repository.aspx), es muy aleccionador…
From: altnet-a...@googlegroups.com
[mailto:altnet-a...@googlegroups.com] On Behalf Of Daniel Cazzulino
Sent: jueves, 14 de mayo de 2009 19:23
To: altnet-a...@googlegroups.com
Subject: [altnet-argentina] Re: Dao, Repository y clases Query
IQueryable<T> es el futuro.
No virus
found in this incoming message.
Checked by AVG - www.avg.com
Version: 8.5.329 / Virus Database: 270.12.31/2116 - Release Date: 05/15/09 06:16:00
----- Original Message -----From: Angel Java LopezSent: Friday, May 15, 2009 9:50 PMSubject: [altnet-argentina] Re: Dao, Repository y clases Query