2014-01-04 2 views
3

У меня есть немного трудного времени, чтобы получить доступ к поставщикам типов. Я хотел бы получить некоторую обратную связь о полезности подхода поставщика типов для последующего использования.F # тип провайдер use case

Весьма к сожалению наш API телеметрии возвращает объекты как List<Dictionary<string, object>>. Dictionary имеет строки для ключей (значения имен столбцов), а значение может быть любым объектом (хотя обычно это тип значения в пространстве имен System). Кроме того, существует метод, который возвращает коллекцию Dictionary<string, Type>, которая представляет схему (имя столбца -> привязка типа). Мы обычно используем эти данные для ad-hoc/исследовательского анализа и отчетности.

F # с провайдером типа R представляется отличным оружием для вышеупомянутого анализа. Просто доступ к данным путем ввода имен столбцов в виде строк и объектов каста действительно стоит на пути. Я хотел бы создать провайдера типа, который из данного словаря (строка подключения, которая создает словарь) создает сильные типы. . от

new List<Dictionary<string, object>> 
{ 
    new Dictionary<string, object> { {"a", 1}, {"b","data"}, {"c", DateTime.UtcNow } }, 
    new Dictionary<string, object> { {"a", 3}, {"b","data2"}, {"c", DateTime.UtcNow } } 
} 

Я хотел бы получить

type MyObject 
    member a : int 
    member b : string 
    member c : DateTime 

List<MyObject> ... 

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

ответ

6

Если набранный доступ к телеметрическому API полезно, есть 2 простые подходы:

  1. поколение Кода
  2. Поставщики Типа

типа поставщик особенно подходит, если:

  • данные часто меняются
  • данные телеметрии

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

У Майкла Ньютона есть отличное введение в письменной форме Тип Провайдеры: Type Providers from the Ground Up