У меня есть приложение, которое занимается товарами и категориями товаров. Для каждой из них у меня есть модели, определенные с помощью 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 Следует отметить, что я хочу, чтобы приложение было расширяемым, а все интерфейсы для репозиториев и самих моделей были в отдельной сборке. Это означает, что расширитель не будет иметь прямого доступа к определению класса модели.