Проектное предложение для оценки дерева выражений с данными временных рядов - PullRequest
2 голосов
/ 05 мая 2010

У меня есть (C #) генетическая программа, которая использует финансовые данные временных рядов, и в настоящее время она работает, но я хочу изменить архитектуру, чтобы она была более устойчивой. Мои главные цели:

  • последовательно представляет данные временных рядов деревьям выражений.
  • позволяет деревьям выражений обращаться к предыдущим строкам данных при необходимости.
  • для оптимизации производительности доступа к данным при оценке деревьев выражений.
  • сохранить общий интерфейс, чтобы можно было использовать различные типы данных.

Вот возможные подходы, о которых я думал:

  1. Я могу оценить дерево выражений, передав строку данных в корневой узел и разрешив каждому дочернему узлу использовать одну и ту же строку данных.
  2. Я могу оценить дерево выражений, передав индекс строки данных и позволив каждому узлу получить строку данных из общего DataSet (в настоящее время я передаю индекс строки и собираюсь в несколько синхронизированных массивов для получения данных) .
  3. Гибридный: неизменяемый набор данных доступен для всех деревьев выражений, и каждое дерево выражений оценивается путем передачи строки данных.

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

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

Преимущество гибрида состоит в том, что он в целом должен работать лучше и при этом обеспечивать доступ к более ранним данным. Он поддерживает два основных «представления» данных: последняя строка и предыдущие строки.

Ребята, знаете ли вы какие-либо шаблоны проектирования или у вас есть какие-либо советы, которые могут помочь мне создать систему такого типа? Должен ли я использовать набор данных для хранения и представления данных или есть более эффективные способы представления строк данных при сохранении простого интерфейса?

К вашему сведению: весь мой код написан на C #.

1 Ответ

1 голос
/ 05 мая 2010

То, что вы сказали, в основном касается операций, которые не должны быть первой инициативой при разработке ОО.Я предлагаю вам создать RowObject, который сопоставляется с каждой строкой таблицы данных, и создать другой класс RowObjectManager, который содержит коллекцию RowObject и связанных с ним операций, таких как вызов алгоритма.Это очень похоже на шаблон Facade, и вы можете инкапсулировать алгоритм в другом классе и вызывать алгоритм, используя способ внедрения зависимостей, который можно отделить от класса RowObjectManager.

Затем вы должны передать OBJECT, а не свойстваобъекта, такого как индекс алгоритма, и алгоритм может вернуть результат вызывающей стороне.

...