Страница: 1 | 2 | 3 |
Вопрос: Подходящий DataSet
Добавлено: 19.05.05 16:39
Автор вопроса: danser | ICQ: 299287824
Ответы
Всего ответов: 35
Номер ответа: 16
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #16
Добавлено: 21.05.05 16:08
Код на самом деле очень прост... Только фишка в том, что он создает нетипизированный DataSet.
Может ты просто не понимаешь разницу?..
Номер ответа: 17
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #17
Добавлено: 21.05.05 16:11
Сорри, исправлюсь, невнимательно посмотрел твой код
Тут описано ручное создание типизированного DataSet'а, которое в теме уже описывалось выше...
В общем, давайте не будет продолжать пустой разговор... Артем всё правильно сказал, что сделать можно, но это будет довольно тормозной, неэффективный, а самое главное - абсолютно ненужный код, ибо проще использовать нетипизированный DataSet.
Номер ответа: 18
Автор ответа:
⊗WaX⊗
Вопросов: 26
Ответов: 325
Web-сайт:
Профиль | | #18
Добавлено: 21.05.05 17:45
Кто то кого-то уже отправлял к окулисту
Что такое типизированный датасет я понимаю я не понимаю какой смысл его использовать.
Читал читал так и не увидел выгоды для себя.
Номер ответа: 19
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #19
Добавлено: 21.05.05 18:50
Смысл есть, но в основном он выражается именно в удобстве использования.
Вместо этого:
Messagebox.Show (DS.Tables("users"(10)("name".ToString)
Пишется это:
MessageBox.Show(DS.Users(10).Name)
Т.е. не нужно выполнять преобразование типов (Cint, Cdate и т.п.) - все типы
заданы жестко.
Соответственно, я не смогу по ошибке в поле "name" вставить дату.
Избегаются многие ошибки, связаные с невнимательностью.
Если я, например, вместо поля "name" напише "nmae" и не замечу этого, то
ошибку я словлю только во время выполнения, хотя с тиипзированным датасетом
эта ошибка в принципе невозможна.
Еще одно преимущество (правда им я не пользвоался) - по идее, в DataSet
задаются пределы значений определенного поля, т.е., например, можно указать,
что в поле Age можно вводить только неотрицательные числа меньше 150.
Ну и в .Net 2.0 типизированный DataSet в сочетании с TableAdapter - это
очень мощный высокотехнологический инструмент, благодаря которому фактически
весь код доступа к БД вместо десятков строк на функцию (создание SQLCommand,
Connection, DataTable и т.д.) сводится к следующему:
Dim TA As New UsersTableAdapter
Dim Users As UsersDataTable = TA.GetAll ()
UsersDataTable - это типизированная таблица (DataTable)
Номер ответа: 20
Автор ответа:
⊗WaX⊗
Вопросов: 26
Ответов: 325
Web-сайт:
Профиль | | #20
Добавлено: 22.05.05 13:25
2 Артем
1. Да все это я знаю - неубелительно как то.
А что если я в БД в силу ряда причин меняю тип данных как вариант делаю Char длиннее мне все типизированные навороты нужно будет перегенерить?
А если заказчик в конце проекта скажет я хочу, чтобы в базу писалось еще вот это и вот это тоже все типизированные вещи переделывать?
2.
А типизированную таблицу ты как создаешь?
ИМХО зря все это. Все равно вся визуальность доступна только для SQL server'a нам же простым бедным пользователям Postgres и my SQL все эти полезности как то совсем бесполезны.
Да и вопрос
в 2.0 провайдеры для 1.1 работают или я зря его качаю (2.0 в смысле)
Номер ответа: 21
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #21
Добавлено: 22.05.05 14:52
Да.
Типизированный DataSet в этом случае нужно дополнить соответствующими полями.
В состав типизированного DataSet входят и типизированныет таблицы.
Выше я приводил код, как эта таблица используется.
Вообще, если есть подозрение, что приложение будет серьезно масштабирваться, что в приложении потребуется сложная бизнес-логика, что БД может подвергаться изменениям, то стоит подумать уже не о том, чтоб ограничиться одним DataSet, а использовать более сложную модель, в т.ч. с моделью предметной области.
Номер ответа: 22
Автор ответа:
⊗WaX⊗
Вопросов: 26
Ответов: 325
Web-сайт:
Профиль | | #22
Добавлено: 22.05.05 16:02
Что такое модель предметной области?
Если приложение это клиент БД то все, что должно делать клинтское приложение это отображать данные и добавлять новые. Обработкой, провверкой, корректировкой данных должна заниматься СУБД.
ИМХО.
В состав типизированного DataSet входят и типизированныет таблицы.
Выше я приводил код, как эта таблица используется.
Как ты ее создаешь в 2.0 так же как и в 1.1 Мастером?
Номер ответа: 23
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #23
Добавлено: 22.05.05 16:56
Не согласен. Бывают разные ситуации. Где-то эффективней разместить бизнес-логику в СУБД, где-то лучше - на веб-сервере, где-то - на клиенте, а где-то вообще разнести по разным уровням.
Номер ответа: 24
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #24
Добавлено: 22.05.05 18:31
Модель предметной области (Domain Module) - это способ организации уровня домена.
Фактически она представляет собой граф с объектами, каждый из которых соответствует определенной сущности.
То есть, ты работаешь не с базой данных, не с SQL-запросами, а с объектами.
Откуда они берутся и куда потом сохраняются - это не столь важный вопрос, может сохраняться в серверной реляционной БД, может в обычный XML-файл или вообще можно полностью этот граф сериализировать
ИМХО
В корне не согласен.
ИМХО:
СУБД - это только часть приложения, которая отвечает только за загрузку и сохранение данных. Все остальное должно быть реализовано в домене.
В том числе потмоу, что приложение не должно зависеть от источника данных.
В 1.1 я практически не использовал типизированные датасеты.
А в 2.0 это делаю мастером.
Фактически я выбираю источник данных, пишу SQL-запрос (для особо одаренных есть фича автогенерации запросы, типа Query Builder), жму ОК и создается типизированная таблица и TableAdapter.
2 Павел:
На клиенте имхо размещать бизнес-логику - это все равно что копать себе яму, зная, что все равно в нее упадешь.
А если бизнес-логика реализована в домене, то пропадает зависимость от клиента.
Что касается СУБД, я уже говорил выше.
Номер ответа: 25
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #25
Добавлено: 24.05.05 10:38
В любом мало-мальски серьезном приложении хотя бы небольшая часть бизнес-логики размещается на клиенте...
Кстати, Билл Гейтс тоже не отрицает такой вариант Из книги "Бизнес со скоростью мысли":
Номер ответа: 26
Автор ответа:
⊗WaX⊗
Вопросов: 26
Ответов: 325
Web-сайт:
Профиль | | #26
Добавлено: 24.05.05 18:35
Как обычно истина посередине. Если называть бизнес логикой, то что поле счет должно быть заполнено, не обязательно пересылать данные СУБД, чтобы она в конце длинной транзакции вылетела по not null constraint и откатывала данные. Достаточно просто показать мессаджбокс с ошибкой и обратно если проверка ввода достаточно трудоемка и тем более основанна на внутрикорпоративных заморочках которые как известно меняются со скорстью размножения мух дрозофил. То гораздо проще повесить триггер. И в зависимости от контекста обругиваться.
Артемов вариант если честно меня не впечатлил, если в моем варианте участвуют два разработчика программист БД и программист форм, то тут появляется еще и третий - программист логики. Если можно Артем приведи простенький пример этого третьего звена.
Может быть это конечно и интересный варант.
See Ya
Номер ответа: 27
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #27
Добавлено: 25.05.05 10:26
2 WaX: трехуровневая архитектура приложений (MVC,
Model-View-Controller) - одна из самых распространенных, и я удивлен,
что ты о ней не знаешь...
Например, этот сайт я разрабатывал согласно этой архитектуре. Вся (ну,
не вся, конечно, все равно частично код обработки данных есть на
клиенте и в СУБД) бизнес-логика размещена в .NET Class Library. Эта
библиотека содержит классы, взаимодействующие с СУБД SQL Server 2000,
получает и передает данные в БД, занимается проверкой и кешированием
данных.
Номер ответа: 28
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #28
Добавлено: 25.05.05 17:36
Что значит в твоем понимании "программист БД"?
Если это человек, который разработывает интерфейс доступа представления (твоей формы) к БД, то этот программист и должен делать модель.
Пример привести не могу, тк доступа к исходным кодам корпоративных приложений по некоторым причинам у меня нет.
Я еще раз могу объяснить принцип - вместо таблиц ты использвешь объекты, которые в нужное время сохраняются в БД.
А реализация для каждого случая будет отличаться, причем очень сильно - от той же корпоративной политики.
Номер ответа: 29
Автор ответа:
⊗WaX⊗
Вопросов: 26
Ответов: 325
Web-сайт:
Профиль | | #29
Добавлено: 25.05.05 18:42
2 Павел и Артем
Естественно знаю меня интересовал этот третий уровень на XML как говорил Артем.
Если честно то всегда так и поступал - вся бизнес логика реализовывалась в библиотеках (как во всех умных книгах написано ) частично я это делаю и теперь, но сейчас там остался только интерфейс доступа к БД, по возможности стараюсь реализовывать всю логику в Хранимых процедурах и Представлениях к счастью Постгрес это позволяет. Причину этого объясню: например решили изменить тех процесс обработки детали если вся бизнес логика построена на классах, то нужно будет перекомпилировать весь проект либо библиотеки мне же достаточно внести изменения толко в одну хранимую процедуру. Захотели видеть дополнительные данные - пожалуйста изменил вьюху и все - даже программу закрывать не нужно. Можно конечно все библиотеки содержащие логику хранить на сервере и загружать их при запуске либо реализовать механизм обновления, но ИМХО гимор это...
Номер ответа: 30
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #30
Добавлено: 25.05.05 19:03
Ну зачем гемморой с автообновлением?.. Гораздо красивей хостить
бизнес-логику под IIS (на ASP .NET), и обращаться к ней через механизм
веб-сервисов..
А вообще, все зависит от приложений и их масштабов. В действительно
серьезных приложениях гораздо удобнее организовать доменную модель
бизнес-логики...
В SQL Server 2005 можно конечно побольше кода переместить на уровень
СУБД, так как там CLR интегрирована в ядро СУБД и можно писать ХП на
CLS-языках...
Но, опять же, единых подходов не существует, и все целиком зависит от
специфики приложения.