powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Праграмист, пешы красива!
25 сообщений из 98, страница 2 из 4
Праграмист, пешы красива!
    #34545981
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шатёркинчто-то мне подсказывает, что всё с точностью до наоборот :) что характерно в MSSQL2005 теперь OUTER JOIN можно написать только вторым способом. *= больше не катит.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34546228
Фотография Шатёркин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во гады :)
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34546250
Фотография Шатёркин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так скажите - почему плохо связывать таблицы в WHERE, ну кроме облегчения жизни оптимизатору
не дайте умереть идиотом :)
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34546361
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот из BOL2000 про *= и *=
BOL2000In earlier versions of Microsoft® SQL Server™ 2000, left and right outer join conditions were specified in the WHERE clause using the *= and =* operators. In some cases, this syntax results in an ambiguous query that can be interpreted in more than one way. SQL-92 compliant outer joins are specified in the FROM clause and do not result in this ambiguity. Because the SQL-92 syntax is more precise, detailed information about using the old Transact-SQL outer join syntax in the WHERE clause is not included with this release. The syntax may not be supported in a future version of SQL Server. Any statements using the Transact-SQL outer joins should be changed to use the SQL-92 syntax.

The SQL-92 standard does support the specification of inner joins in either the FROM or WHERE clause. Inner joins specified in the WHERE clause do not have the same problems with ambiguity as the Transact-SQL outer join syntax.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34546586
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шатёркинтак скажите - почему плохо связывать таблицы в WHERE, ну кроме облегчения жизни оптимизатору
не дайте умереть идиотом :)
Исключительно исходя из того, что потом кто-то будет разбираться с этим кодом и модифицировать его.
Поэтому лучше позаботиться об этом человеке и сразу разделить служебную часть запроса (соединения) от прикладной (фильтр).
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34546784
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шатёркинда ладно - sql тоже затронем :)

автор
*** BAD code: ***

SELECT @country_name = country.country_name
FROM country,
city,
address
WHERE country.country_id = city.country_id
AND city.city_id = address.city_id
AND address.address_id = @address_id;

*** GOOD code: ***
SELECT @country_name = country.country_name
FROM country
JOIN city
ON city.country_id = country.country_id
JOIN address
ON address.city_id = city.city_id
AND address.address_id = @address_id;

что-то мне подсказывает, что всё с точностью до наоборот :)Я до недавнего времени тоже не был поклонником метода с ключевым словом JOIN - более того, стоял на "старом" синтаксисе насмерть, как 26 бакинских комиссаров. А всё из-за многолоетней привычки. Но на новой работе меня заставили перейти на новый синтакс, и поработав с ним я стал его поклонником (думаю, отзывы в этой ветке тоже кое-что да изменят в моих взглядах). Если вкратце, то при WHERE-методе всё свалено в одну кучу; при JOIN-методе мы имеем несколько меньших "кучек", и каждый раз можем комфортно сосредоточиться на том, как одна таблица связана с общей картиной; проанализировав её, переходим к следующей. Как в притче с веником: целый веник сломать трудно, а по прутику - легко!
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34546829
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18-я веснарассмотрим в разрезе рефакторинга:
Допустим поменялся набор параметров для вызова окна (добавлен, удален, переименован параметр)
При технике 1 если не везде в вызывающем коде отразить эти изменения, то ошибки после удаления или переименования всплывут только в рантайм при попытке открыть окно.
При технике 2 ошибки после удаления или переименования возникнут уже при компиляции и их придется исправить.ОК, ошибки всплывут на несколько минут позже, при юнит-тесте. Видишь, что параметр не получен - смотришь почему (в вызывающем скрипте). Из-за этого наводнять аппликацию десятками объектов, да ещё и поддерживать (каждый раз изменять) их?

18-я веснаСамодокументирование.
Техника 1. Перечень и тип возможных параметров можно узнать только проанализировав алгоритм разбора этих параметров в окне.
Техника 2. Параметры отделены от алгоритма и четко видны.При первом методе всё сосредоточено в скрипте, принимающем параметры (Open, pfc_open, uf_get_key() или что бы там ни было) - имею в виду в плане самодокументации, чтоб понять что передаётся. Т.е. всё - в одном месте, а не разбросано по разным частям аппликации как в методе 2. О чём ещё мечтать бедному программисту? Кроме того, не все параметры всегда передаются (имеются объекты параметров, используемые в разных обстоятельствах - иначе пришлось бы иметь не сотни, а тысячи подобных "красавцев"). И вот я смотрю на поля объекта параметров, которые, как ты пишешь, "четко видны", и вижу, что имеются незаполненные. Что это? Баг или нет? Как определить? Всё равно придётся лезть в открывающий скрипт и смотреть логику, алгоритм, а при неполучении ожидаемого результата - дебагировать.

