Рефакторинг метаданных
Atom Ответить
10.03.2011


Убрал перечисление PlazaTableTypes. Совершенно бесмысленная информация. Вместо этого за основу взял то что раньше называлось PlazaColumns.Table. Теперь везде именуется едино - SystemTableName. Оно равно НазваниеПотока/НазваниеТаблицы.

Не закончил до конца. Залил пока не компилябельное. Если есть желающие закончить - посмотрите как пример PlazaUsdOnlineColumns.

Теги:


Спасибо:




15 Ответов
aspirant

Фотография
Дата: 11.03.2011
Ответить


Mikhail Sukhov Перейти
Убрал перечисление PlazaTableTypes. Совершенно бесмысленная информация. Вместо этого за основу взял то что раньше называлось PlazaColumns.Table. Теперь везде именуется едино - SystemTableName. Оно равно НазваниеПотока/НазваниеТаблицы.

Не закончил до конца. Залил пока не компилябельное. Если есть желающие закончить - посмотрите как пример PlazaUsdOnlineColumns.


Михаил, посмотри, пожалуйста, на мою редакцию PlazaColumns. Комментарии внутри кода.

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

Код
var aggregations = PlazaColumns.GetAllMetadata().Where(x => x.SystemTableName == "orders_aggr");

Если возражений нет, я сегодня вечером отредактирую метаданные.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 11.03.2011
Ответить


aspirant Перейти
Mikhail Sukhov Перейти
Убрал перечисление PlazaTableTypes. Совершенно бесмысленная информация. Вместо этого за основу взял то что раньше называлось PlazaColumns.Table. Теперь везде именуется едино - SystemTableName. Оно равно НазваниеПотока/НазваниеТаблицы.

Не закончил до конца. Залил пока не компилябельное. Если есть желающие закончить - посмотрите как пример PlazaUsdOnlineColumns.


Михаил, посмотри, пожалуйста, на мою редакцию PlazaColumns. Комментарии внутри кода.

Простое имя таблицы (без имени стрима) мне нужно для создания схем.


Так может тогда 2 свойства ввести для PlazaColumn - StreamName и SystemTableName?
Автор топика
Спасибо:

aspirant

Фотография
Дата: 11.03.2011
Ответить


Mikhail Sukhov Перейти
Так может тогда 2 свойства ввести для PlazaColumn - StreamName и SystemTableName?


А что если: PlazaColumns owner?
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 11.03.2011
Ответить


aspirant Перейти
Mikhail Sukhov Перейти
Так может тогда 2 свойства ввести для PlazaColumn - StreamName и SystemTableName?


А что если: PlazaColumns owner?


Если дело в названии свойства - без разницы. Если другая концепция, то я не понял.
Автор топика
Спасибо:

aspirant

Фотография
Дата: 11.03.2011
Ответить


Mikhail Sukhov Перейти
Если дело в названии свойства - без разницы. Если другая концепция, то я не понял.


Концепция другая: в конструктор передается PlazaColumns owner. Потом, внутри класса PlazaColumn можно получить доступ к свойствам owner'а SystemTableName, ReplicationStream и т.д. Если потом что-то добавится, не нужно будет менять конструктор PlazaColumn. Все хорошо, только нюанс: в конструкторе PlazaColumn с owner'ом ничего нельзя будет сделатьSad. Он будет еще пока равен null, потому что переменные типа PlazaColumn инициализируются в конструкторе наследника PlazaColumns. Например:
Код

internal PlazaColumn(PlazaColumn owner, string name, Type dataType)
{
    //Следующая строчка вызовет исключение, потому мы все еще внутри конструктора PlazaColumns, и поэтому owner == null
    var tableName = owner.SystemTableName;
}

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 11.03.2011
Ответить


aspirant Перейти
Mikhail Sukhov Перейти
Если дело в названии свойства - без разницы. Если другая концепция, то я не понял.


Концепция другая: в конструктор передается PlazaColumns owner. Потом, внутри класса PlazaColumn можно получить доступ к свойствам owner'а SystemTableName, ReplicationStream и т.д. Если потом что-то добавится, не нужно будет менять конструктор PlazaColumn. Все хорошо, только нюанс: в конструкторе PlazaColumn с owner'ом ничего нельзя будет сделатьSad. Он будет еще пока равен null, потому что переменные типа PlazaColumn инициализируются в конструкторе наследника PlazaColumns. Например:
Код

internal PlazaColumn(PlazaColumn owner, string name, Type dataType)
{
    //Следующая строчка вызовет исключение, потому мы все еще внутри конструктора PlazaColumns, и поэтому owner == null
    var tableName = owner.SystemTableName;
}



Весь смысл содержания SystemTableName в том, чтобы делать проверки на допустимость вставляемых колонок. А так, если owner только потом появиться, то это не очень хорошо... Есть предложение по owner. А почему бы его сразу не передавать в конструктор PlazaColumn? Тоесть, все эти таблицы, которые есть сейчас в Плаза, сразу создать в одном месте. Создаются без каких-либо колонок, просто название потока, таблицы и название человеческое. Например:

