Шаблон репозитория: реализация и отложенная загрузка модельных отношений

У меня есть приложение, которое занимается товарами и категориями товаров. Для каждой из них у меня есть модели, определенные с помощью POCO.

// Represents a product.
class Product {
  public virtual int ID { get; set; }
  public virtual string Name { get; set; }
  public virtual ProductCategory Category { get; set; }
}

// Represents a product category.
class ProductCategory {
  public virtual int ID { get; set; }
  public virtual string Name { get; set; }
  public virtual IEnumerable<Product> Products { get; set; }
}

Приложение использует репозиторий для доступа к этим моделям

// The interface implemented by the application's repository
interface IProductRepository {
  IEnumerable<Product> GetAllProducts();

  void Add(Product product);
  void Remove(Product product);
  void Save(Product product);
}

В классе Product свойство с именем Category типа ProductCategory должно загружаться только тогда, когда оно необходимо / доступно (ленивый -загрузка). Я хочу, чтобы мои модели оставались POCO и содержали только структуру модели. m интересно, как должны взаимодействовать репозитории продуктов и категорий для обеспечения отложенной загрузки? Должны ли они ссылаться друг на друга или я должен иметь главный репозиторий с двумя вспомогательными репозиториями и передавать его своим расширенным типам моделей?

Какой подход вы бы выбрали? (любые предложения и критика приветствуются)


I Следует отметить, что я хочу, чтобы приложение было расширяемым, а все интерфейсы для репозиториев и самих моделей были в отдельной сборке. Это означает, что расширитель не будет иметь прямого доступа к определению класса модели.

10
задан Cristian Toma 10 May 2011 в 17:28
поделиться