Главная страница
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]


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



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

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

Наверх




Память: 0.58 MB
Время: 0.048 c
1-1088523699
dimon_programmer
2004-06-29 19:41
2004.07.11
Извлечь DateTime из FTLastAcsessed


1-1088247918
Lexa
2004-06-26 15:05
2004.07.11
Файл ресурсов


14-1087906623
AlexG
2004-06-22 16:17
2004.07.11
С++ Builder и Delphi


4-1085737780
Cronos
2004-05-28 13:49
2004.07.11
Как заблокировать клавишу Windows? Подскажите, пожалуйста.


14-1087991840
Ditrix
2004-06-23 15:57
2004.07.11
глюки bde на nvidia