Шаблон или подход для доступа к свойствам родительского объекта глубже в графе объекта - PullRequest
0 голосов
/ 07 ноября 2019

У нас есть сценарии, в которых объектам, которые находятся «глубже» в графе объектов, необходимо обновлять значения в зависимости от значения предка. Например, рассмотрим упражнение по сопоставлению, в котором мы сопоставляем значения объекта, поступающего из веб-представления. У нас есть исходный постоянный объект, как он существует в базе данных / хранилище, и у нас есть мутировавший объект, который поступает из представления. Учитывая приведенную ниже «схему» для визуала, если мы отображаем входящий объект из представления в постоянный «двойник» из базы данных, и мы хотим установить значение франшизы покрытия на основе значения франшизы политики по умолчаниюЕсть ли способ сделать это, не передавая ссылку на родительский объект?

{
   Policy: {
     DefaultDeducitble: 1000
     LocationCollection: [{ 
           Location: {
            BuildingCollection: [{
               Building: {
                CoverageCollection: [{
                  Coverage: { DefaultDeductible: nulll}
                }]
              }
          }]
          }
       }]
  }
}

Наши преобразователи отображают один уровень иерархии объектов, поэтому у нас будет что-то вроде:

class PolicyMapper { /// maps policy and calls a location collection mapper }
class LocationCollectionMapper { /// calls a location mapper for each location }
class LocationMapper {///maps the location and calls building collection mapper }
class BuildingCollectionMapper { /// calls a building mapper for each building }
class BuidlingMapper {///maps the buidling and calls coverage collection mapper }
class CoverageCollectionMapper { /// calls a coverage mapper for each coverage }
class CoverageMapper {///maps the coverage, this is where we want a value from the Policy level }

Таким образом, вопрос заключается в том, как мы можем получить доступ к информации об уровне политики в CoverageMapper, не передавая объект Policy по всей иерархии сопоставления? Одна идея состояла в том, чтобы иметь временный кэш, который мы можем запросить. Я действительно не знаю, существует ли это ... или это хорошая идея или антипаттерн ... однако это выглядело бы примерно так:

public class TransientPolicyCache {
   ///code to load the cache and retreive stuff
   public Policy Get() { //returns the policy  }
}

public class CoverageMapper {
   public CovergaeMapper(TransientPolicyCache cache) { ///cache is provided by ioc }

   public Coverage Map(Coverage target, Coverage source){  
     //need the policy
     var policy = _cache.Get();
    // do the things
   }
}

1 Ответ

0 голосов
/ 07 ноября 2019

Это напоминает мне множество свойств зависимости в WPF .

  • Каждому экземпляру в дереве визуалов может быть присвоено значение, включая вещи, у которых этого свойства нет.
  • Если экземпляр не имеет значения, он обрабатывает визуальное дерево, пока не найдет его ни для чего.
  • Если ничего не найдено, будет использоваться значение по умолчанию. Из которых только 1 Экземпляр во всей Программе.

Но я не уверен, могут ли они действительно помочь вам здесь.

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