Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.29;
Скачать: CL | DM;

Вниз

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

 
картман ©   (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]

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


 
картман ©   (2009-09-29 14:11) [41]


> Юрий Зотов ©   (29.09.09 11:58) [34]


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

уверен, не освой он велосипед прежде болида, все равно стал бы тем, кем он является


 
test ©   (2009-09-29 14:16) [42]

картман ©   (29.09.09 13:57) [40]
Ну что то MDI ты строй его так чтобы удобнее было отлаживать. Если у тебя вся работа с БД в одной форме/юнете то проще отлаживать/обновлять.


 
test ©   (2009-09-29 14:18) [43]

Игорь Шевченко ©   (29.09.09 13:35) [39]
Спроси автора:
"Деточка ты что хочешь, на дачу или чтобы тебе голову оторвали?" (с)Раневская


 
картман ©   (2009-09-29 14:22) [44]


> test ©   (29.09.09 14:18) [43]


да не переживай ты так


 
Игорь Шевченко ©   (2009-09-29 14:24) [45]

test ©   (29.09.09 14:16) [42]


> Если у тебя вся работа с БД в одной форме/юнете то проще
> отлаживать/обновлять.


Утверждение верно лишь до какого-то предела.


 
test ©   (2009-09-29 14:28) [46]

Игорь Шевченко ©   (29.09.09 14:24) [45]
Странно, при каких условиях оно ложно?


 
test ©   (2009-09-29 14:30) [47]

картман ©   (29.09.09 14:22) [44]
Это юмар был, чтобы ветка в Базы не ушла.


 
Inovet ©   (2009-09-29 14:49) [48]

> [46] test ©   (29.09.09 14:28)
> Игорь Шевченко ©   (29.09.09 14:24) [45]
> Странно, при каких условиях оно ложно?

Проще на дочерних формах ДатаСеты разместить, чем городить невесть что в Датамодуле для каждой вновь открываемой пользователем формы.

Автору. Удобно сделать базовую форму с механизмом объновления, для тех которые надо обновлять, и от неё наследовать остальные.


 
oxffff ©   (2009-09-29 14:54) [49]


> картман


Я новенький расскажите про паттерн наблюдатель.


 
картман ©   (2009-09-29 14:58) [50]


> oxffff ©   (29.09.09 14:54) [49]

я тоже новенький - только название знаю


 
картман ©   (2009-09-29 14:59) [51]


> Inovet ©   (29.09.09 14:49) [48]


> Автору. Удобно сделать базовую форму с механизмом объновления,
>  для тех которые надо обновлять, и от неё наследовать остальные.
>

я это хотел во фрейм засунуть


 
oxffff ©   (2009-09-29 15:00) [52]


> картман ©   (29.09.09 14:58) [50]
>
> > oxffff ©   (29.09.09 14:54) [49]
>
> я тоже новенький - только название знаю


Ну тогда открой GOF книжечку и почитай про паттерны проектирования.
Там есть и про мементо, посетитель, мост, и м.д.


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

test ©   (29.09.09 14:28) [46]


> Странно, при каких условиях оно ложно?


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


 
картман ©   (2009-09-29 15:07) [54]


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


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

будь я женщиной - расцеловал бы Вас


 
test ©   (2009-09-29 15:21) [55]

Удалено модератором
Примечание: Offtopic


 
test ©   (2009-09-29 15:34) [56]

Игорь Шевченко ©   (29.09.09 15:00) [53]
И кому такой Франкенштейн нужен?


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


> test ©   (29.09.09 15:34) [56]

http://maxi-exkavator.ru/articles/excavators/~id=1156


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

test ©   (29.09.09 15:34) [56]


> И кому такой Франкенштейн нужен?


Я, извиняюсь, на хлеб с куском масла с таких приложений. Следовательно, людям нужно.


 
test ©   (2009-09-29 15:43) [59]

картман ©   (29.09.09 15:39) [57]
Машина конечно хорошая ее бы на цвет мет.
Вопрос то остался, зачем нужен Франкенштейн у которого количество форм зашкаливает за понимание?


 
test ©   (2009-09-29 15:44) [60]

Игорь Шевченко ©   (29.09.09 15:42) [58]
Понял, чтобы вечно его отлаживать и дописывать, получая хлеб с маслом.


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

test ©   (29.09.09 15:44) [60]


> Понял, чтобы вечно его отлаживать и дописывать, получая
> хлеб с маслом.


Нифига ты не понял, но это не мои проблемы


 
картман ©   (2009-09-29 15:49) [62]


> test ©   (29.09.09 15:43) [59]

да мало ли какая специфика у данных приложения может быть?


 
Inovet ©   (2009-09-29 15:55) [63]

> [57] картман ©   (29.09.09 15:39)
> http://maxi-exkavator.ru/articles/excavators/~id=1156

Есть у нас такие штуковины.:)
> [51] картман ©   (29.09.09 14:59)
>
> > Inovet ©   (29.09.09 14:49) [48]
> > Автору. Удобно сделать базовую форму с механизмом объновления,
>
> я это хотел во фрейм засунуть

Фреймы имхо для другого всё ж.


 
картман ©   (2009-09-29 15:58) [64]


> Inovet ©   (29.09.09 15:55) [63]

Фрейм - кусочек формы. У меня есть несколько одинаковых кусочков форм. Фреймы у меня для этого - для одинаковых кусочков.


 
Inovet ©   (2009-09-29 16:06) [65]

> [64] картман ©   (29.09.09 15:58)
>
> > Inovet ©   (29.09.09 15:55) [63]
>
> Фрейм - кусочек формы. У меня есть несколько одинаковых
> кусочков форм. Фреймы у меня для этого - для одинаковых
> кусочков.

Ну нормально, и при этом базовую форму сделай.


 
картман ©   (2009-09-29 16:26) [66]


> Inovet ©   (29.09.09 16:06) [65]

спасибо.



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

Текущий архив: 2009.11.29;
Скачать: CL | DM;

Наверх




Память: 0.64 MB
Время: 0.011 c
15-1254342609
Юрий
2009-10-01 00:30
2009.11.29
С днем рождения ! 1 октября 2009 четверг


15-1254309667
VladOfMonster
2009-09-30 15:21
2009.11.29
Скины для программы


4-1223938181
Ruzzz
2008-10-14 02:49
2009.11.29
как "ловить мышку" после ответа HTCAPTION на WM_NCHITTEST


2-1255437491
alkul93
2009-10-13 16:38
2009.11.29
Сложная задача


2-1255407175
TRSteep
2009-10-13 08:12
2009.11.29
большие числа