Динамическое формирование классов.
От: NetStyler  
Дата: 10.12.02 08:51
Оценка:
Доброго времени суток!
Возник вопрос:
Как формировать классы динамически?
Нужно для создания объектной БД под .NET.
Конечно, у меня у самого есть кое-какие соображения связанные с сериализацией в XML, но хотелось бы послушать умных людей.
Или может, кто посоветует, что почитать… буду очень благодарен.
Sex Drugs and Linux Rules? Realy? ;-)
ICQ:2489468 MSN:mcloud[at]list.ru
Re: Динамическое формирование классов.
От: kreek  
Дата: 10.12.02 08:59
Оценка:
Здравствуйте NetStyler, Вы писали:

NS>Доброго времени суток!

NS>Возник вопрос:
NS>Как формировать классы динамически?

Класс сделать один и на основе метаданных набивать свойства сущности в массив.
... << RSDN@Home 1.0 alpha 12 >>
Re: Динамическое формирование классов.
От: Spark2K Россия  
Дата: 10.12.02 09:20
Оценка:
Здравствуйте, 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);
      }
   }
}
Re[2]: Динамическое формирование классов.
От: NetStyler  
Дата: 10.12.02 10:01
Оценка:
Здравствуйте, 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>
SK>using Microsoft.CSharp;

SK>class TestCScompiller

SK>{
SK>   static void Main(string[] args)
SK>   {
SK>      // этот текст и будем компилировать
SK>      string sText =

SK>@"

SK>using System;

SK>class Foo

SK>{

SK>[STAThread]

SK>static void Main(string[] args)

SK>{

SK>Console.WriteLine(" + "\"Hello world\"" + @");

SK>}

SK>}

SK>";

SK>      // компиляция
SK>      CompilerError[] errs = Compiler.Compile(
SK>            new string[]{sText},
SK>            new string[]{"any_name.cs"},
SK>            "out.exe",
SK>            null,
SK>            null);
SK>      foreach(CompilerError err in errs)
SK>      {
SK>            Console.WriteLine(err);
SK>      }
SK>   }
SK>}
SK>
Sex Drugs and Linux Rules? Realy? ;-)
ICQ:2489468 MSN:mcloud[at]list.ru
Re[2]: Динамическое формирование классов.
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.12.02 10:04
Оценка:
Здравствуйте, Spark2K, Вы писали:

SK>Правда добавляет, что это пространство имен, в основном, предназначено для создателей средств разработки.


Фигню он говорит.
... << RSDN@Home 1.0 beta 2 (developer build)>>
AVK Blog
Re[2]: Динамическое формирование классов.
От: NetStyler  
Дата: 10.12.02 10:06
Оценка:
Здравствуйте, kreek, Вы писали:

K>Здравствуйте NetStyler, Вы писали:


Это слишком просто и неудобно.
Может еще идеи есть?
NS>>Доброго времени суток!
NS>>Возник вопрос:
NS>>Как формировать классы динамически?

K>Класс сделать один и на основе метаданных набивать свойства сущности в массив.
Sex Drugs and Linux Rules? Realy? ;-)
ICQ:2489468 MSN:mcloud[at]list.ru
Re: Динамическое формирование классов.
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.12.02 10:07
Оценка:
Здравствуйте, NetStyler, Вы писали:

NS>Возник вопрос:

NS>Как формировать классы динамически?
NS>Нужно для создания объектной БД под .NET.

А зачем динамически? У тебя в процессе работы структура БД меняться будет? Почему не сделать генератор исходников?

NS>Конечно, у меня у самого есть кое-какие соображения связанные с сериализацией в XML, но хотелось бы послушать умных людей.


А ты про typed dataset и xsd.exe смотрел? Может не надо тебе ничего делать?
... << RSDN@Home 1.0 beta 2 (developer build)>>
AVK Blog
Re[3]: Динамическое формирование классов.
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.12.02 10:07
Оценка:
Здравствуйте, NetStyler, Вы писали:

NS>Ну собственно нужно динамически добавлять атрибуты в уже существующий класс.


От изврат. Не надо этого делать, не для этого атрибуты предназначены.
... << RSDN@Home 1.0 beta 2 (developer build)>>
AVK Blog
Re[3]: Динамическое формирование классов.
От: Spark2K Россия  
Дата: 10.12.02 10:10
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Spark2K, Вы писали:


SK>>Правда добавляет, что это пространство имен, в основном, предназначено для создателей средств разработки.


AVK>Фигню он говорит.


Конструктивно
Re[4]: Динамическое формирование классов.
От: kreek  
Дата: 10.12.02 10:16
Оценка:
Здравствуйте AndrewVK, Вы писали:

AVK>Здравствуйте, NetStyler, Вы писали:


NS>>Ну собственно нужно динамически добавлять атрибуты в уже существующий класс.


AVK>От изврат. Не надо этого делать, не для этого атрибуты предназначены.



