Pregunta

Revisando el escaparate de Conery, y no entiendo por qué usó las clases autogeneradas de Linqs (es decir, la clase Order) y luego definió otra clase Order que no es una clase parcial. CUANDO se usa el patrón de repositorio, ¿se deben crear manualmente las clases y no tener en cuenta Datacontext por completo?

¿Fue útil?

Solución

Si no desacoplas tu front-end de las clases linq usando una clase intermedia, no puedes controlar con el contexto de datos que se recolecta basura. Por lo general, con los tipos de instancias de contexto de datos, desea deshacerse de ellos tan pronto como termine de usarlos. Así es como es posible que desee hacer esto con el contexto de linq a sql:

using (MyDataContext data = new MyDataContext())
{
    SomeThing thing = data.Things(t => t.ID == 1);
    return thing;
}
... the MyDataContext instance is gone

Con el " usando " bloque, está eliminando la instancia de MYDataContext en el último "} " ;. Sin embargo, si hace esto, obtendrá un error y luego tratará de usar '' cosa '' porque la instancia del contexto de datos se ha ido. Si no desecha el contexto de datos, se queda dando vueltas hasta que finalmente se recolecte basura.

Si introduce una clase intermediaria para desacoplar el código linq a sql de la aplicación de llamada, aún puede deshacerse de su instancia de contexto de datos y devolver los mismos datos (solo en un objeto diferente):

using (MyDataContext data = new MyDataContext())
{
    SomeThing thing = data.Things(t => t.ID == 1);
    SometThingElse otherThing = ConvertSomethingToSomethingElse(thing);
    return otherThing;
}
... the MyDataContext instance is gone

Espero que eso ayude.

Otros consejos

Rob ha respondido a esta pregunta en uno de sus shows.

El uso de clases POCO para estar al tanto de todas las clases de acceso a datos. Por ejemplo, cuando cambia LINQ-to-SQL a NHibernate, todo lo que tendrá que hacer es cambiar sus "asignaciones". en sus filtros, y no tendrá que hacer ningún cambio en la lógica de negocios.

Dijo en uno de sus videos recientes que no le gusta la forma en que LINQ to SQL hace el mapeo. Estoy de acuerdo, aunque creo que es una exageración total.

Diría que no está rompiendo ningún patrón de diseño importante siempre y cuando se apegue al patrón del repositorio. Creo que es una cuestión de elección tener 2 juegos de classesa, aunque sea uno malo, sigue siendo una opción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top