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 добавлять (и добавлять ли вообще).