Привет всем
Знакомлюсь тут с .Net пока нравиться до безумия, хотя еще на C++ под .net писать не пробовал... ну да ладно. Вопрос вот какой, в свое время (году так в 99-2000) я пытался реализовать censored механизм метаданных на VC для Access... Т.е. я описывал таблицы на придуманном мною языке, а на основе этих данных динамически (в этом вся фишка) генерились формы для просмотра этих таблиц базы в Access...
Вобщем идея мне очень нравилас, а вот реализация у меня вышла корявая, что не помешало мне впрочем защитить по ней курсовую, да так что некоторые преподы писали кипятком...
Так вот может кто-нибудь представить как такой подход можно имплементировать на технологии .net? Казалось бы IE, xml и xsl просто созданны для реализиции механизма метаданных, но вот серьезных доков по конкретной реализации я пока не видел .
Здравствуйте, joker6413, Вы писали:
J>Знакомлюсь тут с .Net пока нравиться до безумия, хотя еще на C++ под .net писать не пробовал... ну да ладно. Вопрос вот какой, в свое время (году так в 99-2000) я пытался реализовать ублюдочный механизм метаданных на VC для Access... Т.е. я описывал таблицы на придуманном мною языке, а на основе этих данных динамически (в этом вся фишка) генерились формы для просмотра этих таблиц базы в Access... J>Вобщем идея мне очень нравилас, а вот реализация у меня вышла корявая, что не помешало мне впрочем защитить по ней курсовую, да так что некоторые преподы писали кипятком... J>Так вот может кто-нибудь представить как такой подход можно имплементировать на технологии .net? Казалось бы IE, xml и xsl просто созданны для реализиции механизма метаданных, но вот серьезных доков по конкретной реализации я пока не видел .
Наверное нужно посмотреть в сторону атрибутов. см. класс Attribute, Reflection и т.п.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, joker6413, Вы писали:
J>Так вот может кто-нибудь представить как такой подход можно имплементировать на технологии .net? Казалось бы IE, xml и xsl просто созданны для реализиции механизма метаданных, но вот серьезных доков по конкретной реализации я пока не видел .
J>Буду рад обсудить описанную задачу...
Давай поконкретнее. Что именно тебе неясно — хранение метаданных, их извлечение, построение самого интерфейса?
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, joker6413, Вы писали:
J>>Так вот может кто-нибудь представить как такой подход можно имплементировать на технологии .net? Казалось бы IE, xml и xsl просто созданны для реализиции механизма метаданных, но вот серьезных доков по конкретной реализации я пока не видел .
J>>Буду рад обсудить описанную задачу...
AVK>Давай поконкретнее. Что именно тебе неясно — хранение метаданных, их извлечение, построение самого интерфейса?
Ok. Поясняю... меня интересует: как (какими средствами) .net может облегчить создание системы метаданных.
Например:
Use Case: Пользователь хочет изменить запись в таблице
Пльзователь выбирает нужную таблицу и нужную запись...
Таблица описана в какой-то секции метаданных, там определено что для редактирования надо выполнить параметризированный запрос SQL1, и описание (XML1) названий и типов полей возвращаемого курсора (а может их и не надо описывать). Выполняется запрос, результаты возвращаются в формате xml (XML2). На основании двух xml файлов XML1 и XML2 XSL преобразованием генериться форма причем в контролах уже заложены ограничения ввода соответственно представляемым типам. И.т.д...
Описанная система совсем censored, а в принципе можно описывать точки подключения внешних модулей и вызывать внешнюю бизнес логику...
Так вот, мне хотелось бы выяснить (да и всем я думаю это будет интересно) какими средствами .net можно "грамотно", с наименьшими усилиями реализовывать подобные системы...
Здравствуйте, joker6413, Вы писали:
J>Так вот, мне хотелось бы выяснить (да и всем я думаю это будет интересно) какими средствами .net можно "грамотно", с наименьшими усилиями реализовывать подобные системы...
В качестве хранилища метаданных использовать класс. Дополнительную информацию указывать атрибутами. Все остальные сущности (таблицы, формы, запросы и прочая) должны генериться автоматически на основании этого класса. Для формирования собственно интерфейсов использовать идеологию layout managers.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, joker6413, Вы писали:
J>>Так вот, мне хотелось бы выяснить (да и всем я думаю это будет интересно) какими средствами .net можно "грамотно", с наименьшими усилиями реализовывать подобные системы...
AVK>В качестве хранилища метаданных использовать класс. Дополнительную информацию указывать атрибутами. Все остальные сущности (таблицы, формы, запросы и прочая) должны генериться автоматически на основании этого класса. Для формирования собственно интерфейсов использовать идеологию layout managers.
В целом правильно, только вы описали другой подход . Вы ушли от "динамической" схемы в сторону статической. Ваши метаданные жестко реализуются компилируемыми классами (если я правильно понял) можно сравнить с ранним связыванием. Я же хочу метаданные хранить скажем в xml скрипте. В моей модели компилируемых классов как таковых не существует. Существуют только механизмы преобразований, плохое сравнение но отдаленно это напоминает позднее связывание...
Здравствуйте, joker6413, Вы писали:
J>В целом правильно, только вы описали другой подход . Вы ушли от "динамической" схемы в сторону статической. Ваши метаданные жестко реализуются компилируемыми классами (если я правильно понял) можно сравнить с ранним связыванием. Я же хочу метаданные хранить скажем в xml скрипте.
А какая разница то? Чем xml-скрипт динамичнее исходного кода на шарпе?
J>В моей модели компилируемых классов как таковых не существует. Существуют только механизмы преобразований, плохое сравнение но отдаленно это напоминает позднее связывание...
Зачем руками реализовывать то что в дотнете уже реализовано? И исходный код, по моему, лучше воспринимается, чем xml?
Здравствуйте, joker6413, Вы писали:
J>В целом правильно, только вы описали другой подход . Вы ушли от "динамической" схемы в сторону статической. Ваши метаданные жестко реализуются компилируемыми классами (если я правильно понял) можно сравнить с ранним связыванием.
Эта схема является статичной только относительно. т.к. нужные классы могут создаваться уже после того как было разработано основное ПО. И в этом случае они мало чем отличаются от того-же XML файла. (XML файл даже более статичен т.к. класс кроме метаинформации может нести в себе и большую чать логики)
Если-же рассматривать XML, то как альтернативу можно рассматривать хранение мета информации в самом сервере баз данных (тот-же SQL Server имеет для этого массу возможностей).
J>Я же хочу метаданные хранить скажем в xml скрипте. В моей модели компилируемых классов как таковых не существует. Существуют только механизмы преобразований, плохое сравнение но отдаленно это напоминает позднее связывание...
В данной постановке вопроса .NET будет использоваться только как инструмент и никаких особых приемуществ не даст.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, joker6413, Вы писали:
AVK>А какая разница то? Чем xml-скрипт динамичнее исходного кода на шарпе?
Если в .net не реализованно какой-нибудь магии о которой я не знаю, то C# компилируется. Т.е. после компиляци приложение изменять нельзя. Если появляются изменения — код надо перекомпилировать и тестировать заново. Если метаданные описаны в xml — само приложение перекомпилировать не надо. В этом весь смысл... Зачем по вашему был разработан ASP и весь скриптинг если можно было писать CGI, ISAPI и подключаемые модули?
J>>В моей модели компилируемых классов как таковых не существует. Существуют только механизмы преобразований, плохое сравнение но отдаленно это напоминает позднее связывание...
AVK>Зачем руками реализовывать то что в дотнете уже реализовано? И исходный код, по моему, лучше воспринимается, чем xml?
Здравствуйте, joker6413, Вы писали:
AVK>>А какая разница то? Чем xml-скрипт динамичнее исходного кода на шарпе?
J>Если в .net не реализованно какой-нибудь магии о которой я не знаю, то C# компилируется. Т.е. после компиляци приложение изменять нельзя. Если появляются изменения — код надо перекомпилировать и тестировать заново. Если метаданные описаны в xml — само приложение перекомпилировать не надо. В этом весь смысл... Зачем по вашему был разработан ASP и весь скриптинг если можно было писать CGI, ISAPI и подключаемые модули?
Наверное я не открою для вас луну, если скажу, что ASP.NET является компилируемым.
J>>>В моей модели компилируемых классов как таковых не существует. Существуют только механизмы преобразований, плохое сравнение но отдаленно это напоминает позднее связывание...
AVK>>Зачем руками реализовывать то что в дотнете уже реализовано? И исходный код, по моему, лучше воспринимается, чем xml?
J>Вы студент?
Вы преподаватель?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, joker6413, Вы писали:
J>Здравствуйте, AndrewVK, Вы писали:
J>Если в .net не реализованно какой-нибудь магии о которой я не знаю, то C# компилируется. Т.е. после компиляци приложение изменять нельзя. Если появляются изменения — код надо перекомпилировать и тестировать заново.
Погоди погоди. Делать нужно так — все дата аваре классы лежат отдельно, логика в них содержится только имеющая отношение к данным. Перекомпилировать нужно только их. Компилировать эти классы ты можешь автоматически, прямо из самой программы. Компиляция у шарпа очень быстрая, вполне сопоставима с разбором твоих xml-скриптов.
J>Если метаданные описаны в xml — само приложение перекомпилировать не надо.
А если на шарпе то зачем перекомпилировать само приложение?
J>В этом весь смысл... Зачем по вашему был разработан ASP и весь скриптинг если можно было писать CGI, ISAPI и подключаемые модули?
Хороший пример привел А зачем был разработан ASP.NET? Оно ведь компилируется.
AVK>>Зачем руками реализовывать то что в дотнете уже реализовано? И исходный код, по моему, лучше воспринимается, чем xml?
J>Вы студент?
Для базы данных можно стандартными средствами (дизайнером VS) построить аннотированную схему (XSD) и потом как-нибудьб её имплементировать. Например, написать xslt для построения html формы.
Но этот метод довольно таки деревянный. Мы как раз сейчас делаем проект, основанный на динамической генерации GUI на C#. Это уже второй такой проект (первый был на C++), так что опыт имеется...
Мы создали довольно простую xsd схему, по которой строится xml, описывающий формы. Данные для форм берутся опять таки из xml, генерируемого нашими серверными компонентами. И ими же сохраняется в базу. Работает довольно таки живо.
Но нет придела совершенству... Готов обсудить любые идеи, но писать лучше на email, т.к. в форуме бываю редко. Писать можно levi@raingoldsoft.com
Здравствуйте, levi, Вы писали:
L>Но нет придела совершенству... Готов обсудить любые идеи, но писать лучше на email, т.к. в форуме бываю редко. Писать можно levi@raingoldsoft.com
В форуме есть возможность получать новые сообщения из топика на email. Достаточно поставить нужную галочку.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Нахер брошу все хозяйство и уеду в город я...
Думал забить, но ладно — последняя попытка...
AVK>Погоди погоди. Делать нужно так — все дата аваре классы лежат отдельно, логика в них содержится только имеющая отношение к данным. Перекомпилировать нужно только их. Компилировать эти классы ты можешь автоматически, прямо из самой программы. Компиляция у шарпа очень быстрая, вполне сопоставима с разбором твоих xml-скриптов.
Выходит обыкновенная двухуровневая архитектура... Это не интересно...
J>>Если метаданные описаны в xml — само приложение перекомпилировать не надо.
AVK>А если на шарпе то зачем перекомпилировать само приложение?
Хорошо, я применил слишком широкое понятие... Нам надо перекомпилировать код приложения (или его компоненты). А после этого проводить тестирование.
J>>В этом весь смысл... Зачем по вашему был разработан ASP и весь скриптинг если можно было писать CGI, ISAPI и подключаемые модули?
AVK>Хороший пример привел А зачем был разработан ASP.NET? Оно ведь компилируется.
Компиляция ASP производиться исключительно для оптимизации.
AVK>>>Зачем руками реализовывать то что в дотнете уже реализовано? И исходный код, по моему, лучше воспринимается, чем xml?
J>>Вы студент?
AVK>Да нет вроде. А почему так подумал?
Да потому что в студенческие годы часто в такие ситуации попадал:
Разобрался я с технологией xml/xsl года 3 назад, класс!!! генерация, парсинг, валидация, преобразования... Я просто влюбился в xml. Рассказываю знакомому студенту программеру (правда он паскалист а я сишник) как это здорово, какие вещи можно делать вообще без строчки кода... а он — ну и что, я то же самое на паскале могу написать без всяких там xmlей... Ну друг конечно можешь, ты даже на асме можешь это написать... вопрос в подходе — вокруг появляется множество понастоящему красивых технологий, а ты дальше своего паскаля ничего не видишь... Вобщем так я его и не убедил...
Здравствуйте, joker6413, Вы писали:
AVK>>>>Зачем руками реализовывать то что в дотнете уже реализовано? И исходный код, по моему, лучше воспринимается, чем xml?
J>Да потому что в студенческие годы часто в такие ситуации попадал: J>Разобрался я с технологией xml/xsl года 3 назад, класс!!! генерация, парсинг, валидация, преобразования... Я просто влюбился в xml. Рассказываю знакомому студенту программеру (правда он паскалист а я сишник) как это здорово, какие вещи можно делать вообще без строчки кода... а он — ну и что, я то же самое на паскале могу написать без всяких там xmlей... Ну друг конечно можешь, ты даже на асме можешь это написать... вопрос в подходе — вокруг появляется множество понастоящему красивых технологий, а ты дальше своего паскаля ничего не видишь... Вобщем так я его и не убедил...
Этого друга тоже можно понять. использование XML очень часто вносит никому не нужную избыточность. Его нужно разбирать, валидировать, обрабатывать... Все это вносит дополнительную нагрузку на приложение. Использование-же .NET классов и метаданных (атрибуты и т.п.) в среде .NET является наиболее гармоничным решением. Тут лучше стоит посмотреть на проблему с несколько другой стороны: XML является некоторым языком на основе которого генерируются сущности (классы) которые уже и используются в программе. Один из примеров есть и в стандартной поставке .NET — это генерирование на основе XSD схемы набора классов или типизированного DataSet, создание кода для для работы с веб сервисом на основе WSDL. Можно, конечно, остаться на уровне 3-х летних технологий но это не самый лучший выход.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, joker6413, Вы писали:
AVK>>Погоди погоди. Делать нужно так — все дата аваре классы лежат отдельно, логика в них содержится только имеющая отношение к данным. Перекомпилировать нужно только их. Компилировать эти классы ты можешь автоматически, прямо из самой программы. Компиляция у шарпа очень быстрая, вполне сопоставима с разбором твоих xml-скриптов.
J>Выходит обыкновенная двухуровневая архитектура... Это не интересно...
Честно говоря не понял из чего ты сделал вывод что архитектура двухуровневая.
AVK>>А если на шарпе то зачем перекомпилировать само приложение?
J>Хорошо, я применил слишком широкое понятие... Нам надо перекомпилировать код приложения (или его компоненты). А после этого проводить тестирование.
Ничего не понимаю — зачем тестировать автоматически генерируемый код? И что — xml-скрипт не надо тестировать? По моему ты меня недопонял. Прикладной программист пишет на шарпе интерфейс, добавляет к нему атрибутами дополнительные данные. Все. Далее твоя программа стартует, находит сборку с интерфейсами, генерирует реализующие их классы на основании интерфейсов и атрибутов, компилирует это все в сборку и загружает ее. Что тут тестировать? Интерфейсы?
AVK>>Хороший пример привел А зачем был разработан ASP.NET? Оно ведь компилируется.
J>Компиляция ASP производиться исключительно для оптимизации.
А твою задачу оптимизировать не нужно?
А компиляция используется не только для оптимизации. Как минимум она используется еще и для того чтобы не выдумывать для asp.net свои собственные языки, а использовать готовые компиляторы.
J>>>Вы студент?
AVK>>Да нет вроде. А почему так подумал?
J>Да потому что в студенческие годы часто в такие ситуации попадал: J>Разобрался я с технологией xml/xsl года 3 назад, класс!!! генерация, парсинг, валидация, преобразования... Я просто влюбился в xml. Рассказываю знакомому студенту программеру (правда он паскалист а я сишник) как это здорово, какие вещи можно делать вообще без строчки кода... а он — ну и что, я то же самое на паскале могу написать без всяких там xmlей... Ну друг конечно можешь, ты даже на асме можешь это написать... вопрос в подходе — вокруг появляется множество понастоящему красивых технологий, а ты дальше своего паскаля ничего не видишь... Вобщем так я его и не убедил...
Зря ты так подумал — с xml я давно и хорошо знаком. XML хорош тем, что под него есть готовый парсер. Но в дотнете есть гтовые и удобные парсеры и для шарпа!. Это означает что язык шарп может применяться там где применяется xml (с определенными оговорками естественно). Знаешь в чем проблема в случае xml? Xml не обеспечивает жесткой типизации во время компиляции, а интерфейсы обеспечивают. Это значит что решение, в котором ведущую роль играет xml потенциально тяжелее отлаживать.
Впрочем все это не мешает использовать компиляторы дотнета и xml совместно. В качестве примера такого решения можешь посмотреть на модуль конфигурирования януса (или прочитать на эту тему статью в rsdn mag #3)
J>Так вот может кто-нибудь представить как такой подход можно имплементировать на технологии .net? Казалось бы IE, xml и xsl просто созданны для реализиции механизма метаданных, но вот серьезных доков по конкретной реализации я пока не видел .
J>Буду рад обсудить описанную задачу...
Ты наверное ждешь чуда, которое свершилось.. Приведу пример — один товарищ , который работает удаленно со мной при переписке по айсыкью написал мне примерно следующее:
"сейчас хотел тебе ответить, но мне было так лень набивать буквы, что захотелось
что бы мышью можно было набирать текст, но так как мышью неудобно (много нажатий) то сразу возникла мысль воспользоваться програмой, которая набирала бы тект по голосу. а следом возникла картина
— программисты за компьютерами в лингофонах и начитывают мегабайты кода, гыгыгы"
(как видишь — ему было не лень такое написать)..
Я к тому, что все зависит от идеи — если тебя идея прет, то инструмент не панацея.. Какая разница что ты будешь использоваь — свой язык разметки или xml — это вопрос этетики внешней и удобства твоей же работы.. дот нет так же не решит твоих проблем.. Добавлять к классу атрибуты и методы без перекомпиляции не получится ни на каком языке, если он не является специально для этого заточенным..
Думаю тебе надо написать оконный класс который будет в качестве параметра получать логическую
и физическую схему базы и сроить по ней диалог.. можно сделать это на любом языке в котором ты сможешь получить доступ к окнам, и к XML-парсеру..
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)