Я знаю, что довольно просто создать репозиторий для получения моделей домена без ORM (Шаблон репозитория без LINQ или другого ORM?). Однако как насчет сохранения моделей предметной области и ее внутреннего графа объектов?
public class Car: IAggregateRoot, IEntity, ICar
{
public IEnumerable<IWheel> Wheels {get; set;}
}
public class CarRepository
{
public void Save(ICar car)
{
// calls Dao
// update/insert all wheels as required
// update/insert car as required
}
}
Здесь нам нужно заняться отслеживанием изменений и т. Д. Как это реализовать?
Для моей конкретной реализации я отношусь к Linq to Sql как к Dao. Linq to sql отслеживает изменения, а созданные мной модели предметной области - нет. Они являются прямым POCO и не отображаются напрямую linq в sql. Все делается с помощью настраиваемого DataMapper
public class CarDataMapper : IMapper<LinqData.Car, Domain.ICar>
{
public ICar Map(LinqData.Car linqCar)
{
ICar = new Car () { Wheels = linqCar.Wheels.Select( w => new WheelDataMapper().Map(w));
}
}
Есть ли какой-либо прямой способ реализовать репозиторий для сохранения графа объектов, не подвергая linqToSql или NHibernate уровню домена? Или мне что-то здесь не хватает?