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

Вниз

Пара вопросов бывалым разработчикам   Найти похожие ветки 

 
Igorek ©   (2004-06-23 16:21) [0]

1) как вы относитесь к конструкциям
 with Object1, Object2, ... do

 with Object1 do
   with Object2 do
   ...
Хороший ли это стиль? Оптимизирует ли это бинарный код?

2) как вы именуете поля в таблицах в БД? Названия полей уникальны только в пределах одной таблицы или во всей базе даных?

3) как вы решаете споры с сотоварищами по дизайну программы?


 
Игорь Шевченко ©   (2004-06-23 16:24) [1]


> 1) как вы относитесь к конструкциям
>  with Object1, Object2, ... do
>
>  with Object1 do
>    with Object2 do


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


> 2) как вы именуете поля в таблицах в БД? Названия полей
> уникальны только в пределах одной таблицы или во всей базе
> даных?


В пределах таблицы


> 3) как вы решаете споры с сотоварищами по дизайну программы?


Плюсометом


 
Reindeer Moss Eater ©   (2004-06-23 16:26) [2]

1. Равнодушно. Плохой. Вряд ли.
2. Префиксирую двумя - тремя символами из имени таблицы. Во всей.
3. В свою пользу.


 
Sandman25 ©   (2004-06-23 16:26) [3]

1) Хороший. Но стараюсь не использовать вложенные with c одинаковыми классами. Типа
with DataSet1 do
begin
....
 with DataSet2 do
 ...
end;
Хотя иногда бывает

2)уже не именую. Раньше уникальность в БД не была гарантирована

3)разговорами. Слава богу, коллеги и начальники всегда готовы обсудить и даже поменять свое мнение :)


 
Ega23 ©   (2004-06-23 16:26) [4]

Плюсометом

Где купить можно? Мне малая партия нужна, штук 8. С боеприпасом, конечно.


 
Игорь Шевченко ©   (2004-06-23 16:29) [5]

Ega23 ©   (23.06.04 16:26)


> Где купить можно?


Не знаю, я не покупал, мне именной выдали

Reindeer Moss Eater ©   (23.06.04 16:26)


> 2. Префиксирую двумя - тремя символами из имени таблицы.
> Во всей.


А, если не секрет, из каких соображений ?


 
blackman ©   (2004-06-23 16:31) [6]

1) как вы относитесь к конструкциям
Шампанское из туфельки, это Вам не водку из кирзача...
2) как вы именуете поля в таблицах в БД? Названия полей уникальны только в пределах одной таблицы или во всей базе даных?
Однозначно. (с) Жириновский
3) как вы решаете споры с сотоварищами по дизайну программы?
Есть ответы, которым лучше оставаться без вопросов...
Ни фига себе! Все - людям!..


 
Igorek ©   (2004-06-23 16:32) [7]


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

Ну в общем случае стоит ли громоздить кучу обьектов (даже разных классов) под один with? Как из практики следует?


 
Reindeer Moss Eater ©   (2004-06-23 16:33) [8]

А, если не секрет, из каких соображений ?
Более всего из соображений однозначности толкования.


 
Ega23 ©   (2004-06-23 16:36) [9]

Более всего из соображений однозначности толкования.

Но если поле выполняет роль только счётчика, на него никто не ссылается, единственно, для чего оно может служить - удобство позиционирования на клиенте. Такие всегда называю UNID.
И ещё одно: поле, являющееся вторичным ключом, называю также, как поле первичного ключа.


 
Игорь Шевченко ©   (2004-06-23 16:38) [10]


> Ну в общем случае стоит ли громоздить кучу обьектов (даже
> разных классов) под один with? Как из практики следует?


А здесь нет общего случая. Синтаксисом не возбраняется, значит, можно. Если чтение кода не вызывает особенной путаницы, то тоже можно. Употребление конструкции with оптимизирует быстродействие, но в ряде случаев ухудшает читабельность.


 
Igorek ©   (2004-06-23 16:44) [11]

Вообще если не сложно напишите о соглашении о наименовании (если такое есть у вас лично или в вашей конторе) таблиц и полей в базе даных.


 
Игорь Шевченко ©   (2004-06-23 16:46) [12]


> Вообще если не сложно напишите о соглашении о наименовании
> (если такое есть у вас лично или в вашей конторе) таблиц
> и полей в базе даных


У нас - наименования полей согласно терминам предметной области. Имена таблиц префиксируются тремя буквами кода подсистемы.


 
Igorek ©   (2004-06-23 16:47) [13]