Он под атрибутами понял как атрибуты бизнес сущности, а не наследников System.Attribute.
... << RSDN@Home 1.0 alpha 12 >>
Re[5]: Динамическое формирование классов.
От: NetStyler  
Дата: 10.12.02 10:20
Оценка:
Здравствуйте, kreek, Вы писали:

Правильно поняли.
На самом деле хочется сделать объектный движок к 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
Re[2]: Динамическое формирование классов.
От: NetStyler  
Дата: 10.12.02 10:25
Оценка:
Здравствуйте, AndrewVK, Вы писали:

Да. Будет динамически меняться.

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
Re[6]: Динамическое формирование классов.
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.12.02 10:25
Оценка:
Здравствуйте, NetStyler, Вы писали:

NS>Правильно поняли.

NS>На самом деле хочется сделать объектный движок к MS SQL.
NS>Думаю он всем будет полезен.

Ты все же ответь — ты xsd.exe смотрел?
... << RSDN@Home 1.0 beta 2 (developer build)>>
AVK Blog
Re[3]: Динамическое формирование классов.
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.12.02 10:28
Оценка:
Здравствуйте, NetStyler, Вы писали:

NS>Здравствуйте, AndrewVK, Вы писали:


NS>Да. Будет динамически меняться.


Тогда следующий вопрос — зачем?
... << RSDN@Home 1.0 beta 2 (developer build)>>
AVK Blog
Re[7]: Динамическое формирование классов.
От: NetStyler  
Дата: 10.12.02 10:32
Оценка:
Здравствуйте, AndrewVK, Вы писали:

Не смотрел .. а стоит ?
AVK>Здравствуйте, NetStyler, Вы писали:

NS>>Правильно поняли.

NS>>На самом деле хочется сделать объектный движок к MS SQL.
NS>>Думаю он всем будет полезен.

AVK>Ты все же ответь — ты xsd.exe смотрел?
Sex Drugs and Linux Rules? Realy? ;-)
ICQ:2489468 MSN:mcloud[at]list.ru
Re[7]: Динамическое формирование классов.
От: NetStyler  
Дата: 10.12.02 10:36
Оценка:
Здравствуйте, AndrewVK, Вы писали:

Ну .. это не совсем то .. что мне программу каждый раз пересобирать при изменении объектов ?

AVK>Здравствуйте, NetStyler, Вы писали:

NS>>Правильно поняли.

NS>>На самом деле хочется сделать объектный движок к MS SQL.
NS>>Думаю он всем будет полезен.

AVK>Ты все же ответь — ты xsd.exe смотрел?
Sex Drugs and Linux Rules? Realy? ;-)
ICQ:2489468 MSN:mcloud[at]list.ru
Re[3]: Динамическое формирование классов.
От: kreek  
Дата: 10.12.02 10:36
Оценка:
Здравствуйте NetStyler, Вы писали:

NS>Здравствуйте, kreek, Вы писали:


K>>Здравствуйте NetStyler, Вы писали:


NS>Это слишком просто и неудобно.

NS>Может еще идеи есть?
NS>>>Доброго времени суток!
NS>>>Возник вопрос:
NS>>>Как формировать классы динамически?

K>>Класс сделать один и на основе метаданных набивать свойства сущности в массив.


Отказываться от простоты?

ICustomTypeDescriptor и PropertyDescriptor дадут возможность такие объекты отображать в гриде или использовать датабиндинг.
... << RSDN@Home 1.0 alpha 12 >>
Re[8]: Динамическое формирование классов.
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.12.02 10:41
Оценка:
Здравствуйте, NetStyler, Вы писали:

NS>Не смотрел .. а стоит ?


Стоит. Может как раз то что тебе надо, или хотя бы частично
... << RSDN@Home 1.0 beta 2 (developer build)>>
AVK Blog
Re[4]: Динамическое формирование классов.
От: NetStyler  
Дата: 10.12.02 10:42
Оценка:
Здравствуйте, AndrewVK, Вы писали:

Хочется создать службу которая:
При пересылки ей объекта — знала как положить его в базу.
При изменениии структуры БД знала как собрать объект.
При изменении объекта — меняла структуру базы.
Поддерживаля связи между объектами и т.д.
Создание объектной БД.

AVK>Здравствуйте, NetStyler, Вы писали:


NS>>Здравствуйте, AndrewVK, Вы писали:


NS>>Да. Будет динамически меняться.


AVK>Тогда следующий вопрос — зачем?
Sex Drugs and Linux Rules? Realy? ;-)
ICQ:2489468 MSN:mcloud[at]list.ru
Re[8]: Динамическое формирование классов.
От: МихаилС Россия  
Дата: 10.12.02 10:44
Оценка:
NS>Ну .. это не совсем то .. что мне программу каждый раз пересобирать при изменении объектов ?

а какие тут парадоксы? версия базы при этом меняется.. выдели отдельный уровень — реализуй его
компоненты в отдельной сборке.. иначе не отделаться тебе от тормозов... не везде к сожалению
можно реализовать динамику так, чтобы при этом не "посадить" систему...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.