Форум: "Начинающим";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
ВнизПростой вопрос по Object Pascal. Найти похожие ветки
← →
Kostafey © (2006-11-24 22:26) [0]Подскажите пожалуйста как можно разделить реализацию класса на несколко модулей (файлов).
Или же просто есть ли Delphi команда аналогичная #include"Somefile" в С++
← →
Palladin © (2006-11-24 22:35) [1]{$I} + F1
только на кой это тебе
← →
Kostafey © (2006-11-24 22:39) [2]> {$I} + F1
> только на кой это тебе
Да чтоб файл не листать. А так конечно нарушение принципов модульности.
А вот как можно разделить реализацию класса на несколко модулей непонятно.
← →
Anatoly Podgoretsky © (2006-11-24 22:48) [3]> Kostafey (24.11.2006 22:26:00) [0]
Есть так и называется include, только идеология не верная, отлаживать тяжело, что за необходимость такая разбивать на несколько файлов, и не называей это модулем, с модулями как раз полный порядок.
← →
Sergey Masloff (2006-11-24 22:49) [4]Раздели класс на несколько более мелких. Один будет интерфейсом для остальных. Только это извращение
← →
Anatoly Podgoretsky © (2006-11-24 22:49) [5]> Kostafey (24.11.2006 22:39:02) [2]
Так ты предпочитаешь листать несколько файлов :-)
Может дойти до конца? Каждая строчка один файл?
← →
Kostafey © (2006-11-24 23:01) [6]> Так ты предпочитаешь листать несколько файлов :-)
> Может дойти до конца? Каждая строчка один файл?
Да, я согласен правда в этом есть. У меня вообще никакого опата разработки болших проектова нет. (для кого-то он будет и маленьким)
Вот такая конструкция сама по себе не очень красивая, а если вместо {$INCLUDE "SQL_a1.pas"} будут мои 171 строка кода все становиться
нечитаемым, а сами 171 строчка уже отлажены. Вот я подумал убрать их в файл от греха подальше.
begin
with DataModule_ABR.ADODataSet1 do
BEGIN
Result:=true;
Active:=false;
DataModule_ABR.ADODataSet2.Active:=false;
case ABR_kind of
a0:begin
MessageDlg("Ionoie cai?in", mtInformation, [mbOK], 0);
Result:=false;
end;
a1:begin //Aiaeec aeaia auacaia
{$INCLUDE "SQL_a1.pas"}
end;
a2:begin //Aiaeec ?ani?aaaeaiey auacaia ii ?aiaai ii?a?a
CommandText :="Select PCH.PCH_NAME, ZVK1.RANK, count(Zvk1.PCH_COD) as Acount "+
"from PCH, ZVK1 "+
"Where (ZVK1.PCH_COD=*PCH.PCH_COD) and (DATE_ZVK1 between :DateFrom and :DateTo) "+
"group by PCH.PCH_NAME, ZVK1.RANK "+
"order by PCH.PCH_NAME, ZVK1.RANK ";
Parameters.ParamByName("DateFrom").Value:=Per_beg;
Parameters.ParamByName("DateTo").Value:=Per_end;
end;
else
MessageDlg("Ioeai?iue cai?in", mtError, [mbOK], 0);
Result:=false;
end; //case
if Result then Active:=true;
END;
end;
← →
Kolan © (2006-11-24 23:01) [7]> Только это извращение
Фасад это, а не извращение.
> Да чтоб файл не листать.
А что тут трудного?
Ctrl + Click на имени перенесет тебя к объявлению.
В левом верхнем углу среды есть дерево функций/классов тоже можно переходить быстро.
← →
Kolan © (2006-11-24 23:02) [8]> строчка уже отлажены
И что работают во всех 100% случаев. Поверь получится так, что и там нужно будет что-то менять..
← →
Kostafey © (2006-11-24 23:03) [9]> А что тут трудного?
> Ctrl + Click на имени перенесет тебя к объявлению.
> В левом верхнем углу среды есть дерево функций/классов тоже
> можно переходить быстро.
Угу. Если это разные подпрограммы, а если одна ?
← →
Kostafey © (2006-11-24 23:04) [10]Как я понимаю резюме следующее:
ОСТАВИТЬ ВСЕ КАК ЕСТЬ ??
← →
Kolan © (2006-11-24 23:05) [11]> [9] Kostafey © (24.11.06 23:03)
> > А что тут трудного?
> > Ctrl + Click на имени перенесет тебя к объявлению.
> > В левом верхнем углу среды есть дерево функций/классов
> тоже
> > можно переходить быстро.
>
>
> Угу. Если это разные подпрограммы, а если одна ?
А что у тя подпрограмма(это же функция/процедура так называется) не вмещается в 1-2 экрана? Тады она написаны хреново. Выделай отдельные(рефакторинг Extract Method)
← →
Kolan © (2006-11-24 23:05) [12]> 171
Мистическое число :)
← →
Kolan © (2006-11-24 23:07) [13]> если одна ?
Кстати Ctrl+Click вполне пригоден.
← →
Kostafey © (2006-11-24 23:08) [14]>Выделай отдельные(рефакторинг Extract Method)
Уверен, эта фраза имеет перевод на человеческий язык.
← →
Kostafey © (2006-11-24 23:09) [15]> Кстати Ctrl+Click вполне пригоден.
Ну да, я конечно всех возможностей IDE незнаю
← →
Kolan © (2006-11-24 23:18) [16]> Уверен, эта фраза имеет перевод на человеческий язык.
Имеет: Рефакторинг "Извлечение метода"
> Ну да, я конечно всех возможностей IDE незнаю
Пока я так и не понял в чем проблемма? Что тебя подталкнуло разделять класс! на модули...
← →
Kostafey © (2006-11-24 23:22) [17]> Имеет: Рефакторинг "Извлечение метода"
Понял. Но тогда получиться куча однотипных методов в классе.
> Пока я так и не понял в чем проблемма? Что тебя подталкнуло
> разделять класс! на модули...
Разрастание класса и подтолкнуло. Хотя бы разместить реализацию класса в нескольких файлах.
Хотя судя по комментариям участников это не самое лучшее решение ?
← →
Kolan © (2006-11-24 23:31) [18]> не самое лучшее решение
Отвратительное.
> Но тогда получиться куча однотипных методов в классе.
Значит они все неправильные. Зачем делать одно и тоже(или почти одно и тоже) несколько раз? Опять же рефакторинг нужен. Устраните дубликаты. Пример дубликатов в студию..
> Разрастание класса и подтолкнуло.
Прям так распух? 100 000 строк уже есть?
← →
Anatoly Podgoretsky © (2006-11-24 23:39) [19]> Kostafey (24.11.2006 23:01:06) [6]
Если не обращать внимания на ошибки, то помести "SQL_a1.pas" в отдельную процедуру.
← →
Kostafey © (2006-11-24 23:39) [20]
> Прям так распух? 100 000 строк уже есть?
Нет, но 400-600 строк и все нужно по-моему в другой файл перебрасывать
> Значит они все неправильные. Зачем делать одно и тоже(или
> почти одно и тоже) несколько раз? Опять же рефакторинг нужен.
> Устраните дубликаты. Пример дубликатов в студию..
А в дубликатах есть просто изменения в SQL-запросах:
DataModule_ABR.ADODataSet2.CommandText:=
"Select count(PCH_COD)+ "+
"(select count(PCH_COD) "+
"from ZVK1ARX o "+
"where (o.DATE_ZVK between :DateFrom and :DateTo)) as Kol "+
"from ZVK1 "+
"where (DATE_ZVK1 between :DateFrom1 and :DateTo1) ";
DataModule_ABR.ADODataSet2.Parameters.ParamByName("DateFrom").Value:=Per_beg;
DataModule_ABR.ADODataSet2.Parameters.ParamByName("DateTo").Value:=Per_end;
DataModule_ABR.ADODataSet2.Parameters.ParamByName("DateFrom1").Value:=Per_beg;
DataModule_ABR.ADODataSet2.Parameters.ParamByName("DateTo1").Value:=Per_end;
DataModule_ABR.ADODataSet2.Active:=true;
DataModule_ABR.ADODataSet2.First;
//Iauaa ?enei ii?a?ia ca ?an?aoiue ia?eia
tmpCount1:=DataModule_ABR.ADODataSet2.FieldValues["Kol"];
DataModule_ABR.ADODataSet2.Active:=false;
DataModule_ABR.ADODataSet2.CommandText:=
"Select count(PCH_COD)+ "+
"(select count(PCH_COD) "+
"from ZVK1ARX o "+
"where (o.DATE_ZVK between :DateFrom and :DateTo)) as Kol "+
"from ZVK1 "+
"where (DATE_ZVK1 between :DateFrom1 and :DateTo1) ";
DataModule_ABR.ADODataSet2.Parameters.ParamByName("DateFrom").Value:=Srv_beg;
DataModule_ABR.ADODataSet2.Parameters.ParamByName("DateTo").Value:=Srv_end;
DataModule_ABR.ADODataSet2.Parameters.ParamByName("DateFrom1").Value:=Srv_beg;
DataModule_ABR.ADODataSet2.Parameters.ParamByName("DateTo1").Value:=Srv_end;
DataModule_ABR.ADODataSet2.Active:=true;
DataModule_ABR.ADODataSet2.First;
//Iauaa ?enei ii?a?ia ca n?aaieaaaiue ia?e?ia
tmpCount2:=DataModule_ABR.ADODataSet2.FieldValues["Kol"];
Delta:=tmpCount1-tmpCount2;
← →
Kostafey © (2006-11-24 23:41) [21]
> [19] Anatoly Podgoretsky © (24.11.06 23:39)
> > Kostafey (24.11.2006 23:01:06) [6]
>
> Если не обращать внимания на ошибки, то помести "SQL_a1.pas"
> в отдельную процедуру.
Во ! Это-то и оно! А саму процедуру в отдельный файл ?
← →
Anatoly Podgoretsky © (2006-11-24 23:47) [22]> Kostafey (24.11.2006 23:03:09) [9]
Все что можно вынести в отдельный файл, можно поместить в процедуру.
← →
Anatoly Podgoretsky © (2006-11-24 23:48) [23]> Kostafey (24.11.2006 23:04:10) [10]
Нет, надо просто разбить на процедуры и им дать значимые имена.
← →
Anatoly Podgoretsky © (2006-11-24 23:53) [24]> Kostafey (24.11.2006 23:39:20) [20]
Это в отдельную функцию или процедуру.
← →
Kostafey © (2006-11-24 23:59) [25]> Anatoly Podgoretsky © (24.11.06 23:53)
Ладно. Я все понял. Спасибо что уделили мне время.
Возможно, когда-нибудья научусь писать толковый код.
← →
Anatoly Podgoretsky © (2006-11-25 00:13) [26]> Kostafey (24.11.2006 23:59:25) [25]
Научишься.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.046 c