Код
static class PlazaTableRegistry
{
public static PlazaTable OptVcb = new PlazaTable("FORTS_OPTINFO_REPL", "opt_vcb", "Опционы");
}


и уже потом при создании метаданных это учитывать:

Код
public class PlazaVmFutureColumns: PlazaVmDerivativeColumns
{
    internal PlazaVmFutureColumns()
        : base(PlazaTableRegistry.OptVcb)
    {
        VmReal = new PlazaColumn(PlazaTableRegistry.OptVcb, "vm_real", typeof(decimal), "d16.5", true);
    }

    /// <summary>
    /// Накопленная по сделкам вариационная маржа по фьючерсам, рассчитанная по текущей рыночной котировке.
    /// </summary>
    public readonly PlazaColumn VmReal;
}


А пользователь потом уже сам решит, что в OptVcb добавлять (и добавлять ли вообще).
Автор топика
Спасибо:

aspirant

Фотография
Дата: 11.03.2011
Ответить


Код
public class PlazaVmFutureColumns: PlazaVmDerivativeColumns
{
internal PlazaVmFutureColumns()
: base(PlazaTableRegistry.OptVcb)
{
VmReal = new PlazaColumn(PlazaTableRegistry.OptVcb, "vm_real", typeof(decimal), "d16.5", true);
}

/// <summary>
/// Накопленная по сделкам вариационная маржа по фьючерсам, рассчитанная по текущей рыночной котировке.
/// </summary>
public readonly PlazaColumn VmReal;
}


Михаил, идея хорошая. Только в верхнем коде: таблице opt_vcb соответствует класс PlazaOptionColumns, а для PlazaVmFutureColumns внутри PlazaTableRegistry нужно будет создать переменную VmFuture.
Спасибо:

aspirant

Фотография
Дата: 13.03.2011
Ответить


Я внес предложенные изменения:
  1. PlazaTable перенес в папку Metadata. Теперь этот класс только содержит метаданные для таблицы из стрима Плазы. Созданием и конфигурированием набора колоннок (полей) для получения данных он больше не занимается.
  2. Добавил класс PlazaTableRegister. Он будет содержать переменные типа PlazaTable для всех таблиц Плазы. Для наглядности добавил:
    Код
    public static PlazaTable RtsIndex = new PlazaTable(TableName.rts_index, ReplicationStream.RTS_INDEX_REPL, "Индекс РТС");

  3. В конструкторы PlazaColumns и PlazaColumn теперь передается параметр типа PlazaTable.
  4. Для создания схем (ini файлов для получения данных из стримов Плазы) я добавил класс PlazaColumnSet. Внутри его конструктора проверяется, что все колонки принадлежат заданной таблице. В будущем его хочу дополнить, чтобы облегчить создание схем.

Жду ваши комментарии / пожелания, после чего начну рефакторить папку Metadata.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 13.03.2011
Ответить


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


Лишний класс. Уже есть PlazaColumnList (кстати так же надо в Метадату перетащить), который проверяет на принадлежность. + проверять нужно не в самом конструкторе, а при добавлении колонок. Потому что колонки можно менять динамически (добавлять, удалять).
Автор топика
Спасибо:

aspirant

Фотография
Дата: 13.03.2011
Ответить


Mikhail Sukhov Перейти
Уже есть PlazaColumnList


OK, использую его.
Спасибо:

aspirant

Фотография
Дата: 16.03.2011
Ответить


Сегодня планирую завершить рефакторинг метаданных. Когда вчера и позавчера правил файлы, столкнулся с таким расхождением: все классы фючерсов называются сокращенно, например, PlazaFutSessionContentsColumns, все классы опционов - полностью, например, PlazaOptionSessionSettlementColumns. Хочу привести все к единому стандарту. Что берем за основу: краткую версию или длинную?
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.03.2011
Ответить


aspirant Перейти
Сегодня планирую завершить рефакторинг метаданных. Когда вчера и позавчера правил файлы, столкнулся с таким расхождением: все классы фючерсов называются сокращенно, например, PlazaFutSessionContentsColumns, все классы опционов - полностью, например, PlazaOptionSessionSettlementColumns. Хочу привести все к единому стандарту. Что берем за основу: краткую версию или длинную?


Лучше длинное. Более правильное, что ли. Да и при такой длине слова как PlazaOptionSessionSettlementColumns не особо различимо.BigGrin
Автор топика
Спасибо:

aspirant

Фотография
Дата: 16.03.2011
Ответить


Закончил рефакторить метаданные. Добавил статические переменные в PlazaColumns для всех недостающих наследников PlazaColumns. Проект теперь компилируется.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 17.03.2011
Ответить


aspirant Перейти
Проект теперь компилируется.


Good news everyone!
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 18.03.2011
Ответить


Mikhail Sukhov Перейти
aspirant Перейти
Проект теперь компилируется.


Good news everyone!


Отрефакторил класс PlazaType.
Автор топика
Спасибо:


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

loading
clippy