> И ещё одно: поле, являющееся вторичным ключом, называю также,
> как поле первичного ключа.

Ну например я сторонник что-бы первичный ключ (не составной) всегда называть стандартно - "Id". Как в таком случае быть с уникальностью названий полей в одной таблице?


 
Sandman25 ©   (2004-06-23 16:49) [14]

[10] Игорь Шевченко ©   (23.06.04 16:38)

Хочу добавить, что в ряде случаев отсутсвие with тоже ухудшает читабельность.
DataModule1.DBGrid1.DataSource.DataSet.First;
while DataModule1.DBGrid1.DataSource.DataSet.Eof do
begin
 DataModule1.DBGrid1.DataSource.DataSet.Edit;
 DataModule1.DBGrid1.DataSource.DataSet.FieldByName("A").AsInteger :=DataModule1.DBGrid1.DataSource.DataSet.FieldByName("B").AsInteger;
 DataModule1.DBGrid1.DataSource.DataSet.Post;
 DataModule1.DBGrid1.DataSource.DataSet.Next;
end;


 
Игорь Шевченко ©   (2004-06-23 16:55) [15]

Sandman25 ©   (23.06.04 16:49)

Если этот фрагмент сделать методом DataModule и выделить DBGrid1.DataSource.DataSet в локальную переменную, то читабельность возрастет. Мне самому такой немецкий язык не нравится.

Впрочем with DataModule1.DBGrid1.DataSource.DataSet do begin
не нравится тоже


 
Sandman25 ©   (2004-06-23 16:58) [16]

>выделить DBGrid1.DataSource.DataSet в локальную переменную

Зачем? Принцип Оккама и в программировании работает...


 
vuk ©   (2004-06-23 17:12) [17]

1. Все зависит от того, что там дальше, но обычно вложенных with избегаю.
2. Названия полей БД уникальны в пределах БД и имеют префикс в виде аббревиатуры таблицы. При этом если поле является значением, взятым из другой таблицы или foreign key, то имя поля соответствует полю в той таблице, откуда берутся значения. Это позволяет просто глядя на имена полей видеть места, откуда информация взята и связи между таблицами.
3. Какая-нибудь из сторон обычно пользуется уже упомянутым плюсометом. Побеждает тот, у кого плюсомет в данный момент больше.


 
Digitman ©   (2004-06-23 17:17) [18]


> Igorek ©   (23.06.04 16:21)  


см. [1], про овощ, оно единственно верно


 
Игорь Шевченко ©   (2004-06-23 17:25) [19]

Sandman25 ©   (23.06.04 16:58)

> Принцип Оккама и в программировании работает...


Если им не злоупотреблять.


 
Sandman25 ©   (2004-06-23 17:29) [20]

[19] Игорь Шевченко ©   (23.06.04 17:25)

Естественно.


 
Igorek ©   (2004-06-23 17:50) [21]


> vuk ©   (23.06.04 17:12) [17]
> 2. Названия полей БД уникальны в пределах БД и имеют префикс
> в виде аббревиатуры таблицы. При этом если поле является
> значением, взятым из другой таблицы или foreign key, то
> имя поля соответствует полю в той таблице, откуда берутся
> значения. Это позволяет просто глядя на имена полей видеть
> места, откуда информация взята и связи между таблицами.

Такой позиции придерживается мой напарник.

> Игорь Шевченко ©   (23.06.04 16:24) [1]
> > 2) как вы именуете поля в таблицах в БД? Названия полей
> > уникальны только в пределах одной таблицы или во всей
> базе даных?

> В пределах таблицы

Такова моя позиция.

Вот мы и не можем прийти к консенсусу. Так-что:
1) что такое плюсомет? минусомет? что делать если это не помогает? Есть и то и то, но веса плюсов и минусов у обоих разные - отсюда и разная общая оценка конкретного варианта - что делать?
2) vuk и Игорь Шевченко - покажите как мастера пример спора в данной ситуации


 
vuk ©   (2004-06-23 18:41) [22]

to Igorek ©   (23.06.04 17:50) [21]:
>Вот мы и не можем прийти к консенсусу.
Ну... Даже и не знаю, что сказать по этому поводу. Наверное нужно определиться с тем, как вы подходите к данным. Тот подход, что применяется у нас, подразумевает, что одни и те же данные должны называться одинаково, где бы они не хранились. Споров у нас по этому поводу не было, все как-то этой точки зрения уже давно придерживаются.

>1) что такое плюсомет? минусомет?
Плюсомет (из ФИДО) - стрррашное оружие модератора. Использование плюсомета приводит к награждению плюсами объекта применения.

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


 
Паниковский ©   (2004-06-24 07:25) [23]

Igorek
счас погодь

во нашел в этой книге ты найдеш ответы на твои вопросы

"Веревка достаточной длины, чтобы выстрелить себе в ногу"
Ален И. Голуб
http://infocity.kiev.ua/m.php?f=0&id=117


 
evvcom ©   (2004-06-24 08:28) [24]


> >выделить DBGrid1.DataSource.DataSet в локальную переменную
>
> Зачем?

Дело в том, что при использовании конструкции with DBGrid1.DataSource.DataSet do компилятор неявно в стеке все равно отводит место для хранения этой переменной. Поэтому с этой точки зрения употребление l_DataSet := DBGrid1.DataSource.DataSet; полностью идентично. Точно также как и обращение к свойствам и методам внутри with или через l_DataSet опять же идентично. Здесь мы ничего не сэкономим. Но при довольно большом объеме кода процедуры использование with да еще с несколькими "цепочками" (через запятую или многоэтажная конструкция) сильно затрудняют чтение/понимание кода, а также и отладку. Кроме того, использование многоэтажек добавляет риск использования свойства/метода не от того объекта (при одинаковых именах).
Я поначалу использовал with чуть ли не везде и повсюду. Сказалось влияние обучения в ВУЗе. Но с опытом понял, что это далеко не везде допустимо. И сейчас лучше ввожу явно доп.переменную и обращаюсь через нее вместо использования with.


 
Sandman25 ©   (2004-06-24 09:50) [25]

[24] evvcom ©   (24.06.04 08:28)

>Но с опытом понял, что это далеко не везде допустимо.

Если речь идет о вложенных with, то я согласен.
Вводить же переменную в случае одинарного with смысла не вижу.


 
Игорь Шевченко ©   (2004-06-24 10:52) [26]


> Дело в том, что при использовании конструкции with DBGrid1.DataSource.DataSet
> do компилятор неявно в стеке все равно отводит место для
> хранения этой переменной. Поэтому с этой точки зрения употребление
> l_DataSet := DBGrid1.DataSource.DataSet; полностью идентично.


Разумеется. Место в стеке или свободный регистр. Отсюда и вывод, что использование with увеличивает быстродействие кода.
Но кроме быстродействия есть еще такое понятие, как читабельность кода и удобство его отладки.


 
Igorek ©   (2004-06-24 11:47) [27]

Я прошу прощения. А локальную переменную нельзя разместить в стеке/регистре?


 
Игорь Шевченко ©   (2004-06-24 11:56) [28]


>  А локальную переменную нельзя разместить в стеке/регистре?


Так она там и размещается. Использование with подразумевает неявную локальную переменную.


 
Igorek ©   (2004-06-24 11:58) [29]

А явная размещается? Если да, то with нифига не оптимизирует и бинаре.


 
Игорь Шевченко ©   (2004-06-24 11:59) [30]

Igorek ©   (24.06.04 11:58)


> Если да, то with нифига не оптимизирует и бинаре


Это почему же ?


 
Igorek ©   (2004-06-24 13:16) [31]


> Игорь Шевченко ©   (24.06.04 11:59) [30]

Ну или с with или без - неявная/явная переменная при возможности помещается в стек/регистры. Или я что-то недопонимаю. Не спец в этом.


 
Reindeer Moss Eater ©   (2004-06-24 13:21) [32]

локальные переменные процедур всегда живут в стеке.
тогда как c with у неявно создаваемых есть шанс попасть в регистр


 
Игорь Шевченко ©   (2004-06-24 13:22) [33]

Reindeer Moss Eater ©   (24.06.04 13:21)


> локальные переменные процедур всегда живут в стеке


Если не включена оптимизация :)


 
Reindeer Moss Eater ©   (2004-06-24 13:24) [34]

Если не включена оптимизация :)

Имеются ввиду неиспользуемые, но задекларированные локальные переменные процедур?


 
Игорь Шевченко ©   (2004-06-24 13:26) [35]

Reindeer Moss Eater ©   (24.06.04 13:24)


> Имеются ввиду неиспользуемые, но задекларированные локальные
> переменные процедур?


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


 
Igorek ©   (2004-06-24 13:27) [36]


> Reindeer Moss Eater ©   (24.06.04 13:21) [32]
> локальные переменные процедур всегда живут в стеке.
> тогда как c with у неявно создаваемых есть шанс попасть
> в регистр

