Доброго времени суток!
Возник вопрос:
Как формировать классы динамически?
Нужно для создания объектной БД под .NET.
Конечно, у меня у самого есть кое-какие соображения связанные с сериализацией в XML, но хотелось бы послушать умных людей.
Или может, кто посоветует, что почитать… буду очень благодарен.
Sex Drugs and Linux Rules? Realy? ;-)
ICQ:2489468 MSN:mcloud[at]list.ru
Здравствуйте, NetStyler, Вы писали:
NS>Доброго времени суток! NS>Возник вопрос: NS>Как формировать классы динамически? NS>Нужно для создания объектной БД под .NET. NS>Конечно, у меня у самого есть кое-какие соображения связанные с сериализацией в XML, но хотелось бы послушать умных людей. NS>Или может, кто посоветует, что почитать… буду очень благодарен.
То о чем ты спрашиваешь описано в книге "C# и платформа .Net" г-на Эндрю Троелсена (см. стр. 328 — 333). Если в кратце, то он использует типы из пространства имен System.Reflection.Emit. Правда добавляет, что это пространство имен, в основном, предназначено для создателей средств разработки. Так что, может для твоей проблемы лучше другое решение (тогда твой вопрос нужно как-то переформулировать и я думаю, что тебе нужно рассказать о проблеме подробнее и, возможно, кто-нибудь предложить более подходящее решение).
Как вариант можешь формировать код на C# динамически и данамически же его генерировать. Вот пример:
using System;
using Microsoft.CSharp;
class TestCScompiller
{
static void Main(string[] args)
{
// этот текст и будем компилироватьstring sText =
@"
using System;
class Foo
{
[STAThread]
static void Main(string[] args)
{
Console.WriteLine(" + "\"Hello world\"" + @");
}
}
";
// компиляция
CompilerError[] errs = Compiler.Compile(
new string[]{sText},
new string[]{"any_name.cs"},
"out.exe",
null,
null);
foreach(CompilerError err in errs)
{
Console.WriteLine(err);
}
}
}
Здравствуйте, Spark2K, Вы писали:
SK>Здравствуйте, NetStyler, Вы писали:
Ну собственно нужно динамически добавлять атрибуты в уже существующий класс.
Методы трогать не надо. Да и формирование класса о котором система не знает тоже не нужно.
А то получтся .. создаем неизвестно что, потом делаем на это неизвестно что отображение — выясняем что это.. и еще интрфейсы тоже динамически.... слишком заморочено!
Нужно просто добавить несколлько атрибутов.
NS>>Доброго времени суток! NS>>Возник вопрос: NS>>Как формировать классы динамически? NS>>Нужно для создания объектной БД под .NET. NS>>Конечно, у меня у самого есть кое-какие соображения связанные с сериализацией в XML, но хотелось бы послушать умных людей. NS>>Или может, кто посоветует, что почитать… буду очень благодарен.
SK>То о чем ты спрашиваешь описано в книге "C# и платформа .Net" г-на Эндрю Троелсена (см. стр. 328 — 333). Если в кратце, то он использует типы из пространства имен System.Reflection.Emit. Правда добавляет, что это пространство имен, в основном, предназначено для создателей средств разработки. Так что, может для твоей проблемы лучше другое решение (тогда твой вопрос нужно как-то переформулировать и я думаю, что тебе нужно рассказать о проблеме подробнее и, возможно, кто-нибудь предложить более подходящее решение). SK>Как вариант можешь формировать код на C# динамически и данамически же его генерировать. Вот пример: SK>using System;
SK> SK>
Здравствуйте, kreek, Вы писали:
K>Здравствуйте NetStyler, Вы писали:
Это слишком просто и неудобно.
Может еще идеи есть? NS>>Доброго времени суток! NS>>Возник вопрос: NS>>Как формировать классы динамически?
K>Класс сделать один и на основе метаданных набивать свойства сущности в массив.
Sex Drugs and Linux Rules? Realy? ;-)
ICQ:2489468 MSN:mcloud[at]list.ru
Здравствуйте, NetStyler, Вы писали:
NS>Возник вопрос: NS>Как формировать классы динамически? NS>Нужно для создания объектной БД под .NET.
А зачем динамически? У тебя в процессе работы структура БД меняться будет? Почему не сделать генератор исходников?
NS>Конечно, у меня у самого есть кое-какие соображения связанные с сериализацией в XML, но хотелось бы послушать умных людей.
А ты про typed dataset и xsd.exe смотрел? Может не надо тебе ничего делать?
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Spark2K, Вы писали:
SK>>Правда добавляет, что это пространство имен, в основном, предназначено для создателей средств разработки.
AVK>Фигню он говорит.
Здравствуйте AndrewVK, Вы писали:
AVK>Здравствуйте, NetStyler, Вы писали:
NS>>Ну собственно нужно динамически добавлять атрибуты в уже существующий класс.
AVK>От изврат. Не надо этого делать, не для этого атрибуты предназначены.
Он под атрибутами понял как атрибуты бизнес сущности, а не наследников System.Attribute.
Правильно поняли.
На самом деле хочется сделать объектный движок к MS SQL.
Думаю он всем будет полезен. K>Здравствуйте AndrewVK, Вы писали:
AVK>>Здравствуйте, NetStyler, Вы писали:
NS>>>Ну собственно нужно динамически добавлять атрибуты в уже существующий класс.
AVK>>От изврат. Не надо этого делать, не для этого атрибуты предназначены.
K> K>Он под атрибутами понял как атрибуты бизнес сущности, а не наследников System.Attribute.
Sex Drugs and Linux Rules? Realy? ;-)
ICQ:2489468 MSN:mcloud[at]list.ru
Да. Будет динамически меняться. AVK>Здравствуйте, NetStyler, Вы писали:
NS>>Возник вопрос: NS>>Как формировать классы динамически? NS>>Нужно для создания объектной БД под .NET.
AVK>А зачем динамически? У тебя в процессе работы структура БД меняться будет? Почему не сделать генератор исходников?
NS>>Конечно, у меня у самого есть кое-какие соображения связанные с сериализацией в XML, но хотелось бы послушать умных людей.
AVK>А ты про typed dataset и xsd.exe смотрел? Может не надо тебе ничего делать?
Sex Drugs and Linux Rules? Realy? ;-)
ICQ:2489468 MSN:mcloud[at]list.ru
Не смотрел .. а стоит ? AVK>Здравствуйте, NetStyler, Вы писали:
NS>>Правильно поняли. NS>>На самом деле хочется сделать объектный движок к MS SQL. NS>>Думаю он всем будет полезен.
AVK>Ты все же ответь — ты xsd.exe смотрел?
Sex Drugs and Linux Rules? Realy? ;-)
ICQ:2489468 MSN:mcloud[at]list.ru
Ну .. это не совсем то .. что мне программу каждый раз пересобирать при изменении объектов ? AVK>Здравствуйте, NetStyler, Вы писали:
NS>>Правильно поняли. NS>>На самом деле хочется сделать объектный движок к MS SQL. NS>>Думаю он всем будет полезен.
AVK>Ты все же ответь — ты xsd.exe смотрел?
Sex Drugs and Linux Rules? Realy? ;-)
ICQ:2489468 MSN:mcloud[at]list.ru
Здравствуйте NetStyler, Вы писали:
NS>Здравствуйте, kreek, Вы писали:
K>>Здравствуйте NetStyler, Вы писали:
NS>Это слишком просто и неудобно. NS>Может еще идеи есть? NS>>>Доброго времени суток! NS>>>Возник вопрос: NS>>>Как формировать классы динамически?
K>>Класс сделать один и на основе метаданных набивать свойства сущности в массив.
Отказываться от простоты?
ICustomTypeDescriptor и PropertyDescriptor дадут возможность такие объекты отображать в гриде или использовать датабиндинг.
Хочется создать службу которая:
При пересылки ей объекта — знала как положить его в базу.
При изменениии структуры БД знала как собрать объект.
При изменении объекта — меняла структуру базы.
Поддерживаля связи между объектами и т.д.
Создание объектной БД.
AVK>Здравствуйте, NetStyler, Вы писали:
NS>>Здравствуйте, AndrewVK, Вы писали:
NS>>Да. Будет динамически меняться.
AVK>Тогда следующий вопрос — зачем?
Sex Drugs and Linux Rules? Realy? ;-)
ICQ:2489468 MSN:mcloud[at]list.ru
NS>Ну .. это не совсем то .. что мне программу каждый раз пересобирать при изменении объектов ?
а какие тут парадоксы? версия базы при этом меняется.. выдели отдельный уровень — реализуй его
компоненты в отдельной сборке.. иначе не отделаться тебе от тормозов... не везде к сожалению
можно реализовать динамику так, чтобы при этом не "посадить" систему...