|
214 / 214 / 73
Регистрация: 12.01.2011
Сообщений: 767
|
|||||||||||||||||||||
Передача данных между несколькими класами (ADO)24.04.2016, 22:55. Показов 1397. Ответов 6
Метки нет (Все метки)
Доброго времени форумчане. До недавнего времени для передачи данных между формами и классами использовал публичные свойства контролов Owner'a (это между формами) и через метод возвращающий активную форму (на которой так же контролы в публичном доступе). Ну и + (тут я сам знаю что виноват) использовал методы которые меняют объекты (к примеру считывают или записывают в textBox'ы).
На все это мне мягко скажем так указали пальцем. Итак что же по сути я хочу: 1) код формы должен быть минимален. Это вполне понятно, для переносимости например, если вдруг потом надо будет переписать на wpf к примеру. 2) вся логика в классах (у меня обычно так: есть форма и есть класс с методами для этой формы, к примеру, такие как считать из базы, добавить, редактировать, удалить) 3)все контролы форм должны быть в приватном режиме. Из тех способов что я знаю, делегаты, owner, конструктор формы, не подойдут так как по п3 не проходят. Хотя и owner'a и через конструктор формы я тоже использую кое какие вещи. Остается создать класс с публичными свойства и использовать его. я накидал простое приложение для добавления\редактирования\удаление\выбор ки данных через 2ю форму показывающую все это. приложение простое всего 2 формы. код главной формы на которой располагается грид с данными:
класс содержащий методы для этих форм (выборка\вставка\редактирование\удаление больше мне в принципе ничего не надо тут)
TestDB.rar И собственно что меня интересует. А интересует меня мнение опытных ребят, на сколько такой подход хороший или плохой, если другой способ ? Возможно дополнительный класс только хуже и т.д. Вообщем я буду благодарен за любые ваши мнения. PS Тольлько для ADO.NET. с ORM все подругому.
0
|
|||||||||||||||||||||
| 24.04.2016, 22:55 | |
|
Ответы с готовыми решениями:
6
Передача данных на удаленный сервер по TCP несколькими потоками Передача данных между формами Передача данных между ПК по интернету |
|
|
||
| 24.04.2016, 23:31 | ||
|
1
|
||
|
214 / 214 / 73
Регистрация: 12.01.2011
Сообщений: 767
|
|||||||
| 25.04.2016, 12:25 [ТС] | |||||||
![]() Спасибо большое за ответ, я смотрел ваш пример сделанный через события описанный в "7 часто задаваемых вопросов". Но почему на ваш взгляд это самый удобный способ ? Разве злоупотребление событиями и делегатами не приводит в конце концов к жутким тормозам приложения, как пример это AutoCad 9 написанный полностью на событиях. И если необходимо настроить двустороннюю связь между несколькими классами мне же придется описывать события на всех классах, что в свою очередь захламляет немного код. Но в некоторых случаях безусловно события нужны и весьма полезны и очень хорошо дополняют свойства. Хотелось бы если можно по подробнее ))) что касается моего примера то переделал публичный метод в форме в публичное свойство думаю так даже правильнее:
0
|
|||||||
|
|
|
| 25.04.2016, 12:48 | |
|
wm_leviathan, на мой взгляд, есть одна существенная разница между использованием свойств и событий: при использовании свойств внешнему коду приходится запрашивать состояние объекта. Но что, если мы не знаем, когда состояние объекта измениться, и нам нужно именно в этот момент и узнать об изменении? Не будем же мы по таймеру постоянно дергать наш объект. И вот тут и помогут события. Мы просто подписываемся на них и спокойно сидим ждем, когда что-то произойдет. Как только произошло - мы тут же получили уведомление об этом. Кстати, события и свойство можно и совместить (если не хочется писать свой класс для аргумента события). Делаем событие, как произошло - опрашиваем наш объект и получаем актуальные значения свойств. Короче говоря, все хорошо в меру, всему свое время и место.
![]() Добавлено через 15 минут wm_leviathan, сейчас глянул ваш скрин, ну в принципе там у вас все просто. Сейчас минут за 30-40 накидаю, как бы я это сделал. Конечно, не скажу что мой код будет идеален, в конце концов у всех свой стиль. Посмотрите.
1
|
|
|
|
|
| 25.04.2016, 18:07 | |
Сообщение было отмечено wm_leviathan как решение
Решение
wm_leviathan, извиняюсь за задержку, загрузили работой.
![]() В архиве мой пример, сделал по подобию вашего скриншота. В данном случае не требуется никаких особых заморочек, таких как свойства, события и так далее. Просто передаем пару параметров в одну форму из другой и все. Комментариев там не много, я просто не успел. Основной класс работы с БД я прокомментировал, а интерфейс - думаю и так разберетесь. Будет что непонятно-спросите.
2
|
|
|
214 / 214 / 73
Регистрация: 12.01.2011
Сообщений: 767
|
|||||||
| 26.04.2016, 12:48 [ТС] | |||||||
|
insite2012, огромное спасибо за пример, понравилась его реализация.
![]() модели я примерно так же реализовывал а вот доступ к ним, да немного по другому. Интересная реализация через пару Dictionary<OperationType, string> сразу напомнила мне EF )))
0
|
|||||||
|
|
||||
| 26.04.2016, 14:20 | ||||
![]()
1
|
||||
| 26.04.2016, 14:20 | |
|
Помогаю со студенческими работами здесь
7
Передача данных между программами Передача данных между страницами Передача данных между клиентом и сервером Передача данных между классами - в чем ошибка? Передача данных между сеансами удаленного рабочего стола Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|