que estoy usando para mi Linq2Sql capa DAL y lo tengo como un proyecto separado. En mi proyecto de dominio tengo una interfaz de repositorio que luego implemento usando un Linq2SqlCarRepository personalizado en mi proyecto DAL, esta clase completa las clases Linq2Sql generadas.
por ejemplo. En proyecto Car.Core
public interface ICarRepository
{
IQueryable<Car> GetAllCars();
void Add(Car);
}
entonces tengo una implementación de la interfaz que se clausura el acceso a la clase Linq2Sql generado.
proyecto Car.Data
public class SqlCarRepository : ICarRepository
{
private CarDataContext _context;
public SqlCarRepository()
{
_context = new CarDataContext();
}
#region ICarRepository Members
public IQueryable<Car> GetAllCars()
{
return _context.Cars;
}
entonces tengo un proyecto de prueba Car.Data.Test que luego se burla utiliza para burlarse del ICarRepository y las pruebas de distancia. Creo que esto es ligeramente diferente a lo que describes. Pero creo que quieres probar y separar que eres DAL de tu aplicación, por lo que es un periférico que podría cambiarse si así lo deseas.
no tengo todo el completamente ordenados, pero actualmente tengo estos proyectos:
Car.Core --- All the interfaces and domain objects, DTO's etc
Car.Core.Tests --- The tests of the core business logic.
Car.Web --- Asp.net MVC frontend
Car.Web.Tests --- Tests for the website
Car.Data --- The Linq2Sql stuff lives in here
Car.Data.Tests --- The tests for the DAL layer
Eso es lo que tengo actualmente pesar de que podría no ser la mejor manera de hacer las cosas ahora.
Recomiendo leer The Onion Architecture y mirar los videos MVC StoreFront para inspirarse; buena suerte.
Leí el mensaje "Si creo un proyecto de capa de datos, ¿movería todos mis repositorios a ese proyecto también?" pregunta como si ya estuviera usando el patrón de repositorio sugerido en las respuestas a continuación, pero aparentemente también tiene que hacer algún tipo de acceso a la base de datos, en algunas de sus pruebas? Normalmente, esto significa que realmente está probando Linq a SQL, lo que esperaría que los ingenieros de Microsofts ya hubieran hecho.Te aconsejo que evites esos métodos y pruebes tus repositorios con un backend de contexto de memoria, como se describe en el artículo al que Jason Jones se vincula. – AHM