Как я могу упростить иерархическую структуру классов, приводя к цепочечным вызовам методов? - PullRequest
0 голосов
/ 29 сентября 2010

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

DiscountEvent
  DiscountGroup
    ProductFamily
      Product

, где каждый класс содержит коллекцию следующего (например, DiscountEvent содержит коллекцию DiscountGroups и т. Д.)

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

class DiscountEvent{
  Dictionary<int, DiscountGroup> DiscountGroups;
  public void AddProduct(ProductInfo info){
    DiscountGroups[info.groupId].AddProduct(info);
  }
  ...
}
class DiscountGroup{
  Dictionary<int, productFamily> productFamilies;
  public void AddProduct(ProductInfo info){
    productFamilies[info.familyId].AddProduct(info);
  }
  ...
}
...

Подобные методы добавления полностью относятся к конечному классу.Можете ли вы придумать способ упростить этот вид иерархической структуры классов?

Ответы [ 2 ]

0 голосов
/ 01 октября 2010

Одной из идей будет использование формы Сериализатора ... потому что вы «десериализуете» из базы данных.

То есть, у вас может быть DiscountEventReaderкласс, в который вы передаете соединение с базой данных - и он может вызывать другие классы считывателей для создания содержащихся экземпляров объекта.

Это имеет то преимущество, что, например, ProductFamilyReader может читать (и потенциально кэшировать) несколько строк базы данныхдобавление нескольких Product экземпляров в родительский контейнер без обхода всей иерархии вызовов addProduct для каждого нового объекта.

0 голосов
/ 01 октября 2010

Самые современные ORM могут решить эту проблему для вас.

Вы не можете на самом деле упростить свою «иерархию», потому что она основана на реальных абстракциях, но вы можете упростить свою жизнь, исключая популяции ручного ребенка.

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

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