Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.11.29;
Скачать: [xml.tar.bz2];

Вниз

Паттерн наблюдатель   Найти похожие ветки 

 
картман ©   (2009-09-28 15:13) [0]

Всем привет!

 Есть фрейм с DBGrid.  Входит в различные формы. Как сделать обновление всех экземпляров? Т.е. как(когда) мне добавлять их в список наблюдателей?


 
clickmaker ©   (2009-09-28 15:16) [1]

при создании формы
при закрытии удалять


 
Сергей М. ©   (2009-09-28 15:21) [2]

Подключи все гриды к одному и тому де DataSource


 
картман ©   (2009-09-28 15:27) [3]


> Сергей М. ©   (28.09.09 15:21) [2]

не кошерно


> clickmaker ©   (28.09.09 15:16) [1]


Спасибо, но... как-то вот не так... а вдруг я забуду это сделать? Хотелось бы, нечто вроде:

constructor TMyObserver.Create(aSubject);
begin
 aSubject.AddObserver....

end;


 
Сергей М. ©   (2009-09-28 15:33) [4]


> не кошерно


Чтой-то вдруг ?


 
картман ©   (2009-09-28 15:38) [5]


> Сергей М. ©   (28.09.09 15:33) [4]

В приложении синхронизированные телодвижения гридов будут очень неудобны для работы


 
clickmaker ©   (2009-09-28 15:42) [6]

constructor TMyFrame.Create(aSubject);
begin
inherited;
aSubject.AddObserver(Self);

end;


 
Игорь Шевченко ©   (2009-09-28 15:42) [7]


>  Есть фрейм с DBGrid.  Входит в различные формы. Как сделать
> обновление всех экземпляров?


> В приложении синхронизированные телодвижения гридов будут
> очень неудобны для работы


????


 
Сергей М. ©   (2009-09-28 15:43) [8]

А что тогда подразумевается под "обновлением" ?


 
картман ©   (2009-09-28 15:52) [9]


> clickmaker ©   (28.09.09 15:42) [6]
>
> constructor TMyFrame.Create(aSubject);
> begin
> inherited;
> aSubject.AddObserver(Self);
>
> end;
>

как я aSubject передам в DesignTimes?


> Игорь Шевченко ©   (28.09.09 15:42) [7]

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


 
Inovet ©   (2009-09-28 15:57) [10]

> [9] картман ©   (28.09.09 15:52)
>
> > clickmaker ©   (28.09.09 15:42) [6]
> >
> > constructor TMyFrame.Create(aSubject);
> > begin
> > inherited;
> > aSubject.AddObserver(Self);
> >
> > end;
> >
>
> как я aSubject передам в DesignTimes?
>
>
> > Игорь Шевченко ©   (28.09.09 15:42) [7]
>
> логика работы с программой такая - требуется независимое
> положение курсора... не то, чтобы требуется - пользователю
> будет так удобнее

Разные DataSet делай


 
Сергей М. ©   (2009-09-28 16:04) [11]


> требуется независимое положение курсора


Если использовать TXXXClientDataset, то можно воспользоваться функциональностью CloneCursor


 
картман ©   (2009-09-28 16:17) [12]


> Сергей М. ©   (28.09.09 16:04) [11]


Прошу прощения, TADOClientDataSet существует в природе?


 
Leonid Troyanovsky ©   (2009-09-28 16:19) [13]


> картман ©   (28.09.09 15:52) [9]

> Inovet ©   (28.09.09 15:57) [10]

> Сергей М. ©   (28.09.09 16:04) [11]

А пользователю, на самом деле, будет удобно?
И чего обновлять-то будем?

Паттерн, паттерн.

--
Regards, LVT.


 
Сергей М. ©   (2009-09-28 16:30) [14]


> TADOClientDataSet существует в природе?


Нет.
Но существует TCustomADODataSet, у которого есть метод Clone - возможно он  поможет в решении.


> Leonid Troyanovsky ©   (28.09.09 16:19) [13]


> пользователю, на самом деле, будет удобно?


Это надо у пользователя спросить)
ТЗ мы в глаза не видели)


 
картман ©   (2009-09-28 16:38) [15]


> Сергей М. ©   (28.09.09 16:30) [14]


> ТЗ мы в глаза не видели)

я тоже не видел( и вряд ли когда увижу - если только в ретроспективе)


> Это надо у пользователя спросить)


спрашивал - ответ положительный)


> Но существует TCustomADODataSet, у которого есть метод Clone
> - возможно он  поможет в решении.

он клонирует набор данных, со всеми атрибутами и проч.


 
oxffff ©   (2009-09-28 16:42) [16]


