|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Шатёркинчто-то мне подсказывает, что всё с точностью до наоборот :) что характерно в MSSQL2005 теперь OUTER JOIN можно написать только вторым способом. *= больше не катит. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2007, 15:24 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Во гады :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2007, 16:12 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
так скажите - почему плохо связывать таблицы в WHERE, ну кроме облегчения жизни оптимизатору не дайте умереть идиотом :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2007, 16:19 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Ну вот из 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. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2007, 16:50 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Шатёркинтак скажите - почему плохо связывать таблицы в WHERE, ну кроме облегчения жизни оптимизатору не дайте умереть идиотом :) Исключительно исходя из того, что потом кто-то будет разбираться с этим кодом и модифицировать его. Поэтому лучше позаботиться об этом человеке и сразу разделить служебную часть запроса (соединения) от прикладной (фильтр). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2007, 17:40 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Шатёркинда ладно - 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-методе мы имеем несколько меньших "кучек", и каждый раз можем комфортно сосредоточиться на том, как одна таблица связана с общей картиной; проанализировав её, переходим к следующей. Как в притче с веником: целый веник сломать трудно, а по прутику - легко! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2007, 18:56 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
18-я веснарассмотрим в разрезе рефакторинга: Допустим поменялся набор параметров для вызова окна (добавлен, удален, переименован параметр) При технике 1 если не везде в вызывающем коде отразить эти изменения, то ошибки после удаления или переименования всплывут только в рантайм при попытке открыть окно. При технике 2 ошибки после удаления или переименования возникнут уже при компиляции и их придется исправить.ОК, ошибки всплывут на несколько минут позже, при юнит-тесте. Видишь, что параметр не получен - смотришь почему (в вызывающем скрипте). Из-за этого наводнять аппликацию десятками объектов, да ещё и поддерживать (каждый раз изменять) их? 18-я веснаСамодокументирование. Техника 1. Перечень и тип возможных параметров можно узнать только проанализировав алгоритм разбора этих параметров в окне. Техника 2. Параметры отделены от алгоритма и четко видны.При первом методе всё сосредоточено в скрипте, принимающем параметры (Open, pfc_open, uf_get_key() или что бы там ни было) - имею в виду в плане самодокументации, чтоб понять что передаётся. Т.е. всё - в одном месте, а не разбросано по разным частям аппликации как в методе 2. О чём ещё мечтать бедному программисту? Кроме того, не все параметры всегда передаются (имеются объекты параметров, используемые в разных обстоятельствах - иначе пришлось бы иметь не сотни, а тысячи подобных "красавцев"). И вот я смотрю на поля объекта параметров, которые, как ты пишешь, "четко видны", и вижу, что имеются незаполненные. Что это? Баг или нет? Как определить? Всё равно придётся лезть в открывающий скрипт и смотреть логику, алгоритм, а при неполучении ожидаемого результата - дебагировать. Конечно, в твоих контраргументах есть много рационального, хоть я на них и ответил своими. Но тут мы имеем то, что всегда имеем - палку о двух концах, а именно: какой метод ни возьми, он имеет достоинства и недостатки. Единственный выход - ждать пенсии. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2007, 19:23 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Ursegoтысячи подобных "красавцев" Честно говоря у меня есть серьезные сомнения в том, а было ли вообще хоть какое-либо проектирование, если в приложении возникли тысячи классов окон. Тут скорее похоже на copy-paste. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2007, 20:31 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
18-я весна Ursegoтысячи подобных "красавцев" Честно говоря у меня есть серьезные сомнения в том, а было ли вообще хоть какое-либо проектирование, если в приложении возникли тысячи классов окон. Тут скорее похоже на copy-paste.Как говаривал один мой знакомый: "Зачем нужно модульное программирование, если есть блочное копирование?" ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2007, 20:40 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky spas2001 ФилиппНа мой вкус, самым лучший вариант передачи параметров в РВ - это subclassed message objectСогласен. На мой взгляд этот метод больше всего соответствует идеологии ООП. А можно пример вызова с передачей например двух аргументов? (Чтобы не гадать, что имеется в виду и потом не спорить с собственными домыслами :) ) Это вы о чём? Об открывании окон? :-)))))))))))))))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2007, 02:38 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
ФилиппЭто вы о чём? Об открывании окон? :-)))))))))))))))))) Неа, мы о том как коптить сало. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2007, 11:11 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
To Anatoly А что, PowerObjectParm уже не существует У меня чаще всего реализован в приложениях какой-нибудь message handler, который собственно и занимается исключительно обработкой сообщений, немножко муторно было делать в самом начале, зато нормально использовать ЗЫ: Никого не хотел обидеть, у каждого свои принципы и методы (а также доводы) Либо человек пишет красиво, либо нет (есть писатели, а есть графоманы) А думать за оптимизатор не надо, его надо настраивать ------------------------------------------------------ Главная деталь любой машины - голова ее владельца ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2007, 11:49 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
spas2001А думать за оптимизатор не надо, его надо настраивать Ой, не смешите мои тапочки... Сколько там будет вариантов соединений когда у Вас в запросе полсотни таблиц? И что Вы в оптимизаторе крутить-то будете по этому поводу? Очень интересно услышать. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2007, 13:11 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
spas2001To Anatoly А что, PowerObjectParm уже не существует Я про него весь этот топик говорю. А мой вопрос был: как конкретно реализована передача разных наборов аргументов в разные окна используя наследование Message? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2007, 13:31 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Локшин Марк spas2001А думать за оптимизатор не надо, его надо настраивать Ой, не смешите мои тапочки... Сколько там будет вариантов соединений когда у Вас в запросе полсотни таблиц? И что Вы в оптимизаторе крутить-то будете по этому поводу? Очень интересно услышать. В этом случае надо оптимизировать программиста :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2007, 13:36 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyА мой вопрос был: как конкретно реализована передача разных наборов аргументов в разные окна используя наследование Message?Я так предполагаю, имеется некий класс (унаследованный от Message) с полями для передачи самых часто встречающихся в приложении сущностей (а в каждой аппликации их как правило хоть несколько штук да имеется) плюс, быть может, поинтеры для транспортировки datawindows, datastores и NVOs и прочих непримитивных типов, а от него унаследованы другие, в которых объявлены дополнительные, уже специфические для тех частей аппликации где объекты будут использованы. Причём базовый класс может быть инстантиирован для использования as is если имеющихся в нём полей достаточно. Или не угадал? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 00:54 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Ursego Anatoly MoskovskyА мой вопрос был: как конкретно реализована передача разных наборов аргументов в разные окна используя наследование Message?Я так предполагаю, имеется некий класс (унаследованный от Message) с полями для передачи самых часто встречающихся в приложении сущностей (а в каждой аппликации их как правило хоть несколько штук да имеется) плюс, быть может, поинтеры для транспортировки datawindows, datastores и NVOs и прочих непримитивных типов, а от него унаследованы другие, в которых объявлены дополнительные, уже специфические для тех частей аппликации где объекты будут использованы. Причём базовый класс может быть инстантиирован для использования as is если имеющихся в нём полей достаточно. Или не угадал? Гадать можно долго, у меня самого есть версии. Пусть те, кто упомянул, сами уточнят. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 01:00 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Дык давай версии - может, что-нибуть гениальное придумаем. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 01:38 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Программист! Пиши так, чтобы конечному пользователю было комфортно, удобно и приятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 10:10 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Локшин Марк spas2001А думать за оптимизатор не надо, его надо настраивать Ой, не смешите мои тапочки... Сколько там будет вариантов соединений когда у Вас в запросе полсотни таблиц? И что Вы в оптимизаторе крутить-то будете по этому поводу? Очень интересно услышать. В этом случае надо оптимизировать программиста :) Верно сказано, спорить грех Приходится и так делать, особенно на новом месте работы ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 11:55 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Из своего... может кому будет полезно Для вызова окон в качестве параметра использутеся структура, которая создана один раз и больше никогда не менялась - не было нужды Код: plaintext 1. 2. 3.
Обратите внимание на 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 12:21 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Еще одна фишка - предопределенные (стандартные) event-ы не должны содержать длинный функционально-содержательный код. Например если по Clicked() запускается сложная обработка, то код обработки описывается в отдельной специальной функции или event-е с "говорящим" названием, а в самом Clicked() - только вызов этого модуля Лично я как-то сильно попотел, когда долго искал "работающий" код - и нашел пару сотен строк , которые висели на редко пользуемом event-е - itemfocuschange Причем часто удобно это делать в режиме асинхронного вызова по символьному имени и с передачей параметров через Message, например PostEvent.('ue_do_special_work',0,ls_parm) Если в конкретном окне/обьекте такой event отсутствует - то runtime ошибки не будет - это удобно для обобщенных вызовов. К сожалению, так можно передать только строчный параметр, но можно условиться о способе упаковки в этот строчный параметр для Message Например , вот есть событие Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 12:27 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
urvasПрограммист! Пиши так, чтобы конечному пользователю было комфортно, удобно и приятно.Это уже абсолютно другая тема, хоть и важная. А сейчас обсуждается тема - чтоб было комфортно, удобно и приятно программисту. Мы ж тоже люди! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 18:07 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Ursego urvasПрограммист! Пиши так, чтобы конечному пользователю было комфортно, удобно и приятно.Это уже абсолютно другая тема, хоть и важная. А сейчас обсуждается тема - чтоб было комфортно, удобно и приятно программисту. Мы ж тоже люди!"Программисты тоже люди"... Хм... какая странная концепция. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 20:36 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Статья о стиле программирования переработана и дополнена, если кому интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2007, 00:39 |
|
|
start [/forum/topic.php?fid=15&msg=34548285&tid=1336340]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
89ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 207ms |
0 / 0 |