А у явных локальных нету такого шанса? При оптимизации/без таковой?


 
Reindeer Moss Eater ©   (2004-06-24 13:28) [37]

Тогда я не понял потенциальных преимуществ with перед явными переменными в деле оптимизации машинного кода


 
Igorek ©   (2004-06-24 13:41) [38]


> Reindeer Moss Eater ©   (24.06.04 13:28) [37]

Я тоже.


 
Игорь Шевченко ©   (2004-06-24 13:43) [39]

Reindeer Moss Eater ©   (24.06.04 13:28)
Igorek ©   (24.06.04 13:41)

Не надо объявлять переменные, например :)


 
Igorek ©   (2004-06-24 13:48) [40]


> Игорь Шевченко ©   (24.06.04 13:43) [39]


> в деле оптимизации машинного кода


 
Danilka ©   (2004-06-24 13:50) [41]

Кстати, форматирование кода тоже никак не помогает в деле оптимизации машинного когда.


 
Sandman25 ©   (2004-06-24 13:56) [42]

Если бы в Delphi можно было бы объявлять переменные где угодно, как в C, with действительно вряд ли бы оставался полезным.
Просто писали бы
begin
...
 begin
   var DataSet1: TDataSet := DBGrid1.DataSource.DataSet;
   DataSet1.First;
   ...
 end;
end;


 
Igorek ©   (2004-06-24 14:42) [43]

Так кто-нибуть обьяснит мне толком: Использование with оптимизирует бинарный код? Да или нет?


 
Sandman25 ©   (2004-06-24 14:44) [44]

[43] Igorek ©   (24.06.04 14:42)

По сравнению с [14] - да.
по сравнению с [24] - нет.


 
Dok_3D ©   (2004-06-24 14:53) [45]

Использование with оптимизирует бинарный код? Да или нет?

Смешно надеяться получить на этом форуме правильный ответ на этот вопрос. Это знает только разработчик компилятора. Да даже он - навряд ли в этом на 100% уверен. Все давно мхом поросло.


 
Игорь Шевченко ©   (2004-06-24 14:54) [46]

Dok_3D ©   (24.06.04 14:53)


> Смешно надеяться получить на этом форуме правильный ответ
> на этот вопрос


Правильный ответ - оптимизирует. По скорости.


 
Reindeer Moss Eater ©   (2004-06-24 14:55) [47]

Смешно надеяться получить на этом форуме правильный ответ на этот вопрос.

Это почему же?
Бинарный код доступен для сравнения. В случае с with и без него.


 
Sandman25 ©   (2004-06-24 14:55) [48]

[45] Dok_3D ©   (24.06.04 14:53)

По машинному коду все видно :)


 
Dok_3D ©   (2004-06-24 15:01) [49]

Не сравнивал.
А случаем, тогда не скажетке, если включена опция "Enables compiler optimizations" то применение With станет-ли излишней именно для целей оптимизации?


 
Sandman25 ©   (2004-06-24 15:02) [50]

[49] Dok_3D ©   (24.06.04 15:01)

По сравнению с [14] - нет.
по сравнению с [24] - да.

:)


 
Danilka ©   (2004-06-24 15:05) [51]

[50] Sandman25 ©   (24.06.04 15:02)
Что более оптимально в плане оптимизации: дать ссылку на [44] или повторить пост? :))


 
Sandman25 ©   (2004-06-24 15:07) [52]

[51] Danilka ©   (24.06.04 15:05)

Внимательнее, там инверсия. Правда, сначала я действительно хотел написать см. not [44] :)


 
Danilka ©   (2004-06-24 15:11) [53]

[52] Sandman25 ©   (24.06.04 15:07)
действительно, и вопрос и ответ инвертирован, а я и не заметил :))



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

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

Наверх




Память: 0.61 MB
Время: 0.025 c
3-1087209087
stas
2004-06-14 14:31
2004.07.11
невозможно создать файл Con.udl в WinXP


1-1087973954
Aldor
2004-06-23 10:59
2004.07.11
%d в FormatStrings поддерживает Int64?


4-1085984346
lely
2004-05-31 10:19
2004.07.11
Запаролить CD-ROM


1-1088078327
ThermiT
2004-06-24 15:58
2004.07.11
Работа с MS Word (генерация отчетов)


14-1087541950
Andryk
2004-06-18 10:59
2004.07.11
Однако как меня вчерась хорваты порадовали.