> картман ©   (28.09.09 15:13)  
> Всем привет!
>
>  Есть фрейм с DBGrid.  Входит в различные формы. Как сделать
> обновление всех экземпляров?


Взять и сделать.


 
Сергей М. ©   (2009-09-28 16:45) [17]

А тебе и надо клон, иначе манипуляции с курсором оригинального НД будут отражаться во всех виз.контролах, ассоциированных с оригинальным НД


 
картман ©   (2009-09-28 16:58) [18]


> oxffff ©   (28.09.09 16:42) [16]

я не Цезарь(


> Сергей М. ©   (28.09.09 16:45) [17]

как мне сообщать клонам, что им пора обновить свои данные? Их надо держать в массиве, как я понимаю. Вопрос в том, как мне их в него помещать.


 
картман ©   (2009-09-28 17:00) [19]


> картман ©   (28.09.09 16:58) [18]


> Вопрос в том, как мне их "правильнее" в него помещать.


 
Сергей М. ©   (2009-09-28 17:08) [20]


> картман ©   (28.09.09 16:58) [18]


> как мне их в него помещать


Массив в принципе не обязателен, хотя, возможно, он и будет удобней.

Обращение примерно такое:

for i := 0 to Screen.FormCount - 1 do
 if Screen.Forms[i] is TMyForm then
    NextDataSet := TMyForm(Screen.Forms[i]).MyFrame.MyADODataSet;


 
картман ©   (2009-09-28 17:17) [21]


> Сергей М. ©   (28.09.09 17:08) [20]

не шоколадно


 
Игорь Шевченко ©   (2009-09-28 18:05) [22]

Ты так и не сказал, что тебе нужно. Как минимум, что ты понимаешь под понятием обновление


 
картман ©   (2009-09-28 18:11) [23]


> Игорь Шевченко ©   (28.09.09 18:05) [22]

 id := DataSet.FieldByNAme("ID").AsInteger;
 DataSet.Close;
 DataSet.Open;
 DataSet.Locate("ID", id);


 
Сергей М. ©   (2009-09-28 19:43) [24]


> не шоколадно


Ну тады ублажай себя сам)


 
картман ©   (2009-09-28 20:19) [25]


> Сергей М. ©   (28.09.09 19:43) [24]
>
>
> > не шоколадно
>
>
> Ну тады ублажай себя сам)

Спасибо.

...
Однозначно, этот форум все-таки учит)))


 
Игорь Шевченко ©   (2009-09-29 00:02) [26]

картман ©   (28.09.09 18:11) [23]

А dataset у каждого грида свой, но их надо одновременно обновить ? В одном изменили, а в других отобразить это изменение ?
В подобном варианте я бы посоветовал изменяющему модулю отправлять обычное сообщение главной форме, а та бы рассылала всем остальным. Кому надо - обработает сообщение и обновится, кому не надо - проигнорирует.


 
test ©   (2009-09-29 06:33) [27]

Сергей М. ©   (28.09.09 17:08) [20]
Игорь Шевченко ©   (29.09.09 00:02) [26]
Скинуть их всех на форму DataModule и перебором менять. Зачем по формам то скакать?

картман ©   (28.09.09 20:19) [25]
Осел может нести мешки хлеба, но дай бог переварить ему хоть одну буханку. (с)Конфуций
Ум подобен желудку важно не то, сколько туда положить, а сколько переварил. (С) Не знаю


 
Юрий Зотов ©   (2009-09-29 07:16) [28]

Паттерн "Наблюдатель"...

Эва... круто-то как! Правда, проблемы возникают... с написанием обыкновенного цикла... зато модно... паттерн!
:o)

И как раньше без паттернов программы писали? Непонятно. И ведь работали.

А паттерн "Наблюдатель" надо переименовать. Не может правильно работать программа, если в ней observer имеется...
:o)


 
test ©   (2009-09-29 08:39) [29]

Юрий Зотов ©   (29.09.09 07:16) [28]
А раньше наверное такое писали про классы. ))


 
Сергей М. ©   (2009-09-29 08:56) [30]


> test ©   (29.09.09 06:33) [27]
> Зачем по формам то скакать?


Можно и не скакать.
Достаточно бродкаста, если формы верхнеуровневые.


 
Игорь Шевченко ©   (2009-09-29 10:46) [31]

test ©   (29.09.09 06:33) [27]

Фреймы с гридами на датамодуль или кого ?


 
test ©   (2009-09-29 11:47) [32]

Игорь Шевченко ©   (29.09.09 10:46) [31]
DataSet"s


 
Игорь Шевченко ©   (2009-09-29 11:51) [33]

test ©   (29.09.09 11:47) [32]


> Скинуть их всех на форму DataModule и перебором менять.
> Зачем по формам то скакать?