Конечно, в твоих контраргументах есть много рационального, хоть я на них и ответил своими. Но тут мы имеем то, что всегда имеем - палку о двух концах, а именно: какой метод ни возьми, он имеет достоинства и недостатки. Единственный выход - ждать пенсии.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34546911
18-я весна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ursegoтысячи подобных "красавцев"
Честно говоря у меня есть серьезные сомнения в том, а было ли вообще хоть какое-либо проектирование, если в приложении возникли тысячи классов окон. Тут скорее похоже на copy-paste.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34546918
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18-я весна Ursegoтысячи подобных "красавцев"
Честно говоря у меня есть серьезные сомнения в том, а было ли вообще хоть какое-либо проектирование, если в приложении возникли тысячи классов окон. Тут скорее похоже на copy-paste.Как говаривал один мой знакомый: "Зачем нужно модульное программирование, если есть блочное копирование?"
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34547224
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky spas2001 ФилиппНа мой вкус, самым лучший вариант передачи параметров в РВ - это subclassed message objectСогласен. На мой взгляд этот метод больше всего соответствует идеологии ООП.
А можно пример вызова с передачей например двух аргументов? (Чтобы не гадать, что имеется в виду и потом не спорить с собственными домыслами :) )
Это вы о чём? Об открывании окон? :-))))))))))))))))))
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34547886
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппЭто вы о чём? Об открывании окон? :-))))))))))))))))))
Неа, мы о том как коптить сало.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34548085
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Anatoly
А что, PowerObjectParm уже не существует
У меня чаще всего реализован в приложениях какой-нибудь message handler, который собственно и занимается исключительно обработкой сообщений, немножко муторно было делать в самом начале, зато нормально использовать

ЗЫ: Никого не хотел обидеть, у каждого свои принципы и методы (а также доводы)
Либо человек пишет красиво, либо нет (есть писатели, а есть графоманы)

А думать за оптимизатор не надо, его надо настраивать

------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34548192
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spas2001А думать за оптимизатор не надо, его надо настраивать
Ой, не смешите мои тапочки... Сколько там будет вариантов соединений когда у Вас в запросе полсотни таблиц? И что Вы в оптимизаторе крутить-то будете по этому поводу? Очень интересно услышать.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34548285
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spas2001To Anatoly
А что, PowerObjectParm уже не существует
Я про него весь этот топик говорю.

А мой вопрос был: как конкретно реализована передача разных наборов аргументов в разные окна используя наследование Message?
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34548314
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк spas2001А думать за оптимизатор не надо, его надо настраивать
Ой, не смешите мои тапочки... Сколько там будет вариантов соединений когда у Вас в запросе полсотни таблиц? И что Вы в оптимизаторе крутить-то будете по этому поводу? Очень интересно услышать.
В этом случае надо оптимизировать программиста :)
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34550012
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyА мой вопрос был: как конкретно реализована передача разных наборов аргументов в разные окна используя наследование Message?Я так предполагаю, имеется некий класс (унаследованный от Message) с полями для передачи самых часто встречающихся в приложении сущностей (а в каждой аппликации их как правило хоть несколько штук да имеется) плюс, быть может, поинтеры для транспортировки datawindows, datastores и NVOs и прочих непримитивных типов, а от него унаследованы другие, в которых объявлены дополнительные, уже специфические для тех частей аппликации где объекты будут использованы. Причём базовый класс может быть инстантиирован для использования as is если имеющихся в нём полей достаточно. Или не угадал?
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34550015
18-я весна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ursego Anatoly MoskovskyА мой вопрос был: как конкретно реализована передача разных наборов аргументов в разные окна используя наследование Message?Я так предполагаю, имеется некий класс (унаследованный от Message) с полями для передачи самых часто встречающихся в приложении сущностей (а в каждой аппликации их как правило хоть несколько штук да имеется) плюс, быть может, поинтеры для транспортировки datawindows, datastores и NVOs и прочих непримитивных типов, а от него унаследованы другие, в которых объявлены дополнительные, уже специфические для тех частей аппликации где объекты будут использованы. Причём базовый класс может быть инстантиирован для использования as is если имеющихся в нём полей достаточно. Или не угадал?
Гадать можно долго, у меня самого есть версии. Пусть те, кто упомянул, сами уточнят.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34550030
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык давай версии - может, что-нибуть гениальное придумаем.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34550391
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист!
Пиши так, чтобы конечному пользователю было комфортно, удобно и приятно.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34550805
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky Локшин Марк spas2001А думать за оптимизатор не надо, его надо настраивать
Ой, не смешите мои тапочки... Сколько там будет вариантов соединений когда у Вас в запросе полсотни таблиц? И что Вы в оптимизаторе крутить-то будете по этому поводу? Очень интересно услышать.
В этом случае надо оптимизировать программиста :)

Верно сказано, спорить грех
Приходится и так делать, особенно на новом месте работы
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34550902
ZhV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из своего... может кому будет полезно

Для вызова окон в качестве параметра использутеся структура, которая создана один раз и больше никогда не менялась - не было нужды
Код: plaintext
1.
2.
3.
global type s_param_call from structure
string         	s_param[]
powerobject	po_ref[]
end type

Обратите внимание на po_ref[] - это может быть массив ЛЮБЫХ обьектов powerbuilder-а.
Но на "принимающей" стороне нужно обязательно контролировать размер массива и TypeOf обьектов

s_param[] - для некоторых классов устанавливаются специальные соглашение.
Вот код снятия параметра и соотвтесвующий комментарий в event Open() в общем ancestor-е одного из классов

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
/****** Параметры вызова
s_param_call ist_call

s_param[]
1 - имя поля  id
2 - значение ID - строчное или String(Long)
3 - сообщение для title
4 - dataobject для dw_master - если в inherited window не задан  опционально
5 - номер строки в этом datawindow
6 - произвольная строка параметров  c разделителем ,    например 
     noborder   - убрать border
    exitescape - выход по Escape
     noobject   - пустой или недоступный обьект - ссылки на внешний datawindow  не использовать

po_ref[1] - datawindow , по отношению к которому делается редактирование или ввод
****/

IF Not(IsValid(Message.powerobjectparm)) THEN 
	is_error = 'Call parms not passed'   
ELSE
   ls_s = Classname(Message.powerobjectparm)
   IF ls_s = "s_param_call" THEN 
	ist_call = Message.powerobjectparm
   ELSE
            is_error = 'Invalid  parms object'
   END IF
END IF
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34550930
ZhV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще одна фишка - предопределенные (стандартные) event-ы не должны содержать длинный функционально-содержательный код.
Например если по Clicked() запускается сложная обработка, то код обработки описывается в отдельной специальной
функции или event-е с "говорящим" названием, а в самом Clicked() - только вызов этого модуля
Лично я как-то сильно попотел, когда долго искал "работающий" код - и нашел пару сотен строк , которые висели
на редко пользуемом event-е - itemfocuschange

Причем часто удобно это делать в режиме асинхронного вызова по символьному имени и с передачей параметров через Message,
например
PostEvent.('ue_do_special_work',0,ls_parm)

Если в конкретном окне/обьекте такой event отсутствует - то runtime ошибки не будет - это удобно для обобщенных вызовов.

К сожалению, так можно передать только строчный параметр, но можно условиться о способе упаковки в этот строчный
параметр для Message
Например , вот есть событие
Код: plaintext
1.
2.
3.
4.
5.
//event ue_do_special_work(long al_id)
IF IsNull(al_id) THEN 
    al_id = Long(String(Message.LongParm, "address"))  // прошел асинхронный вызов -  взять al_id из Message
END IF
...
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34552426
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
urvasПрограммист!
Пиши так, чтобы конечному пользователю было комфортно, удобно и приятно.Это уже абсолютно другая тема, хоть и важная. А сейчас обсуждается тема - чтоб было комфортно, удобно и приятно программисту. Мы ж тоже люди!
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34552781
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ursego urvasПрограммист!
Пиши так, чтобы конечному пользователю было комфортно, удобно и приятно.Это уже абсолютно другая тема, хоть и важная. А сейчас обсуждается тема - чтоб было комфортно, удобно и приятно программисту. Мы ж тоже люди!"Программисты тоже люди"... Хм... какая странная концепция.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34858737
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Статья о стиле программирования переработана и дополнена, если кому интересно.
...
Рейтинг: 0 / 0
25 сообщений из 98, страница 2 из 4
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Праграмист, пешы красива!
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]