Убрал перечисление PlazaTableTypes. Совершенно бесмысленная информация. Вместо этого за основу взял то что раньше называлось PlazaColumns.Table. Теперь везде именуется едино - SystemTableName. Оно равно НазваниеПотока/НазваниеТаблицы.
Не закончил до конца. Залил пока не компилябельное. Если есть желающие закончить - посмотрите как пример PlazaUsdOnlineColumns.
Comments (15)
Login or Create account, Log in or register to leave a comment
Михаил, посмотри, пожалуйста, на мою редакцию PlazaColumns. Комментарии внутри кода.
Простое имя таблицы (без имени стрима) мне нужно для создания схем. Потом отдельные свойства для имен таблиц и потоков пригодятся, если понадобится использовать Reflection. Например, чтобы отобрать все свойства-стаканы внутри PlazaColumns, можно сделать:
Если возражений нет, я сегодня вечером отредактирую метаданные.
Так может тогда 2 свойства ввести для PlazaColumn - StreamName и SystemTableName?
А что если: PlazaColumns owner?
Если дело в названии свойства - без разницы. Если другая концепция, то я не понял.
Концепция другая: в конструктор передается PlazaColumns owner. Потом, внутри класса PlazaColumn можно получить доступ к свойствам owner'а SystemTableName, ReplicationStream и т.д. Если потом что-то добавится, не нужно будет менять конструктор PlazaColumn. Все хорошо, только нюанс: в конструкторе PlazaColumn с owner'ом ничего нельзя будет сделать😢. Он будет еще пока равен null, потому что переменные типа PlazaColumn инициализируются в конструкторе наследника PlazaColumns. Например:
internal PlazaColumn(PlazaColumn owner, string name, Type dataType) { //Следующая строчка вызовет исключение, потому мы все еще внутри конструктора PlazaColumns, и поэтому owner == null var tableName = owner.SystemTableName; }
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); }
}
Михаил, идея хорошая. Только в верхнем коде: таблице opt_vcb соответствует класс PlazaOptionColumns, а для PlazaVmFutureColumns внутри PlazaTableRegistry нужно будет создать переменную VmFuture.
Я внес предложенные изменения:
Лишний класс. Уже есть PlazaColumnList (кстати так же надо в Метадату перетащить), который проверяет на принадлежность. + проверять нужно не в самом конструкторе, а при добавлении колонок. Потому что колонки можно менять динамически (добавлять, удалять).
OK, использую его.
Сегодня планирую завершить рефакторинг метаданных. Когда вчера и позавчера правил файлы, столкнулся с таким расхождением: все классы фючерсов называются сокращенно, например, PlazaFutSessionContentsColumns, все классы опционов - полностью, например, PlazaOptionSessionSettlementColumns. Хочу привести все к единому стандарту. Что берем за основу: краткую версию или длинную?
Лучше длинное. Более правильное, что ли. Да и при такой длине слова как PlazaOptionSessionSettlementColumns не особо различимо.😀
Закончил рефакторить метаданные. Добавил статические переменные в PlazaColumns для всех недостающих наследников PlazaColumns. Проект теперь компилируется.
Good news everyone!
Отрефакторил класс PlazaType.