Убрал перечисление PlazaTableTypes. Совершенно бесмысленная информация. Вместо этого за основу взял то что раньше называлось PlazaColumns.Table. Теперь везде именуется едино - SystemTableName. Оно равно НазваниеПотока/НазваниеТаблицы.
Не закончил до конца. Залил пока не компилябельное. Если есть желающие закончить - посмотрите как пример PlazaUsdOnlineColumns.
コメント (15)
ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください
Михаил, посмотри, пожалуйста, на мою редакцию 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.