А смысл ?

Насколько я понял автора, инициатива обновления должно исходить от фреймов.

Впрочем, мне пофиг, автор придет, прояснит


 
Юрий Зотов ©   (2009-09-29 11:58) [34]

> test ©   (29.09.09 08:39) [29]

> А раньше наверное такое писали про классы.

Дело не классах, и не в паттернах, как таковых. И то, и другое - штука сама по себе хорошая и знать их надо, тут как раз спору нет.

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

И если уж говорить о том, что было раньше, то раньше любая книжка по основам программирования начиналась с основ - с двоичной математики. Кстати, и паттерны те же были, только их так не называли, а называли проще - стандартные решения. Сейчас же встречается такое: выпускник ВУЗа знает много красивых слов, названий, технологий, аббревиатур и т.п., но работать реально не может. Потому что нетвердо владеет главным - основами.

Вот и на работе у нас был парень - аж целый доклад о паттернах сделал, но когда мне (и не мне одному) волею судеб пришлось разбираться в его коде, то восторгу не было конца. Левой рукой чешет человек правое ухо, причем постоянно. Или другой случай: предлагают соискателю спроектировать простейшую БД - так он на это берет пару дней (15 минут было бы более чем достаточно), а потом показывает чудо: ФИО юзеров у него хранятся в трех таблицах (вместо справочника и ссылок на него, естественно) - ну и другие подобные вещи (например, связку "многие ко многим" просто не знает, как выяснилось). А те же здешние тематические конфы? Слезы.

Паттерны, классы... даже великий Шумахер, прежде, чем садиться за руль "Формулы" наверняка освоил сначала обыкновенный велосипед.


 
test ©   (2009-09-29 12:37) [35]

Игорь Шевченко ©   (29.09.09 11:51) [33]
Дык и обновления там же выполнять в DataModule, вообще всю часть работы с БД туда закинуть и спокойненько обновлять. Зачем расскидывать работу с БД по всему функционалу? Отлаживать тяжело,
Автор уже не придет, ему паттерн не подсказали ))

Юрий Зотов ©   (29.09.09 11:58) [34]
Ну не любая, К. Боон "Паскаль для всех", Н. Вирт "Алгоритмы + структуры данных = программы". Хотя в принципе не спорю. ИМХО учат сразу на "формулах" вместо велосипедов отсюда и перекос.


 
Игорь Шевченко ©   (2009-09-29 12:46) [36]

test ©   (29.09.09 12:37) [35]

Мы говорим о разном. Я предлагаю возможное решение для случая, если необходимо обновить произвольное количество фреймов с гридами (не обязательно с гридами), вне зависимости, где находятся dataset"ы (не обязательно dataset"ы), связанные с гридами на этих фреймах.

Так как известно, что фреймы могут быть только на формах, то разумно пользоваться механизмом сообщений, то есть, заказчик обновления отсылает сообщение главной форме, а та посылает собщение всем формам - кому надо, тот обновится, кому не надо - проигнорирует.


 
test ©   (2009-09-29 13:09) [37]

Игорь Шевченко ©   (29.09.09 12:46) [36]
Я предлагаю обновить DataSet"s, на одной форме DataModule остальны автоматом будут показывать состояние DataSet"a. Где и на какой форме они находиться пусть Дельфи думает.


 
test ©   (2009-09-29 13:09) [38]

Игорь Шевченко ©   (29.09.09 12:46) [36]
Ну не люблю я внутрении сообщения делать.


 
Игорь Шевченко ©   (2009-09-29 13:35) [39]

test ©   (29.09.09 13:09) [37]

Да нефиг гадать, ждем автора


 
картман ©   (2009-09-29 13:57) [40]


> Игорь Шевченко ©   (29.09.09 00:02) [26]

 Да, именно так и сделаю.


> test ©   (29.09.09 06:33) [27]

 наверное? надо было упомянуть, что приложение MDI


> Юрий Зотов ©   (29.09.09 07:16) [28]

 А, если я откажусь от пузырьковой сортировки массива с мильеном эл-тов - Вы это тоже мотивируете моим неумением работать с циклами? Я хотел узнать как лучше, только и всего.



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2009.11.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.005 c
15-1254493319
Кто б сомневался
2009-10-02 18:21
2009.11.29
Как антивирус не дает терминировать себя из диспетчера?


1-1227069018
Vendict
2008-11-19 07:30
2009.11.29
Печать


2-1255364278
33Rus
2009-10-12 20:17
2009.11.29
Проблема с DeviceIoControl


2-1255596140
Маркабес
2009-10-15 12:42
2009.11.29
SQL


15-1254385969
Franzy
2009-10-01 12:32
2009.11.29
Отключить дебаггер!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский