разделение проблем с шаблоном хранилища - PullRequest
1 голос
/ 23 июля 2011

У меня есть вопрос относительно места доступа к хранилищу.Является ли приемлемой практика разрешать или содержать доступ к хранилищу в пределах сущности, которую поддерживает хранилище?

Например:

class Product
{
    public int ProductID {get;set;}
    public int Name {get;set;}
    public IList<Product> Products {get;set;} // A Product may be a bulk item that contains several individual items.
    public int VendorID {get;set;} // Key to another table that list vendor info.
}

public class ProductRepository : IRepository
{
   public Product GetProduct(int id) {}
   public IList<Product> GetProducts() {}
}

A Несколько вопросов:

  1. ГдеНужно ли искать информацию из других таблиц?Репозиторий, Услуги, Предприятие и т. Д. Будет ли это также применяться к Содержащимся продуктам для массовых товаров?
  2. Когда это должно произойти, во время получения продукта или если / когда поставщик / субпродукт получил доступ?

1 Ответ

1 голос
/ 23 июля 2011

Я бы порекомендовал посмотреть, как ORM (Object Relational Mappers) решают подобные проблемы; в общем, способ, которым они справляются, заключается в том, что репозиторий управляет всей сериализацией / десериализацией по мере необходимости; Существует некоторая относительно сложная логика для десериализации элементов дерева (отложенная загрузка и т. п.). В пространстве ORM были рассмотрены многие из этих проблем, и есть решения, которые учитывают подробности каждого из потенциальных решений, так что это подходящее место для поиска. Для начала рассмотрим, как Hibernate делает свое волшебство; это широко используемый ORM с довольно хорошим дизайном.

В частности, я бы настоятельно рекомендовал не пытаться реализовать подобные вещи самостоятельно; рассмотреть возможность использования ORM (опять же, Hibernate рекомендуется от меня и других) для управления спецификой этого процесса; они работали над многими проблемами, возникающими при выполнении этого материала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...