Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 10

Вариант с Visitor-ом любопытный, но в данном случае использование dynamic-ов добавляет не так уж много преимуществ. У меня как-то был похожий случай, где как раз применение dynamic-ов сильно помогло.


Во внешней библиотеки определены 2 класса, не имеющие общего предка, но имеющие несколько идентичных полей, с которыми должен работать наш метод.
Будь это наши классы, это можно было бы решить добавлением интерфейса с необходимыми полями, но т.к. это внешняя библиотека — не вариант.


Решение:


public class ExternalClassA
{
  // lots of properties
  public string PropertyA {get; }
  public int PropertyB { get; }
  // lots of other properties
}

public class ExternalClassB
{
  // lots of properties
  public string PropertyA {get; }
  public int PropertyB { get; }
  // lots of other properties
}

public class OurClass
{
  public void DoSomeWork(ExternalClassA subject)
  {
     DoSomeWorkInternal((dynamic) subject);
  }

  public void DoSomeWork(ExternalClassB subject)
  {
     DoSomeWorkInternal((dynamic) subject);
  }

  private void DoSomeWorkInternal(dynamic subject)
  {
     // here we can safely operate with subject.PropertyA, subject.PropertyB
  }
}

Т.е. под каждую реализацию, с которой мы планируем работать, создаем публичный метод, приводящий аргумент к dynamic и пробрасывающий вызовы в закрытый метод. Внутри него мы точно знаем, что извне не придет чего-то неподдерживаемого, а от изменений сигнатуры внешних классов страхуемся юнит-тестами.

НЛО прилетело и опубликовало эту надпись здесь
Было бы неплохо перечислить недостатки dynamic-ов отдельной секцией.


Я выделил секцию «минусы» в разделе выводов. Недостатков, достойных упоминания, довольно мало. Добавлю туда ещё отсутствие проверки типов

Для работы с внешними ресурсами например существует возможность автогенерировать код сервиса


В общем случае такой возможности все-таки нет или генератор придется писать самостоятельно. К этому зачастую и сводится вопрос об использовании dynamic — выбор между кодом с проверкой типов и кодом с небольшим объемом
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

Раз в тегах стоит dlr то без использования dynamic во ViewModel статья выглядит как черновик.

Можете привести пример? Не встречал такого использования
НЛО прилетело и опубликовало эту надпись здесь
Если сможете развернуть этот коментарий в статью хотя б экрана на три — цены ей не будет! ;)

ViewBag в MVC как пример модели. Для WPF реализация DynamicObject с интересами INotifyPropertyChanged и INotifyDataErrorInfo ну и соотв использование для разных несложных форм.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации