DataSet-ы ADO.Net vs. бизнес-сущности

6yrop

В чем недостатки DataSet-ов по сравнению с бизнес-сущностями?
В .Net DataSet-ы основная составляющая механизма доступа к базам данных, как с этим обстоит дело в Java? есть ли в самой технологии Java аналоги DataSet-ов? если нет, то что там предлагается?
На rsdn было высказано (тред Зыче нужен Rsdn.Framework.Data?) вот такое мнение
Беспредметные споры о простых и сложных случаях в данном случае бесполезны. Сравнивать можно только конкретные реализации. У меня была возможность в одном проекте сравнить датасеты и бизнесэнтити. Вывод сделан однозначный - у датасетов есть только одно преимущество - они являются частью фреймворка и поддерживаются студией, поэтому они хорошо подходят для маленьких проектов. Я бы даже сказал крохотных. Других явных преимуществ они не имеют.

6yrop

кто-нибудь вообще использует DataSet-ы?

freezer

я, например. Вот только не знаю что такое "бизнес-сущности"

Dasar

> В чем недостатки DataSet-ов по сравнению с бизнес-сущностями?
1. DataSet - всегда навязывает реляционный подход
2. DataSet - тяжело интегрировать с внешними модулями (когда DataSet должен откуда-то брать данные)
3. DataSet - непрозрачное решение, т.е. если при использование бизнес-сущностей можно про базу не знать, то с DataSet-ом про базу надо знать обязательно.

6yrop

да, я сам не знаю Мои представления такие. Пусть у нас есть клиенты, заказы и т.д., для них заводятся классы


class Client{...}
class Order{...}
....


при этом данные в экземпляры этих классов грузятся из реляционной БД. Подгрузку можно самим писать, можно использывать, например, Lazy-объекты ( о них тут как-то писал).

6yrop

используете ли вы иморт XSD-типов <xs:impot>, <xs:include>?

6yrop

дело в том, что, как отметили на rsdn, в случае импорта VS7 не производит автаматическую перегенирацию классов датасетов.
А в VS2005 я вообще не нашел как посмотреть XML-текст схемы, раньше кнопочка была для переключения между представлениями, сейчас ее нет, а если самому заглянуть в файл, то теперь туда добавляется много какой-то "лишней" информации. Я вообще не нашел, как в VS2005 сделать иморт (даже свойств таких теперь нет).

freezer

а какая нахрен разница?.. Делаешь сериализуемый класс, после чего объект можно перегонять в XML, а XML - в DataSet. Или наоборот.
Не знаю что DataSet'ы навязывают, но древовидные структуры они нормально поддерживают

Dasar

DataSet-ы - они "мертвые", но на бизнес-уровне удобнее работать с "живыми" объектами.

6yrop

по поводу DataSet-ов и XML, и XML вообще
Well, of course it's XML, but if I say, hey take this sentence, it's in the ASCII character set (who care's if it isn't English) Le "DataSet" n'est pas votre ami si vous faites des Services de Web. Well, Barry can understand that, but I no hablo French

DataSet'ы ... древовидные структуры ... нормально поддерживают

DataSet-ы это реляционка -- набор тайблов, поэтому они поддерживают древовидные структуры так же "хорошо" как и реляционка

freezer

DataSet-ы это реляционка -- набор тайблов, поэтому они поддерживают древовидные структуры так же "хорошо" как и реляционка

А как же навигация по дереву? Например, DataRow.GetParentRow DataRow.GetChildRows?

freezer

разница только в строгости типов. С DataSet'ами (нетипизированными) меньше ошибок отлавливается на этапе компиляции.

6yrop

тк это навигация по схеме реляционной базы, в большинстве случаев это действительно дерево (в общем случае это ориентированный граф но дерево реляционной схемы. Это деревья не общего вида, которые можно хранить в XML. Например, вполне логично иметь вот такой XML

<CustomUISample>
<CDCollection>
<CD>
<Title>Meisner Darrell</Title>
<Artist>Meisner Darrell</Artist>
<Tracks>
<Track>When The Saints Go Marching In</Track>
<Track>On The Sunny Side Of The Street</Track>
<Track>Ain't Misbehavin'</Track>
</Tracks>
<Label></Label>
</CD>
<CD>
<Title>Abbas Syed</Title>
<Artist>Abbas Syed</Artist>
<Tracks>
<Track>Dreams</Track>
<Track>5150</Track>
</Tracks>
</CD>
<CD>
<Title>Cencini Andrew</Title>
<Artist>Cencini Andrew</Artist>
<Tracks>
<Track>Once upon a time in the west</Track>
<Track>Expresso love</Track>
<Track>Romeo and Juliet</Track>
</Tracks>
<Label>Southridge Video</Label>
</CD>
<CD>
<Title>Entin Michael</Title>
<Artist>Entin Michael</Artist>
<Tracks>
<Track>Alpine valley</Track>
<Track>Plains of joy</Track>
<Track>Waitin' guitar</Track>
</Tracks>
<Label>Contoso Ltd.</Label>
</CD>
<CD>
<Title>Baker Mary</Title>
<Artist>Baker, Mary</Artist>
<Tracks>
<Track>Subdivisions</Track>
<Track>Time Stand Still</Track>
<Track>Mystic Rhythms</Track>
</Tracks>
<Label>Lucerne Publishing</Label>
</CD>
<CD>
<Title>Kane Lori</Title>
<Artist>Kane Lori</Artist>
<Tracks>
<Track>Eine kleine Nachtmusik:Allegro</Track>
<Track>Piano Concerto in A major, K 488: Adagio</Track>
<Track>Flute Concerto in D major, K 314: Allegro</Track>
</Tracks>
<Label></Label>
</CD>
<CD>
<Title>Zimmerman Marc</Title>
<Artist>Zimmerman Marc</Artist>
<Tracks>
<Track>via Medina</Track>
<Track>Evviva 'o Rre'</Track>
<Track>Tempo di cambiare</Track>
</Tracks>
<Label>Proseware Inc.</Label>
</CD>
</CDCollection>
</CustomUISample>


как ты его будешь загружать в DataSet? потребуеся дополнительное преобразование

freezer

Да-а, абзац!
Потребовалось архисложное преобразование, добавляющее в начало твоего XML-я строку
<?xml version="1.0" encoding="utf-8" ?>
и мегакрутая прога, читающая твой XML в DataSet:


using System;
using System.Data;
namespace xml_test
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
DataSet ds = new DataSet;
ds.ReadXml(@"..\..\XMLFile1.xml");
Console.WriteLine(ds.GetXmlSchema;
}
}
}


В общем, учи матчасть. Удачи!

6yrop

ты посмотри сколько у тебя таблиц получилось


Console.WriteLine(ds.Tables.Count.ToString;


4 , для хранения этой информации достаточно одной таблицы. Так что учиться тебе надо

freezer

Напишешь правильную схему для XML-я, будет тебе одна таблица. А получить схему из самого XML-я однозначно нельзя, всегда будут альтернативные варианты

6yrop

напиши правильную схему, которая
1. соответствовала этому XML-файлу
2. содержала одну таблицу

Dasar

> А как же навигация по дереву? Например, DataRow.GetParentRow DataRow.GetChildRows?
Как быть, например, с деревом файловой системы?
Как быть с полиморфными деревьями?

6yrop


в схемеу таблицы Tracs всего один столбец, однако, если посмотреть из кода, то их два CD_id и Trac_id, т.е. реляционная схема DataSet-а нетривильно получатся из XML-схемы, вот это пипец

6yrop

вообще, подразумевалось осмысленно загрузить, чтобы потом можно было пользоваться этим DataSet-ом, сохранять в БД и т.д. , а загрузить можно и в одну ячейку весь XML как стринг.

freezer

Как быть с полиморфными деревьями?

Это да, с этим проблемы: реляционная СУБД никакого полиморфизма не допускает

Dasar

реляционная СУБД никакого полиморфизма не допускает
но древовидные структуры они нормально поддерживают
Я правильно понял, что полиморфные данные - не относятся к нормальному "программированию"?
вернее,
что использование полиморфных отношений при описание данных - это ненормально?

6yrop

1. Ты же писал, что такого описания данных еще не существует ( и выше в том же треде).
2. отношений между чем? ... типами. А что такое типы в случае описания данных? классы, в которых присутствуют только поля?

Dasar

> Ты же писал, что такого описания данных еще не существует (тут и выше в том же треде).
Я писал, что можно сделать более продвинутые средства описания данных(программ чем существующие описания данных.
> отношений между чем? ... типами. А что такое типы в случае описания данных? классы, в которых присутствуют только поля?
Скорее "стандартный" тип: т.е. возможные состояния(поля возможные переходы между состояниями (операции, методы ограничения.
Оставить комментарий
Имя или ник:
Комментарий: