|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
Есть большое число функций, где в качестве параметров необходимо указывать DW-DS. Сейчас приходится дублировать с одним единственным изменением - в типе параметра. Поддерживать это хозяйство муторно. Что-то да забываешь продублировать. Да и библиотеки хорошо раздувает. Посему - может кто сталкивался - пытался сделать так: передавать тип PowerObject или что-то тоже достаточно абстрактное а потом динамически вызывать функции (события)? Сразу прошу пессимистов воздержаться от комментариев :) И так Вашу точку зрения знаю :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2004, 13:52 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
А Вы не могли бы описать более конкретно, так сказать "на пальцах", то, что Вы хотели бы сделать? А то уж всё больно сумбурно... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2004, 17:29 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
А что тут собственно может быть конкретнее? Читайте тут: http://www.romu.com/download/ROMUSoftware_PBDJ_Interfaces_2.pdf ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2004, 20:49 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
Филипп, спасибо. Посмотрю... появилась еще одна идея. Что в итоге выйдет - напишу... Для Урваса - попробую на пальцах. Когда пишете собственную библиотеку по работе с ДВ - ДС. Проблема описывать общие функции по какому нибудь обработчику. Примитивный пример - функция get_item - которая возвращает any переменную нужного столбца и строки и нужного DW-DS. Ну и попробуйте это сделать одной функцией - общей. В общем случае - приходится дублировать функции, отличающихся только одним параметром. Вот я и ищу способ переделки уже большого числа функций. А еще и желательно и библиотеки классов. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2004, 20:59 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
а если сделать функцию внешней (например, глобальной) и вызывать её из событий? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 09:35 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
А вы попробуйте :) И сразу вопрос поймете, надеюсь. Если будет проблемы с пониманием все таки - пишите на мыло. Я вам одну из функций пришлю. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 09:45 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
Попробую ответить... Но сначала попытаюсь сформулировать Вашу задачу своими словами: Я хочу создать пользовательский объект DataWindow c расширенной функциональностью, в самом примитивном случае позволяющей возвращать некой внешней функции одно-единственное значение из конкретной ячейки нашего объекта, адрес которой (строка и столбец передается из вызывающей функции). Правильно ли я переформулировал задачу? Если правильно, то в такой формулировке всё элементарно, но явно это не то, что требовалось. Что-то недосказано... А, видимо, заранее не известен тип возвращаемого значения. Что делать? А взять и вернуть в функцию не только значение типа ANY, но и тип этого значения. А как узнать тип? А Describe() на что??? В вызывающей функции добавить обработчик. Предположим, эта часть решена. Что дальше? Оказывается вызывающая функция привязана к совершенно конкретному объекту, но разве это - тупик?! Что мешает создать массив DataWindow (а ещё лучше массив структур), по какому-то, одному Вам известному признаку, выбирать из массива необходимый объект, а затем dw .FUNCTION DYNAMIC uf_myfunc(r,c) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 12:04 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
>urvas Да не так. У andy753 совершенно реальная задача. Постановка (пример): Создать объект, имеющий ф-ю of_Препарировать_строку( ... ) : int где аргументы: al_RowNum a?_?? или datastore или datawindow Придется писать ДВЕ ф-ии, для DW и для DS, а лень, однако. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 12:36 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
Коллега Guest! А такое понятие Overloading Вам знакомо??? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 12:47 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
>urmas Спасибо Коллега urmas. "Overloading", как и много других слов встречал :) Я говорил не о внешнем представлении, а о минимизации собственно кода. Да можно создать две ф-ии с разными типами арг-ов, но это будет ДВА тела, а не одно. Да можно использовать ShareData, any, typeof, classname, case .... но это, IMHO, криво и является обходом, а не решением задачи. P.S. 1. Все вышесказанное прошу рассматривать строго как IMHO 2. Лень, однако :) 3. Мечта: вот был-бы один предок у DW и DS .... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 12:57 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
Уважаемый Guest! Прошу не путать Бабеля с Бебелем, кобеля с кабелем, а меня с мифическим urmas'ом. Это - во-первых! Во-вторых, о каких, собственно, ДВУХ функциях идет речь? Кому эти тела принадлежат? Код какого объекта Вы хотите минимизировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 13:17 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
Уважаемый urvas! Приношу свои извинения за неправильно указанный NIC. О постановке, на мой взгляд, все сказал автор, но повторюсь: класс n_cst_additional_func должен предоставлять: of_Препарировать_строку( long al_Row, datawindow adw_DW) : int of_Препарировать_строку( long al_Row, datastore ads_DS) : int По функциональности оба метода равнозначны. Код n_cst_additional_func желательно минимизировать. Поскольку все это уже напоминает flame, позволю себе откланяться и не занимать Уважаемое сообщество. P.S. а ведь там "....Бабеля с Бебелем,..." был и Гегель ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 13:31 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
Кстати, о птичках! Т.е., о DataWindow и DataStore. Насколько я понимаю, DataStore - это УРЕЗАННЫЙ DataWindow c ПОСТОЯННО ВЫКЛЮЧЕННЫМ Visible. Так какая ж апатитская сила может ВЫНУДИТЬ нас использовать и тот и другой объект, вместо использования одного-единственного - DataWindow??? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 13:36 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
2 Guest авторДа можно использовать ShareData, any, typeof, classname, case .... но это, IMHO, криво и является обходом, а не решением задачи. P.S. ... 3. Мечта: вот был-бы один предок у DW и DS .... Вообще-то общим предком является PowerObject. А почему typeof() есть криво? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 13:53 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
Спасибо всем! Информации для размышления более чем Филиппу отдельно, интересный вариант, я чесно говоря так не собирался реализовывать. TO urvas: спасибо за столь рьяное участие. Насчет "... DataStore - это УРЕЗАННЫЙ DataWindow c ПОСТОЯННО ВЫКЛЮЧЕННЫМ Visible ..." боюсь Вы не совсем правильно понимаете. DS является наследником невизуального класса, а DW является наследником окна и соответственно, с присущими ему уникальными свойствами и функционалом. У них конечно есть общий предок PowerObject - но он настолько дальний, что делать с ним особо и нечего. Совсем "динамический" код это конечно здорово, но тогда много ошибок останется в рантайме - а это не очень хотелось бы. Засим предлагаю, закрыть обсуждение. Еще раз - ВСЕМ СПАСИБО! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 13:56 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
Обратимся к первоисточнику: A DataStore is a nonvisual DataWindow control. DataStores act just like DataWindow controls except that many of the visual properties associated with DataWindow controls do not apply to DataStores. Because you can print DataStores, PowerBuilder provides some events and functions for DataStores that pertain to the visual presentation of the data. However, graph functions such as CategoryCount, CategoryName, GetData, SeriesCount, and so forth depend on the visual graph control, which is not created for a DataStore object. These functions return an error value or an empty string when used with DataStores. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 13:59 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
to urvas А вы читали те две статьи, ссылку на 2-ю из которых привел Филипп? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 14:13 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
Да, читал! Только Вашего вопроса, извините, Марк, не понял... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 14:54 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
А я про CreateFrom говорю, или тогда я не понял к чему вы цитату привели. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 15:21 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
urvas , ваши обращения к "первоисточнику" хороши, но к сожалению первоисточник не всегда поспевает за действительностью. Она такова, что начиная с РВ8 имплементация DS начала резко меняться, DS теперь не обязан иметь window handle (в силу чего, если PBVM бежит под EAServerом, то можно bind thread отключать, дабы DS local thread storage не использовал, а в дальнейшем тоже самое и не под EAServerом тоже самое можно будет делать). Datawindow с другой стороны - это ВСЕГДА window (в смысле Windows(tm)). А вот подобные заявления: авторТак какая ж апатитская сила может ВЫНУДИТЬ нас использовать и тот и другой объект, вместо использования одного-единственного - DataWindow??? выдают непонимание темы обсуждения, так что вы это, решите для себя... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2004, 19:13 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
Более того, Филипп! Смею уверить Вас, что мои заявления, да ещё будучи вырванными из контекста задачи, кроме всего прочего, могут ещё выдать мои и группу крови, и резус-фактор, и уровень IQ, и чего ещё. Но! Я убежден, что в рамках поставленной задачи, когда кому-то муторно, а кому-то просто лень поддерживать несколько различных типов объектов, идея применять только DataWindow имеет не только полное право на существование, но, заметьте, и вполне работоспособна, не смотря на классовые различия, сословные противоречия и, особенно, отсутствия возможности CreateFrom... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2004, 13:55 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
К сожалению, Вы не правы urvas, наше приложение использует довольно активно Ягуар, но там можно использовать исключительно DS :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2004, 22:18 |
|
Дублирование функций для DS & DW
|
|||
---|---|---|---|
#18+
Уважаемый andy753! Очень жаль, что про Ягуар выяснилось только на третьем десятке сообщений, по-моему, это очень принципиальный момент. Знай об этом раньше, я бы вообще не стал ничего говорить и спрашивать, т.к. АБСОЛЮТНО на ничего не знаю об этом кошаке... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2004, 09:33 |
|
|
start [/forum/topic.php?fid=15&fpage=109&tid=1339281]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 163ms |
0 / 0 |