powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Грамотно написать программу а не говнокод
129 сообщений из 129, показаны все 6 страниц
Грамотно написать программу а не говнокод
    #39608773
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДД!. хотелось бы писать грамотно программу с бд, посмотреть пример и где скачать небольшую
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39608775
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если за 10 лет грамотно не написалось, то пример вряд ли поможет
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39608777
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧингисДД!. хотелось бы писать грамотно программу с бд, посмотреть пример и где скачать небольшую
1. Пиши грамотно программку с БД.
2. Смотри пример.
3. Скачай небольшую.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39608783
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,

где скачать ?
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39608795
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧингисчччД,

где скачать ?

https://github.com/search?utf8=?&q=delphi firebird&type=
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39608799
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чингис,


Fibplus 1

Fibplus 2
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39608878
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧингисДД!. хотелось бы писать грамотно программу с бд, посмотреть пример и где скачать небольшую

Любите папку Demos, источник знаний. Там как раз примеры, в том числе и с базой данных.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39608914
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi,
в демках Дельфи классический говнокод.
...
Мне книжка попадалась, там процесс говнокодинга от диаграмм в ER-win до инсталлятора был, с вариациями.
Тоже не идеал, но хоть что-то. Сейчас поищу на полках, потом ссылку дам.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39608925
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот:
20674516
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39608935
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДВот:
20674516
А как же Фаронов?
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39608957
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GallemarчччДВот:
20674516
А как же Фаронов?
Фараонов не писал о процессе разработки, он про типы данных, циклы да как батон1 на форму кидать.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39608982
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДв демках Дельфи классический говнокодВообще странный топик.
Говнокод - это мэйнстрим в последние 20 лет. И прогрессирует.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39608986
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockчччДв демках Дельфи классический говнокодВообще странный топик.
Говнокод - это мэйнстрим в последние 20 лет. И прогрессирует.
Странный вывод про 20 лет...
Человек в принципе всё делает плохо. От "совсем плохо" (-2), до "сойдет" (0).
И эту шкалу просто разметили (сместили) до от -1 до +1 для внутреннего спокойствия.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39608997
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanСтранный вывод про 20 лет...
Человек в принципе всё делает плохо. От "совсем плохо" (-2), до "сойдет" (0).
Да, но до определенного времени, пока компьютеры были сравнительно слабы, это лишь частично касалось программирования. А вот когда память начала на сотни мегабайт, гигабайты считаться - понеслось под лозунгом "сейчас это не размер".
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39609106
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
YuRockwadmanСтранный вывод про 20 лет...
Человек в принципе всё делает плохо. От "совсем плохо" (-2), до "сойдет" (0).
Да, но до определенного времени, пока компьютеры были сравнительно слабы, это лишь частично касалось программирования. А вот когда память начала на сотни мегабайт, гигабайты считаться - понеслось под лозунгом "сейчас это не размер".
640 килобайт хватит всем (с)
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39609113
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧингисДД!. хотелось бы писать грамотно программу с бд, посмотреть пример и где скачать небольшуюВот тут есть глава с примером приложения с БД - с разбором как чего и почему. Не знаю, насколько он хорош, давно читал, сейчас чуть глянул, но книги а целом, оба тома, хорошая и авторы известные.
https://www.for-stydents.ru/informatika/delphi/uchebniki/delphi-5-rukovodstvo-razrabotchika-tom-2-razrabotka-komponentov-i-rabota-s-bazami-dannyh.html
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39609131
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator640 килобайт хватит всем (с)
Так ведь и хватало же.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39609382
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

но не долго.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39609393
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonYuRock,

но не долго.Ну, относительно. Десятилетиями хватало, и меньше.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39609449
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

XT, насколько я помню, ну может лет 10 +- в ходу были:

Выпущен 8 марта 1983
Выпускался по апрель 1987

286 уже обычно 1 мб и больше было. Хотя за весь мир не скажу.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39609457
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧингисДД!. хотелось бы писать грамотно программу с бд, посмотреть пример и где скачать небольшую
RAD Studio Delphi - это в первую очередь
RAD (от англ. rapid application development — быстрая разработка приложений) — концепция создания средств разработки программных продуктов, уделяющая особое внимание быстроте и удобству программирования, созданию технологического процесса, позволяющего программисту максимально быстро создавать компьютерные программы.

Быстро <> грамотно.

Хотите грамотно но на Delphi - отказываетесь от невизуальных designtime компонентов. dfm используете только для построения UI/UX.
Вся логика на сервисах работающих по контракту. Все нужные компоненты если таковые нужны - в runtime. Ах, да и свято следуете SOLID, ну и к сожалению в Delphi с буквой D не очень удобно работать....
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39609463
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteХотите грамотно но на Delphi - отказываетесь от невизуальных designtime компонентов. dfm используете только для построения UI/UX.
Вся логика на сервисах работающих по контракту. Все нужные компоненты если таковые нужны - в runtime. Ах, да и свято следуете SOLID, ну и к сожалению в Delphi с буквой D не очень удобно работать....
Потом считаете во сколько вам обойдется разработка и поддержка такого монстра и делаете все как обычно.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39609468
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite,

какие еще сервисы. В программе должны быть объекты Button1, Edit1 и DBGrid1.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39609528
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧингисДД!. хотелось бы писать грамотно программу с бд, посмотреть пример и где скачать небольшую

может блог разработчика почитать?
http://www.gunsmoker.ru/

г-код == неудачное архитектурное или программно-техническое решение - на маленькой программе не виден, не видно преимуществ от ==правильных== подходов.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39609529
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62ЧингисДД!. хотелось бы писать грамотно программу с бд, посмотреть пример и где скачать небольшуюВот тут есть глава с примером приложения с БД - с разбором как чего и почему. Не знаю, насколько он хорош, давно читал, сейчас чуть глянул, но книги а целом, оба тома, хорошая и авторы известные.
https://www.for-stydents.ru/informatika/delphi/uchebniki/delphi-5-rukovodstvo-razrabotchika-tom-2-razrabotka-komponentov-i-rabota-s-bazami-dannyh.html

о, первая и любимая книжка по делфям. как сейчас помню ((((
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39610262
На всякий случай: есть такой (возможно, спорный) критерий "грамотности" программы, работающей с БД:
каждое действие пользователя, могущее изменить данные в БД, оформляется как отдельная форма с кнопками "Ок (Сохранить)" и "Отмена"

При этом "единицей" редактируемых данных является "бизнес-сущность" (как правило, отдельный класс, имеющий методы "загрузить из БД по Id" и "сохранить в БД"), которому в БД может соответствовать что-то большее, чем одна записи в одной таблице (например, бизнес-сущность "Счет" или "Накладная" может состоять из 1 записи в таблицах счетов или накладных плюс несколько записей в таблицах строк счетов или строк накладных, т.е. пара таблиц Master/Detail со связью Foreign Key -> Primary Key)

То есть, вся эта бизнес-сущность в процессе её редактирования 1) загружается из БД 2) меняется пользователем и 3) сохраняется, при этом доступ к этой же самой сущности других пользователей должен либо а) блокироваться по пессимистическому принципу, то есть второму пользователю, попытавшемуся открыть форму её редактирования, выдается сообщение "эта бизнес-сущность уже редактируется пользователем 1!", либо б) по оптимистическому принципу - открыть и редактировать сущность смогут несколько пользователей сразу, но во время попытки сохранения любым из пользователей отредактированной им сущности должна происходить проверка на совпадение текущего состояния сущности в БД и того состояния, в котором сущность была считана из БД данным пользователем и в случае несовпадения выдается сообщение типа "эту сущность уже отредактировал и сохранил другой пользователь!" (и тут второму пользователю придется либо отменить сделанные им изменения и перечитать бизнес-объект снова, либо перезаписать измененный первым пользователем бизнес-объект, проигнорировав внесенные им изменения. Этот выбор может второму пользователю и не даваться - в зависимости от его прав - то есть может действовать только вариант "всё отменить и перечитать бизнес-сущность")

Простая и легко реализуемая альтернатива этому варианту - нет никаких кнопок "Сохранить/Отменить" и даже нет отдельных форм для редактирования бизнес-сущностей, а момент сохранения сделанных пользователем изменений в БД определяют сами элементы пользовательского интерфейса (controls, data-bounded). Можно ли им эту ответственную задачу поручить - решаете вы.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39627728
virsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чингис,

Просмотри темы по DDD (Domain Driven Design), паттерны (например Repository).

Рекомендую так же статьи Nick Hodges для общего развития.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39627835
Фотография roschinspb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, еще из личного

Как нельзя и как можно!

0. Нельзя черпать вдохновение на сайте http://govnokod.ru/pascal, но можно и нужно задуматься о своем месте в мироздании. Возможно в качестве дворника, или кондуктора Вы принесете больше пользы человечеству.

1. Не следует приступать к работе в бессознательном состоянии когда ваш мозг не может совершать элементарную мыслительную деятельность, лучше лечь и поспать еще. Вот характерный пример:
Код: pascal
1.
2.
3.
4.
5.
6.
begin
  ds := tstringlist.Create;
  ds.clear;
 
  ...
end;

Не нужно чистить только что созданный объект, а вот разрушать созданный локальный объект следует, при чем обязательно с использованием try finally. Помните сон разума рождает чудовищ.

2. Не забывайте, что парные процедуры BeginUpdate, EndUpdate, DisableControls, EnableControls и т. п. требуют try finally точно так же как и Create, Free
Код: pascal
1.
2.
3.
4.
5.
6.
DataSet.DisableControls;
try
  ...
finally
  DataSet.EnableControls;
end;

Если не использовать EnableControls, в блоке finally, то любое исключение приведет к потере работоспособности формы и вероятно потребует перезагрузить приложение. Для простого пользователя это бóльшая проблема чем утечка памяти из-за того, что некоторый объект не был бы разрушен.

3. Не следует использовать оператор GOTO, откройте для себя такое понятие как структурное программирование . Требование может показаться очевидным, но тем не менее кто-то продолжает использовать этот оператор.

4.Не добавляйте и не оставляйте информацию, которая затрудняет анализ кода поиск нужной информации и массовое внесение изменений.
Не оставляйте закомментированные участки кода, лишние пустые строки, неиспользуемые переменные, самоочевидные комментарии и пр. Если в рамках текущей задачи нет времени на более тщательную проверку, то хотя бы добавляйте понятный комментарий в формате DoTo.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
   ClipBOard.AsText := ds.Text;
{ TODO : Здесь бы надо по-думать, но мне лень. Пусть это сделает кто-то другой вместо меня! }
//    Len := Length(ws) shl 1 + 2;
//    hData := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, Len);
//    try
//      pData := GlobalLock(hData);
//      try
//        Move(PChar(ws)^, pData^, Len);
//        SetClipboardData(CF_UNICODEText, hData);
//      finally
//        GlobalUnlock(hData);
//      end;
//    except
//      GlobalFree(hData);
//    end;


Еще пример:
Код: pascal
1.
2.
// Файл пустой, потому что нет ничего
FFiles.Delete(FileIndex);


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

5. Не смешивайте визуальное и не визуальное программирование. Например: если форма в файле dfm называется "Список клиентов", а где-то в коде оно меняется на "Список абонентов", то это несет дополнительные сложности, если нужно массово изменить все формы связанные с клиентами. Т.е. свойства которые необходимо изменять в коде должны меняться только в коде, а в dfm-файле должно быть установлено умолчательное значение. Тоже самое относится к тексту запросов и текстовым сообщениям.

6. Не используйте динамическое формирование запросов и макросы в запросах без крайней на то необходимости. Если запрос изменяется в коде, то невозможно его скопировать в сторонний редактор запросов и обратно. Требуется запускать приложение и мониторить все запросы. При этом нет гарантии, что вы пройдете по всем веткам программы и проверите все варианты запросов. Таким образом любое даже тривиальное изменение существенно усложняется.

7. Недопустимо чтобы после ваших изменений появлялись новые Hint`ы и Warning`и. Старые Hint`ы и Warning`и следует устранять, если они расположены около ваших изменений.

8. Нельзя бездумно обращаться к объектам внутри обработчика события. Что произойдет если это же событие будет присвоено другому объекту? Что будет если исходный объект кто-то скопипастит? Вот характерный пример:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure TaReestr.gSearchResultSortMarkingChanged(Sender: TObject);
begin
  if FColumnName <> '' then
  begin
    case gSearchResult.ColumnByFieldName(FColumnName).Title.SortMarker of
      smDownEh:
                    tblreestr.SortOnFields(FColumnName,true,true);
      smUpEh:
                    tblreestr.SortOnFields(FColumnName,true,false);
    end;
  end;
end;

Для грида gSearchResult был определен обработчик события по которому выполняется сортировка, в нем на прямую идет обращение к этому гриду и связанному с ним набору данных.
Во-первых в будущем набор данных может поменяться, а в событии будет по прежнему сортироваться старый набор данных и ни кто этого не заметит.
Во-вторых исходный грид вовсе не обязательно будет единственным. Он может быть скопирован вместе со всеми обработчиками событий (как и произошло в приведенном примере), но при клике по заголовку второго грида сортироваться будет набор данных из первого. Вариант исправления примерно такой:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure TaReestr.gSearchResultSortMarkingChanged(Sender: TObject);
begin
  if (FColumnName <> '') and (Sender is TBbsDBGridEh) and (TBbsDBGridEh(Sender).DataSource <> nil) and
    (TBbsDBGridEh(Sender).DataSource.DataSet is TRxMemoryData) then
  with TRxMemoryData(TBbsDBGridEh(Sender).DataSource.DataSet) do
  begin
    case TBbsDBGridEh(Sender).ColumnByFieldName(FColumnName).Title.SortMarker of
      smDownEh:
        SortOnFields(FColumnName, true, true);
      smUpEh:
        SortOnFields(FColumnName, true, false);
    end;
  end;
end;

Этот обработчик можно безопасно использовать в различных ситуациях. Можно было бы еще и переименовать его, чтобы было видно, что он не привязан к конкретному гриду.
Такой подход не может рассматриваться как общее требование, потому, что в некоторых случаях логика работы требует обращения к какому-то конкретному объекту, таким образом требуется обдумывать решение в каждом конкретном случае.

9. Нельзя обращаться к объектам, которые могут быть пустыми. Нельзя выполнять приведение типов, если нет уверенности в совместимости типов. Проверяйте значения на допустимость в обработчиках событий! Например:
Код: pascal
1.
(sender as tbbsdbgrideh).datasource.dataset.first; 


Очевидно, что DataSet может быть nil, DataSource может быть nil, Sender может быть не TBbsDBGridEh, т.е. в одной строке три потенциальных места для ошибки. Проверять можно как показано в предыдущем примере. В случае недопустимых, или пустых значений, в зависимости от логики работы можно либо ни чего не делать, либо поднимать исключение с человеческим текстом.

10. Не следует освобождать не инициализированные объекты.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
try
  Clipboard := TCLipboard.Create;
  ClipBoard.Open;
  Clipboard.Clear;
  ClipBOard.AsText := ds.Text;
finally
  ClipBoard.Close;
  ClipBoard.Free;
end;

Что будет, если ошибка возникнет в конструкторе? Clipboard будет содержать мусор, мы попытаемся обратится к этому объекту в разделе finaly, и получим другую ошибку, а информацию о первой ошибке потеряем. Что будет, если ошибка произойдет в ClipBoard.Close? Мы не уничтожим объект и получим утечку памяти. Вариант исправления:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Clipboard := TCLipboard.Create;
try
  ClipBoard.Open;
  try
    Clipboard.Clear;
    ClipBOard.AsText := ds.Text;
  finally
    ClipBoard.Close;
  end;
finally
  ClipBoard.Free;
end;

Если в конструкторе произойдет ошибка, то в раздел finally мы не попадем. Общий шаблон использования объектов такой:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Object1 := TObject1.Create;
try
  Object2 := TObject2.Create;
  try
    ...
  finally
    Object2.Free;
  end;
finally
  Object1.Free;
end;

или
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Object1 := nil;
Object2 := nil;
try
  Object1 := TObject1.Create;
  Object2 := TObject2.Create;
  ...
finally
  FreeAndNil(Object2);
  FreeAndNil(Object1);
end;



11. Не следует вызывать один пользовательский обработчик события из другого события. Например:
Код: pascal
1.
2.
3.
4.
5.
6.
procedure TaReestr.gSearchResultKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  inherited;
  if (ssctrl in Shift) and ((Key = ord('C')) or (ord(Key) = ord('c')) or (Key = ord('С')) or (ord(Key) = ord('с'))) then
    gSearchResultDblClick(Sender);
end;

Здесь по нажатию Ctrl+C происходит вызов обработчика двойного клика, который копирует данные в буфер обмена. Из названия gSearchResultDblClick ни как не следует, что обработчик этого события должен что-то скопировать в буфер обмена. Вполне возможно, в будущем к двойному клику будет привязана другая более стандартная функциональность, при этом и обработчик Ctrl+C перестанет работать. Лучше вынести код gSearchResultDblClick в отдельный метод и во всех обработчиках событий вызывать этот метод. А еще лучше создать действие (Action), и обрабатывать нажатия клавиш используя возможности Delphi, вместо того, чтобы изобретать свой собственный велосипед.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
procedure TaReestr.CopyGridExecute(Sender: TObject);
var
  I: Integer;
  Control: TControl;
begin
  inherited;
  if ActiveControl is TBbsDBGridEh then
    CopyBbsDBGridEh(TBbsDBGridEh(ActiveControl))
  else if PageControl1.ActivePage <> nil then
    for I := 0 to PageControl1.ActivePage.ControlCount - 1 do
    begin
      Control := PageControl1.ActivePage.Controls[I];
      if Control.Visible and Control.Enabled and (Control is TBbsDBGridEh) then
      begin
        CopyBbsDBGridEh(TBbsDBGridEh(Control));
        Break;
      end;
    end;
end;



12. Ни когда не освобождайте объект внутри метода этого объекта в Delphi это недопустимо. Также недопустимо уничтожение объекта внутри обработчика события, объекта, т.к. обработчики событий вызываются из методов объекта. Например нельзя уничтожать форму в обработчике события OnClose этой формы:
Код: pascal
1.
2.
3.
4.
5.
procedure TaReestr.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  Free;
end;

Здесь можно присвоить параметру Action значение caFree, но лучше всегда использовать стандартный шаблон работы с модальной формой Create-ShowModal-Free.

13. Не используйте вложенные with, не используйте большие блоки кода внутри with. Например:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
begin
  with OMG do
  begin
    ...
    // несколько экранов кода
    with WTF do
    begin
      ...
      // несколько экранов кода
      ...  
    end;
    ...
    // несколько экранов кода
  end;
end;


Надо сказать, что большие методы и блоки кода сами по себе затрудняют анализ кода и обычно являются дурным тоном а также признаком низкого профессионализма. Использование же with особенно сильно запутывает логику работы программы, при этом не позволяют использовать переход по ctrl+click и не позволяют видеть значения переменных в процессе отладки. Поэтому надо всегда избегать использования оператора with за исключением очень коротких и очевидных методов. Лучше вообще ни когда его не использовать.

14. Не используйте Free для глобальных переменных и полей
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
procedure TfrmShowPayDoc.aEditPayDocExecute(Sender: TObject);
begin
  if frmEditPayDoc = nil then
  begin
    frmEditPayDoc := TfrmEditPayDoc.Create(Self);
    try
      frmEditPayDoc.gvPDocId:=...
      ...
    finally
      frmEditPayDoc.Free;
    end;
  end
  else
    try
      frmEditPayDoc.gvPDocId:=...
      ...
    finally
      frmEditPayDoc.Free;
    end;
end;

Здесь при первом вызове, объект frmEditPayDoc равен nil, затем он создается и разрушается. После Free переменная frmEditPayDoc содержит ссылку на разрушенный объект но не nil. Таким образом при повторном вызове будет обращение к разрушенному объекту и ошибка доступа к памяти. В исходном коде ошибка маскировалась большим количеством дублированного кода, который в примере не показан. Чтобы избежать таких ошибок используйте глобальный стандартный метод FreeAndNil, который разрушает объект и обнуляет значение переменной.

15. Избегайте дублирования кода, ибо "копипаст" — зло. См. пример из п. 14. Единственная разница в блоках if/else это создание объекта, если он был пустым. Таким образом очень легко переписать условие следующим образом:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
if frmEditPayDoc = nil then
  frmEditPayDoc := TfrmEditPayDoc.Create(Self);
try
  frmEditPayDoc.gvPDocId := ...
  ...
finally
  FreeAndNil(frmEditPayDoc);
end;


Но гораздо быстрее сразу писать без дублирования кода, чем потом пытаться найти отличия в двух ветках условия.
Вот еще характерный пример:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
if qSomeFriendlyQueryName.FieldByName('Some_Friendly_Field_Name').Value <> NULL then
begin
  if cbPaymDelay.Items.IndexOf(qSomeFriendlyQueryName.FieldByName('Some_Friendly_Field_Name').Value) > 0 then
    cbPaymDelay.ItemIndex := cbPaymDelay.Items.IndexOf(qSomeFriendlyQueryName.FieldByName('Some_Friendly_Field_Name').Value)
   else
   begin
     cbPaymDelay.ItemIndex := cbPaymDelay.Items.IndexOf(qSomeFriendlyQueryName.FieldByName('Some_Friendly_Field_Name').Value);
     if cbPaymDelay.ItemIndex = -1 then
     begin
       cbPaymDelay.Items.Add(qSomeFriendlyQueryName.FieldByName('Some_Friendly_Field_Name').Value);
       cbPaymDelay.ItemIndex := cbPaymDelay.Items.IndexOf(qSomeFriendlyQueryName.FieldByName('Some_Friendly_Field_Name').Value);
     end;
   end;
end;

За длиннющим текстом "qSomeFriendlyQueryName.FieldByName('Some_Friendly_Field_Name').Value" теряется ясность понимания кода и что вообще предполагается сделать. Хотя если была цель сломать мозг своему коллеге, то стиль выбран правильно.

16. Не оставляйте Hint и Warning. Warning рекомендуется интерпретировать как ошибки компиляции.
Код: pascal
1.
2.
3.
4.
5.
for i := 0 to qBalance.RecordCount - 1 do
begin
  SumByBalances := SumByBalances + qBalance.FieldByName('ACCESS_$').AsFloat;
  qBalance.Next;
end;

Здесь было предупреждение о том, что переменная SumByBalances может быть не инициализирована, но из-за того, что в проекте огромное количество предупреждений на это ни кто не обращал внимание.
Код: pascal
1.
2.
3.
4.
5.
6.
SumByBalances := 0; // Обнуляем сумму!
for i := 0 to qBalance.RecordCount - 1 do
begin
  SumByBalances := SumByBalances + qBalance.FieldByName('ACCESS_$').AsFloat;
  qBalance.Next;
end;

Ошибка довольно серьезная, перед выполнением цикла значение суммы может содержать любое значение, но с большой вероятностью оно будет содержать 0, таким образом на этапе тестирования ошибка не будет замечена, однако при длительной работе там может содержаться любое значение и кто-то попадет на "лавэ" без каких-либо предупреждений (в 90-х за это отправляли раков кормить).

17. Не используйте стандартные свойства компонентов для хранения переменных. Весьма вероятно, что кто-нибудь их изменит, что сломает всю логику работы приложения.
Код: pascal
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.
{ dfm }
    object mPayments: TMenuItem
      Caption = 'Платеж'
      object N8: TMenuItem
        Action = aGetPay
      end
      object N9: TMenuItem
        Action = aAnnulPay
      end
...
    object aAnnulPay: TAction
      Caption = 'Аннулировать'
      ...
      OnUpdate = aAnnulPayUpdate
    end
 
{ pas }
...
    N9.Enabled := spCheckUser.ParamByName('O_RESULT').AsInteger = 1;
...
 
procedure TfrmMain.aAnnulPayUpdate(Sender: TObject);
begin
  aAnnulPay.Enabled:= { разные другие условия } and (N9.Enabled);
end;

Здесь видно, что обработчик события aAnnulPayUpdate использует то значение N9.Enabled, которое сам же меняет. Это происходит не явно, и ошибку трудно найти. Можно просто добавить свойство с удобочитаемым названием и использовать его.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
    property AnnulmentEnabled: Boolean read FAnnulmentEnabled write FAnnulmentEnabled;
...
    AnnulmentEnabled := spCheckUser.ParamByName('O_RESULT').AsInteger = 1;
...
procedure TfrmMain.aAnnulPayUpdate(Sender: TObject);
begin
  aAnnulPay.Enabled:= { разные другие условия } and AnnulmentEnabled;
end;

Одна строчка написанного кода исключила бы ошибку и сделала бы код более ясным.

18. Не сравнивайте результат окна диалога с неумолчательным значением (обычно mrNo).
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
if MessageDlg('Вы хотите что-то сделать?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then
  { ни чего не делаем }
else
  { что-то делаем }
...
if MessageDlg('Вы хотите что-то сделать?', mtConfirmation, [mbYes, mbNo], 0) <> mrNo then
  { что-то делаем }
...
if MessageDlg('Вы хотите что-то сделать?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then
  exit;
{ что-то делаем }

Что будет, если кто-то добавит третью кнопку mbCancel? Что будет если пользователь нажмет крестик в верхнем правом углу? Действие будет выполнено, что неожиданно и не правильно. Можно конечно сделать крестик недоступным и надеяться, что ни кто не добавить кнопку Cancel, но лучше переписать условия так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
if MessageDlg('Вы хотите что-то сделать?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  { что-то делаем }
else
  { ни чего не делаем }
...
if MessageDlg('Вы хотите что-то сделать?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  { что-то делаем }
...
if MessageDlg('Вы хотите что-то сделать?', mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
  exit;
{ что-то делаем }


Общий шаблон для создания условий выглядит так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
if { обычная ситуация } then
  { обычная работа }
else
  { необычная работа }
... 
if not { обычная ситуация } then
  exit;
{ обычная работа }
...
if { ситуация } <> { обычная ситуация } then
  exit;
{ обычная работа } 



19. Не используйте преобразования в строку и обратно без необходимости (в особенности это относится к датам). Во-первых это долгая операция, во-вторых увеличивает вероятность ошибок связанных с различиями в региональных настройках.
Код: pascal
1.
2.
3.
4.
5.
6.
function TfrmGetPay.GetDateAndTimeBalA(vDate: TDateTime): TDateTime;
begin
  if dtPayTime.Checked
    then Result := StrToDateTime(DateToStr(vDate)+' '+TimeToStr(dtPayTime.Time))
   else Result := StrToDateTime(DateToStr(vDate));
end;

Тип TDateTime это обычное число с плавающей точкой (Double), в целой части хранятся сутки (количество дней прошедших с 30.12.1899), в дробной части хранится время. Для получения целой и дробной части числа можно использовать например функции Trunc и Frac.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
function TfrmGetPay.GetDateAndTimeBalA(vDate: TDateTime): TDateTime;
begin
  if dtPayTime.Checked then
    Result := Trunc(vDate) + Frac(dtPayTime.Time)
  else
    Result := Trunc(vDate);
end;


Еще характерный пример.
Код: pascal
1.
2.
3.
4.
var
vDate: TDateTime;
begin
  vDate := StrToDateTime(FormatDateTime('dd.mm.yyyy 23:59:59', pWorkDate));

Здесь трудно с уверенностью сказать, какие мысли были в голове у автора, скорее всего см. п. 1, однако допустим, что автор хотел округлить дату и время до целых долей секунды. В реальности происходит преобразование даты и времени в строку в строго фиксированном формате, а обратно происходит преобразование из строки формат который указан в региональных настройках компьютера, что приводит к ошибке. Есть много вариантов округления, например такой:
Код: pascal
1.
2.
3.
4.
5.
6.
var
  vDate: TDateTime;
  Y, M, D, H, N, S, Z: Word;
begin
  DecodeDateTime(pWorkDate, Y, M, D, H, N, S, Z);
  vDate := EncodeDateTime(Y, M, D, H, N, S, 0);

Полезными могут оказаться также функция Math.RoundTo и константы HoursPerDay, MinsPerDay, SecsPerDay, MSecsPerDay.

20. Ни когда не устанавливайте свойство формы Position в значение poDesktopCenter. Это означает, что форма будет расположена посередине рабочего стола, который представляет из себя прямоугольник охватывающий координаты всех имеющихся мониторов. При наличие двух мониторов форма будет расположена между ними, это неожиданно и не правильно, используйте значение Position = poScreenCenter.

21. Не следует забывать, что в выпадающем списке может быть выбрано недопустимое значение с ItemIndex = -1.
Код: pascal
1.
if cbPaymDelay.Items.Strings[cbPaymDelay.ItemIndex] = qSomeFriendlyQueryName.FieldByName('Some_Friendly_Field_Name').Text then

Здесь в некоторых случаях будет ошибка. Которую трудно обнаружить на этапе тестирования.

22. Если изменяемое свойство некоторого объекта это другой объект, то нельзя просто ограничиться присваиванием ссылки.
Код: pascal
1.
property Session: TSession read FSession write FSession;

Представим себе, что сначала присвоили некоторое значение, а потом удалили экземпляр объекта TSession. Получается, что поле FSession содержит не пустую ссылку на несуществующий объект. Обращение по такой ссылке приведет к ошибке при этом ни как не возможно проконтролировать допустимость обращения. Вот работающий шаблон:
Код: pascal
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.
  protected
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  published
    property Session: TOraSession read FSession write SetSession;
...
procedure TMyClass.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited;
  if (AComponent = FSession) and (Operation = opRemove) then
    FSession := nil;
end;
 
procedure TMyClass.SetSession(const Value: TOraSession);
begin
  if FSession <> Value then
  try
    if FSession <> nil then
      RemoveFreeNotification(FSession);
    FSession := Value;
    if FSession <> nil then
      FreeNotification(FSession);
  except
    FSession := nil;
    raise;
  end;
end;

Теперь если экземпляр объекта будет удален, то поле FSession будет содержать значение nil.

...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39627859
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скушно.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628296
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roschinspbВот, еще из личного
В целом толково.
автор2. Не забывайте, что парные процедуры BeginUpdate, EndUpdate, DisableControls, EnableControls и т. п. требуют try finally точно так же как и Create, Free
Для новичков - верно, а более продвинутые могут предварительно оценить, вероятно ли исключение между действиями. Например, заключать в try-finally I:=I+1 будет нелепо. Но имеет смысл только для таких простейших действий либо если совсем критична производительность, и блок сильно замедляет.
автор3. Не следует использовать оператор GOTO, откройте для себя такое понятие как структурное программирование. Требование может показаться очевидным, но тем не менее кто-то продолжает использовать этот оператор.

Опять же для новичков разумно, в более сложных случаях иногда goto пригождается. Например, выход из цикла большой вложенности либо прыжок на блок обработки из нескольких исходных мест, когда производительность критична и вложенная подпрограмма не вариант. Правда, последнее становится менее актуальным с появлением inline.
автор6. Не используйте динамическое формирование запросов и макросы в запросах без крайней на то необходимости.
А вот это в более-менее серьезном проекте почти неосуществимо.
Добавлю в тему:
- Не хранить тексты запросов в свойствах компонентов - dfm файлы часто исключены из фильтра поиска, и в случае чего искать текст придется долго. Я в одном проекте (всё на ХП, запросов немного) выделил все тексты в секцию констант одного юнита, а в другом (клиентский софт для БД с кучей таблиц) задаю их константами внутри методов, но обязательно добавляю к имени суффикс SQL, чтобы облегчить поиск в случае чего.
- (более всеобъемлющий вариант) вообще по максимуму ограничить задание в дизайн-тайм db-aware компонент. С установкой свойств в коде удобнее обращаться, и она более наглядна.
авторТип TDateTime это обычное число с плавающей точкой (Double), в целой части хранятся сутки (количество дней прошедших с 30.12.1899), в дробной части хранится время. Для получения целой и дробной части числа можно использовать например функции Trunc и Frac.

Не стоит. Это протекание абстракции, плюс если вдруг гипотетически TDateTime изменится с Double на, к примеру, record, такие упрощения будет больно вспоминать. К тому же они затрудняют разбор исходников тем, кто не знаком с устройством типа даты-времени. Рекомендую совсем забыть о внутреннем устройстве TDateTime и работать с ним исключительно через функции. Вместо Trunc и Frac есть DateOf и TimeOf.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628325
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скачать небольшуюНа всякий случай: есть такой (возможно, спорный) критерий "грамотности" программы, работающей с БД:
каждое действие пользователя, могущее изменить данные в БД, оформляется как отдельная форма с кнопками "Ок (Сохранить)" и "Отмена"
Это похоже на критерий грамотно решённой контрольной по математике: каждая задача оформлена на отдельном листочке.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628327
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Добавлю в тему:
- Не хранить тексты запросов в свойствах компонентов .... задаю их константами внутри методов, ....
Замечательный пример стратегии "в гамаке и стоя".
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628374
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Марксизм не догма, а руководство к действию.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628409
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerВасилий 2Добавлю в тему:
- Не хранить тексты запросов в свойствах компонентов .... задаю их константами внутри методов, ....
Замечательный пример стратегии "в гамаке и стоя".
Обоснуй
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628426
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хранить запросы к базе нужно в самой базе. Если нет механизма ХранимыхПроцедур, то выделите табличку для запросов.
Причина ? Для изменения запроса не придётся компилять программу и раздавать всем пользователям.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628448
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrХранить запросы к базе нужно в самой базе. Если нет механизма ХранимыхПроцедур, то выделите табличку для запросов.
Причина ? Для изменения запроса не придётся компилять программу и раздавать всем пользователям.

Для выполнения запроса тогда нужно будет сначала его достать из БД, потом выполнить и отдать пользователю результат - дополнительное действие.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628449
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,

Нечастый случай: Запрос меняется, а самой программе изменения не требуются...
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628455
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zinpub
Нечастый случай: Запрос меняется, а самой программе изменения не требуются...
Ну это как раз не проблема - есть у меня проект, где почти весь интерфейс пользователя (ввод параметров, отображение и т.п.) строится в динамике, а бизнес-логика живет в БД.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628464
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMasterzinpubНечастый случай: Запрос меняется, а самой программе изменения не требуются...
Ну это как раз не проблема - есть у меня проект, где почти весь интерфейс пользователя (ввод параметров, отображение и т.п.) строится в динамике, а бизнес-логика живет в БД.

Согласен - если выносится в БД и интерфейс и логика. А вот что-то одно...

Одна нога здесь, вторая в Чикаго. :-)
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628466
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Обоснуй
Подход подразумевает невозможность открыть датасет в дизайн-тайме. Следовательно, многие возможности отладки и настройки в дизайн-тайме тоже недоступны, плодится куча тупейшего кода, для отлова тривиальных ситуаций типа "поле на десять пикселей уже, чем значение" или там "опечатка в названии поля" требуется запуск программы, а для проверки исправления - ещё один запуск. Итого медленная неэффективная разработка и тупой код в результате.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628469
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zinpubDarkMasterпропущено...

Ну это как раз не проблема - есть у меня проект, где почти весь интерфейс пользователя (ввод параметров, отображение и т.п.) строится в динамике, а бизнес-логика живет в БД.

Согласен - если выносится в БД и интерфейс и логика. А вот что-то одно...

Одна нога здесь, вторая в Чикаго. :-)

Если в базе хранится и интерфейс и логика, то зачем тогда приложение ?
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628471
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schizinpubпропущено...


Согласен - если выносится в БД и интерфейс и логика. А вот что-то одно...

Одна нога здесь, вторая в Чикаго. :-)

Если в базе хранится и интерфейс и логика, то зачем тогда приложение ?
Чтобы с базой работать не на уровне sql запросов. :)
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628474
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiЕсли в базе хранится и интерфейс и логика, то зачем тогда приложение ?
Есть определённый набор методологий, которые я называю "однозвенное мышление". Они объединены тем, что практически вся логика проекта вынесена на какое-либо одно звено, а остальные выполняют чисто декоративные и технические функции. Как правило, так происходит потому, что человек, выполнявший роль архитектора, по своему профессиональному опыту и компетенциям тяготел именно к этому звену, ну а там... если в руках молоток, все проблемы выглядят похожими на гвозди.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628478
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi,

Не "хранится", а "строится" :) Разницу чувствуешь?-)
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628497
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterДля выполнения запроса тогда нужно будет сначала его достать из БД, потом выполнить и отдать пользователю результат - дополнительное действие.
Запросы читаются пакетом при старте программы. Это очень быстро.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628504
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBrDarkMasterДля выполнения запроса тогда нужно будет сначала его достать из БД, потом выполнить и отдать пользователю результат - дополнительное действие.
Запросы читаются пакетом при старте программы. Это очень быстро.

Потом запрос в БД меняется...
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628513
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос для бд - хранить в БД.
А запрос на запрос - тоже в БД. ;)

Рекурсия!
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628514
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

авторДля изменения запроса не придётся компилять программу и раздавать всем пользователям.

База, конечно же, чудесным образом поменяется :)
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628515
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatЗапрос для бд - хранить в БД.
А запрос на запрос - тоже в БД. ;)

Рекурсия!
Запрос на Запросы - это select * from ТаблицаЗапросов.

Что тут менять ???
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628521
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonБаза, конечно же, чудесным образом поменяется :)
Разве кто-то говорил что не нужно ничего менять ? Поменять запрос в базе и перекомпилять программу это несоизмеримо.
В первом случае для пользователя ничего не измениться, он даже этого не заметит, во втором случае неизбежное обновление программы у всех пользовалелей
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628572
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

авторВ первом случае для пользователя ничего не измениться

То есть база всё таки чудесным образом обновится? Ясно, понятно.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628665
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonТо есть база всё таки чудесным образом обновится? Ясно, понятно.
Обновится запрос в базе.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628684
Фотография roschinspb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2- Не хранить тексты запросов в свойствах компонентов - dfm файлы часто исключены из фильтра поиска, и в случае чего искать текст придется долго. Я в одном проекте (всё на ХП, запросов немного) выделил все тексты в секцию констант одного юнита, а в другом (клиентский софт для БД с кучей таблиц) задаю их константами внутри методов, но обязательно добавляю к имени суффикс SQL, чтобы облегчить поиск в случае чего.
Т.е. не любите Вы визуальное программирование. Ну, это дело вкуса. Я так наоборот считаю, что надо максимально использовать db-aware компоненты и DataSet`ы на DataModu`лях. Открывать тут холивары на тему лениво, но вот что бесспорно так это то, что по возможности надо придерживаться одного подхода. Потому, что когда исправляешь что-то в dfm-ке, а потом где-то глубоко в коде пара символов исправляется на нечто иное, то это печаль, особенно в большихстарыхчужих проектах.

Так же и про GOTO, выходом из цикла с большим уровнем вложенности или входом внутрь ассемблерной вставки... в нормально написанном коде просто не должно быть мест, где этот оператор может оказаться полезным.

В целом написано по реальным багам которые вызывали наибольшее чувство ненависти нравственное страдание при сравнительно простом описании.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628716
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrmakhaonТо есть база всё таки чудесным образом обновится? Ясно, понятно.
Обновится запрос в базе.

Чудесным образом?
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628729
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonDimaBrпропущено...

Обновится запрос в базе.

Чудесным образом? Тю, ну по репликации двусторонней придет, что не понятного :)
Другой вопрос, когда у запроса изменится список полей и параметров - что с этим делать необновленной программе, что выводить и главное - чем заполнять новые параметры, но это другой вопрос.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628734
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockДругой вопрос, когда у запроса изменится список полей и параметров - что с этим делать необновленной программе, что выводить и главное - чем заполнять новые параметры, но это другой вопрос.
Вот это уже следующий уровень абстракции.
Сначала запросы в базе (в большенства базах они там уже есть изначально в виде ХранимыхПроцедур)
Второй этап - отчёты в базе. Изменились поля запроса, изменили отчёт, а дабы он изменился у всех пользователей, то хранить не в файликах а в базе.
Следующий этап - формы в базу.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628739
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrСледующий этап - формы в базу.
Не-а, формы - в dll, а лишь потом - в базу ;)
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628742
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокНе-а, формы - в dll, а лишь потом - в базу ;)
ДЛЛ- это компиляция и обновления. Это ничем не отличается от EXE
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628751
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А потом приходит веб-программист и говорит что вы больные на голову.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628753
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrИзменились поля запроса, изменили отчёт, а дабы он изменился у всех пользователей, то хранить не в файликах а в базе.
Следующий этап - формы в базу.Основной вопрос остается открытым - чем заполнять новые параметры запросов?
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628756
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockDimaBrИзменились поля запроса, изменили отчёт, а дабы он изменился у всех пользователей, то хранить не в файликах а в базе.
Следующий этап - формы в базу.Основной вопрос остается открытым - чем заполнять новые параметры запросов?Предвосхищая ответ "значением контрола из формы в базе"...
Не бывает логики, в которой только макеты форм и запросы. Нужны таки какие-то вычисления, расчеты, нетривиальные фильтры и интерфейсы... Даже в 1С приходится код писать
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628757
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrДокНе-а, формы - в dll, а лишь потом - в базу ;)
ДЛЛ- это компиляция и обновления. Это ничем не отличается от EXEВ данном случае принципиальной разницы, кстати, может и не быть - бинарники репликацией на клиентов рассылать, или запросы. Или и запросы, и бинарники
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628758
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В правильной архитектуре, параметры заполнятся автоматически на основе контекста и имени параметров.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628763
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovВ правильной архитектуре, параметры заполнятся автоматически на основе контекста и имени параметров.Ага, вопрос, чем, если это какая-то новая сущность расчетная или получаемая с железа (тоже нового, которое старые бинарники еще не знают).
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628773
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockasviridenkovВ правильной архитектуре, параметры заполнятся автоматически на основе контекста и имени параметров.Ага, вопрос, чем, если это какая-то новая сущность расчетная или получаемая с железа (тоже нового, которое старые бинарники еще не знают).

Бинарники и не должны знать о новых сущностях. Должны быть настройки позволяющие добавить новые сущности и указать куда и под какими имена, в какие контексты, она должна попадать. А новые запросы соответственно возьмут параметры из этих контекстов.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628776
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovДолжны быть настройки позволяющие добавить новые сущности и указать куда и под какими имена, в какие контексты, она должна попадатьОбъясни, как можно с помощью настроек добавить сущность "новый драйвер кассового аппарата" (например).
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628780
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новая сущность - компиляция проекта (модуля). От этого никуда не деться.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628781
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockasviridenkovДолжны быть настройки позволяющие добавить новые сущности и указать куда и под какими имена, в какие контексты, она должна попадатьОбъясни, как можно с помощью настроек добавить сущность "новый драйвер кассового аппарата" (например).

По драйвером что имеется в виду? Системный драйвер, класс в приложении, еще что-то?
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628782
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovПо драйвером что имеется в виду? Системный драйвер, класс в приложении, еще что-то?Ппограмма, умеющая работать с железякой.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628783
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockasviridenkovПо драйвером что имеется в виду? Системный драйвер, класс в приложении, еще что-то?Ппограмма, умеющая работать с железякой.Лично у меня это - "класс в приложении" с прекрытыми виртуальными методами.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628784
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockYuRockпропущено...
Ппограмма, умеющая работать с железякой.Лично у меня это - "класс в приложении" с прекрытыми виртуальными методами.

В таком случае может сработать универсальный класс, в котором детали обмена с конкретной моделью задаются в виде конфигурации, скажем в XML. Ну, или, если разница слишком велика, в виде скриптов.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628785
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrНовая сущность - компиляция проекта (модуля). От этого никуда не деться.Да, а часто этот новый (измененный) модуль требует и измененных запросов. И/или наоборот - новые/измененные запросы требуют изменения модулей.
Всё не задекларируешь, я к этому веду.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628787
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovВ таком случае может сработать универсальный класс, в котором детали обмена с конкретной моделью задаются в виде конфигурацииДа нету конкретной модели. Есть новая модель, с новыми деталями, свойствами и поведениями. Нужен новый, только написанный бинарник (новый наследник в моем случае).
И вот эта новая модель требует изменить параметры. Методов класса. И запросов в базе. И добавления новых.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628874
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockDimaBrНовая сущность - компиляция проекта (модуля). От этого никуда не деться.Да, а часто этот новый (измененный) модуль требует и измененных запросов. И/или наоборот - новые/измененные запросы требуют изменения модулей.
Всё не задекларируешь, я к этому веду.

Ну одно дело, когда вы обновляете приложение на клиенте при смене кассового аппарата, и совсем другое - когда вы его обновляете из-за того, что в одном запросе запятую пропустили или новый параметр в фильтр добавили. ИМХО.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628905
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В любом случае это к теме топика не относится. Это методика разработки, а говнокодить можно и БатоноКидательстве
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628914
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovYuRockпропущено...
Лично у меня это - "класс в приложении" с прекрытыми виртуальными методами.

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

Опять универсальный решатель всего и вся ? C XML и блютусом ?
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628929
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте плагины и интерфейсы и проблемы расширяемости практически решены.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628930
Фотография roschinspb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокDimaBrСледующий этап - формы в базу.
Не-а, формы - в dll, а лишь потом - в базу ;) Не, сначала в OLE-объект

Товарищи, вроде серьезный вопрос поднят, не каждый поймет искрометное чувство юмора
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39628944
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
roschinspbДокпропущено...

Не-а, формы - в dll, а лишь потом - в базу ;) Не, сначала в OLE-объект

Товарищи, вроде серьезный вопрос поднят, не каждый поймет искрометное чувство юмора

И это слабенько...
Пыталась родиться идея - Хранить исходники(pas) в базе, а исполнять в paxScript'е...

Хорошо придушили вовремя.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39629021
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ziv-2014Используйте плагины и интерфейсы и проблемы расширяемости практически решены.
Да чё там практически - полностью. За исключением тех "редких" случаев, когда меняется интерфейс этих плагинов.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39629429
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zinpubПыталась родиться идея - Хранить исходники(pas) в базе, а исполнять в paxScript'е...

Зачем вообще исполнять на клиенте? Надо исполнять все на сервере, а клиенту кидать видео интерфейса )))) ну и мышку-клаву от него ловить и на сервер передавать.

softwarerВасилий 2Обоснуй
Подход подразумевает невозможность открыть датасет в дизайн-тайме. Следовательно, многие возможности отладки и настройки в дизайн-тайме тоже недоступны, плодится куча тупейшего кода, для отлова тривиальных ситуаций типа "поле на десять пикселей уже, чем значение" или там "опечатка в названии поля" требуется запуск программы, а для проверки исправления - ещё один запуск. Итого медленная неэффективная разработка и тупой код в результате.
Я тоже в юношестве таким баловался. Когда задолбался переключать DB.Connected, сохраняющийся в True после развлечений в дизайнере и пытающийся восстановиться при запуске программы у клиента, как-то остыл. К тому же не все запросы отображаются визуально, бывает и внутренняя кухня, которую надо генерить динамически. У меня в проекте штук двадцать разных внутренних запросов - что же, на каждый добавлять TQuery? А если необходимо юзать несколько разных db-логинов (к примеру, интерфейс у них различается), то дизайнер тоже в пролете. Опять же при изменении схемы БД я быстро найду старые запросы поиском по проекту, а тебе придется ворошить компоненты.
В общем, все зависит от структуры и задач программы.
roschinspbВасилий 2- Не хранить тексты запросов в свойствах компонентов - dfm файлы часто исключены из фильтра поиска, и в случае чего искать текст придется долго. Я в одном проекте (всё на ХП, запросов немного) выделил все тексты в секцию констант одного юнита, а в другом (клиентский софт для БД с кучей таблиц) задаю их константами внутри методов, но обязательно добавляю к имени суффикс SQL, чтобы облегчить поиск в случае чего.
Т.е. не любите Вы визуальное программирование. Ну, это дело вкуса. Я так наоборот считаю, что надо максимально использовать db-aware компоненты и DataSet`ы на DataModu`лях. Открывать тут холивары на тему лениво, но вот что бесспорно так это то, что по возможности надо придерживаться одного подхода. Потому, что когда исправляешь что-то в dfm-ке, а потом где-то глубоко в коде пара символов исправляется на нечто иное, то это печаль, особенно в большихстарыхчужих проектах.
Я к нему спокойно отношусь. Кидать контролы удобно, но вот копошиться с пикселами, выравниванием и прочим меня задалбывает.
Насчет свойств компонентов как раз тоже из опыта. Неоднократно бывало, что по полчаса ищу некоторую опцию, которую нужно добавить в другой компонент или наоборот изъять. Особенно весело, когда это нечто монструозное типа грида или virtualtreeview.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39629443
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Я тоже в юношестве таким баловался. Когда задолбался переключать DB.Connected, сохраняющийся в True после развлечений в дизайнере и пытающийся восстановиться при запуске программы у клиента, как-то остыл.
Угу. Это как раз иллюстрирует разницу в наших подходах. Ты идёшь наиболее очевидным путём: попробовал, увидел проблему, решил, что надо переключать. Переключал, переключал, переключал, переключал, переключал, переключал, переключал, переключал, переключал, переключал... задолбался и ушёл целиком в рантайм. Я же, попробовав и увидев проблему, чуть-чуть пораскинул мозгами и сделал так, чтобы дизайн-таймовый DB.Connected не мешал. Он у меня годами остаётся в true, просто не пытается восстанавливаться в ран-тайме, вот и все :)

Василий 2К тому же не все запросы отображаются визуально, бывает и внутренняя кухня, которую надо генерить динамически.
Бывает. И мой подход никак не мешает делать это там, где оно оправданно. Твой же подход означает, что динамика используется даже там, где она существенно хуже, этим и вызвана моя реплика.

Василий 2У меня в проекте штук двадцать разных внутренних запросов - что же, на каждый добавлять TQuery?
Знаешь, проект на двадцать запросов, в общем, может быть написан вообще как угодно, это совершенно неважно для всех, кроме разве что автора. Но сама по себе постановка вопроса катастрофически нелепа. За экономию чего именно ты воюешь? Ну вот добавишь ты двадцать TQuery - назови хоть один измеримый показатель, которому от этого станет заметно хуже. А то, что у тебя в проекте несколько форм, тебя не смущает? Не возникает желания обойтись одной, подменяя содержимое?

Василий 2А если необходимо юзать несколько разных db-логинов (к примеру, интерфейс у них различается), то дизайнер тоже в пролете.
Не понимаю, в чём ты видишь проблему. Это вообще перпендикулярные вещи. Разумеется, дизайнер ускоряет работу в этом режиме так же, как и в любом другом.

Василий 2Опять же при изменении схемы БД я быстро найду старые запросы поиском по проекту, а тебе придется ворошить компоненты.
Знаешь, даже смешно. Для тебя поиск по маске *.pas чем-то принципиально отличается от поиска по маске *.dfm?

Василий 2В общем, все зависит от структуры и задач программы.
Теоретически - да. Практически чаще всего зависит от программиста, у которого в руках молоток и который поэтому решил, что все задачи похожи на гвозди.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39629483
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Зачем вообще исполнять на клиенте? Надо исполнять все на сервере, а клиенту кидать видео интерфейса )))) ну и мышку-клаву от него ловить и на сервер передавать.
Ты не поверишь, так и работаем. Это называется Терминал !!!
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39629492
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrВасилий 2Зачем вообще исполнять на клиенте? Надо исполнять все на сервере, а клиенту кидать видео интерфейса )))) ну и мышку-клаву от него ловить и на сервер передавать.
Ты не поверишь, так и работаем. Это называется Терминал !!!Браузер, в принципе, для этого предназначался. Пока это понятие скриптами не завоняли.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39629523
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К советам стоит скептически относиться и не воспринимать всё буквально. Ситуации бывают разные, причем настолько, что превращают вроде бы полезный совет во вредный. Особенно это касается таких вещей типа где что хранить и какую архитектуру выбрать (на sql.ru, вроде, даже когда-то мемы ходили про очередные холивары про трехзвенки).
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39629858
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerУгу. Это как раз иллюстрирует разницу в наших подходах. Ты идёшь наиболее очевидным путём: попробовал, увидел проблему, решил, что надо переключать. Переключал, переключал, переключал, переключал, переключал, переключал, переключал, переключал, переключал, переключал... задолбался и ушёл целиком в рантайм. Я же, попробовав и увидев проблему, чуть-чуть пораскинул мозгами и сделал так, чтобы дизайн-таймовый DB.Connected не мешал. Он у меня годами остаётся в true, просто не пытается восстанавливаться в ран-тайме, вот и все :)
Я тоже сделал, но это было мне неудобно. Сейчас я сделал так, как удобно.
На самом деле я бы мог сейчас задвинуть про модели и контроллеры, про отделение гуя от бизнес-логики и прочее, но не вижу смысла. Данный аспект не аксиома, пусть каждый делает так, как ему привычно и удобно. Ну а лично тебе желаю делать поменьше категоричных выводов, ибо когда они уходят в молоко, ты выглядишь очень бледно.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39629932
Фотография roschinspb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Архитектурные предпочтения несколько из другой темы.
во-первых изговнокодить можно любую архитектуру, т.е. это более общая тема.
во-вторых спорить о предпочтительности того, или иного подхода можно только применительно к конкретной задаче. Для одного случая уместно одно, для другого случая уместно другое.

И кстати говоря, для больших коммерческих проектов хорошо бы по-реже упоминать местоимение Я и по чаще использовать местоимение ОНИ (кто будет править твой код).
Приложение пишут несколько лет, несколько людей (иных уже нет, а те далече). У каждого свой уровень познаний, свои предпочтения, свои девиации сознания наконец. Кто-то скажет "нафига мне db-компоненты, я сам умею добавлять итемы в комбобоксы", кто-то скажет "да я привык использовать отличную библиотеку XXX, 20 лет пользуюсь ни разу не подводила", кто-то начнет всё переписывать и уйдет в запой... в итоге каждый оставляет свой неповторимый след в истории. Так что лучше уж использовать стандартные подходы, ограниченный набор библиотек пусть он даже в каком-то частном случае хуже чем можно было бы написать самому, чтобы твои последователи меньше тратили времени и сил на осознание твоей гениальной задумки, а больше уделяли времени на исправление логики в соответствии с новыми задачами.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630011
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roschinspbспорить о предпочтительности того, или иного подхода можно только применительно к конкретной задаче. Для одного случая уместно одно, для другого случая уместно другое.
Именно! У меня коллега вообще отказался от сторонних компонент, потому что не хочет морочиться с установкой :). Но для его целей хватает. Мне же, например, без VTV было бы очень тоскливо.
roschinspbИ кстати говоря, для больших коммерческих проектов хорошо бы по-реже упоминать местоимение Я и по чаще использовать местоимение ОНИ (кто будет править твой код).
Приложение пишут несколько лет, несколько людей (иных уже нет, а те далече). У каждого свой уровень познаний, свои предпочтения, свои девиации сознания наконец. Кто-то скажет "нафига мне db-компоненты, я сам умею добавлять итемы в комбобоксы", кто-то скажет "да я привык использовать отличную библиотеку XXX, 20 лет пользуюсь ни разу не подводила", кто-то начнет всё переписывать и уйдет в запой... в итоге каждый оставляет свой неповторимый след в истории. Так что лучше уж использовать стандартные подходы, ограниченный набор библиотек пусть он даже в каком-то частном случае хуже чем можно было бы написать самому, чтобы твои последователи меньше тратили времени и сил на осознание твоей гениальной задумки, а больше уделяли времени на исправление логики в соответствии с новыми задачами.
Большие проекты, как правило, не начинаются в одиночку. И кодинг стиль у компании должен быть устоявшийся и закрепленный в мануалах, также как и любое привлечение сторонней библиотеки не может быть решением рандомного джуниора Пети. Ну а если речь о проектах одиночек, то нет смысла ужиматься - либо он так и останется собственным проектом, либо перейдет в категорию крупных и по-любому придется все переписывать и подгонять.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630034
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Большие проекты, как правило, не начинаются в одиночку. И кодинг стиль у компании должен быть устоявшийся и закрепленный
Лично видел исходный код программы, которая под дулом пистолета навязывалась бизнесу по директиве сверху - я плакаль :( В коде коментарии типа "что делает этот кусок кода мы не знаем, но лучше не трогать" - в порядке вещей. А ты тут про крупные проекты :)
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630451
Фотография roschinspb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2... кодинг стиль у компании должен быть устоявшийся и закрепленный в мануалах, также как... Да, конечно, конечно, все люди должны быть здоровыми и богатыми. Только так уж вышло, что во всех крупных компаниях где я работал везде картина примерно одинаковая (зверинец компонентов, подходов, стилей форматирования). И почти все крупные проекты начинались либо одиночкой, либо небольшой группой единомышленников. Полагаю, что это скорее правило нежели исключение.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630550
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zinpubroschinspbпропущено...
Не, сначала в OLE-объект

Товарищи, вроде серьезный вопрос поднят, не каждый поймет искрометное чувство юмора

И это слабенько...
Пыталась родиться идея - Хранить исходники(pas) в базе, а исполнять в paxScript'е...

Хорошо придушили вовремя.

У меня на эту идею выброшен был целый год. :(
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630551
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Keep It Simple, Stupid.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630565
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks zinpub
Пыталась родиться идея - Хранить исходники(pas) в базе, а исполнять в paxScript'е...

Хорошо придушили вовремя.

У меня на эту идею выброшен был целый год. :(
У нас тоже был потрачен ГОД. И не в пустую, теперь Delphi открываем по праздникам. И обновление раз в пол года, хотя правки почти ежедневно.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630617
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrfraksУ меня на эту идею выброшен был целый год. :(
У нас тоже был потрачен ГОД. И не в пустую, теперь Delphi открываем по праздникам. И обновление раз в пол года, хотя правки почти ежедневно.

Ну, я как-то пришел к мысли что странно переписывать Delphi заново, причем на Delphi же, причем получив из компилятора интерпретатор. Какие-то наработки от всего этого конечно остались, но к интерпретатору Delphi не имеет никакого отношения.

Обновление у меня бывает по нескольку раз на дню.
Полученный exe загружаю в базу.
Приложение при старте проверяет есть ли в базе версия новее чем оно само, если есть - выгружает и самообновляется.

exe размером в 10мб не составляет проблем.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630619
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksexe размером в 10мб не составляет проблем.

У каждого пользователя (компьютера) своя версия программы или это из тех "замечательных" приложений, которые запускаются только под elevated-привилегиями? Или всё как у взрослых и установлена своя системная служба-обновлятор? :)
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630646
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpИли всё как у взрослых и установлена своя системная служба-обновлятор? :)
Ох уж эти "взрослые" со своими службами-обновляторами... придушил бы. Каждая сволочь норовит в сервисы пролезть.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630695
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2alekcvpИли всё как у взрослых и установлена своя системная служба-обновлятор? :)
Ох уж эти "взрослые" со своими службами-обновляторами... придушил бы. Каждая сволочь норовит в сервисы пролезть.

Вставь обновлятор в клиент и не парься.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630723
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpfraksexe размером в 10мб не составляет проблем.

У каждого пользователя (компьютера) своя версия программы или это из тех "замечательных" приложений, которые запускаются только под elevated-привилегиями? Или всё как у взрослых и установлена своя системная служба-обновлятор? :)

Это замечательное приложение для внутрикорпоративного использования.
Вне фирмы не распространяется.
Инсталлятора не имеет (за отсутствием надобности).

Никакие службы не использует и не ставит.
Нужен только клиент Firebird.

Привилегии должны быть достаточными что бы заместить собственный exe.
Программа-обновлятор лежит в этой же папке.
Основная программа, когда определяет что ей нужно обновиться, запускает обновлятор (если он есть) со словами - обнови вот меня, вот оттуда. И закрывается. Обновлятор скачивает, замещает старый exe новым, запускает обновленную программу, сам завершается.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630730
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpfraksexe размером в 10мб не составляет проблем.

У каждого пользователя (компьютера) своя версия программы или это из тех "замечательных" приложений, которые запускаются только под elevated-привилегиями? Или всё как у взрослых и установлена своя системная служба-обновлятор? :)

И еще забыл. Новый exe кладется в базу. Соответственно, какие программы с этой базой работают, такие и обновляются.
Если проходит такое обновление структуры БД что требует однозначного обновления всех клиентов - то клиентов завершаем принудительно (если на слова не реагируют). Если такой необходимости нет (в 50-90% случаев) - просто сообщаю тому кто заинтересован в новой версии что нужно перезапуститься. Остальные самообновляются утром, при очередном запуске.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630732
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программа обновляется из базы - это само собой разумеющееся, но ради мелких правок (там формочку новую слепить, отчётик подрисовать, даже орфографию подправить) нет смысла перекомпилировать. Плюс, я правку могу сделать с любого рабочего места, а компиляция - увы
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630744
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrПрограмма обновляется из базы - это само собой разумеющееся, но ради мелких правок (там формочку новую слепить, отчётик подрисовать, даже орфографию подправить) нет смысла перекомпилировать. Плюс, я правку могу сделать с любого рабочего места, а компиляция - увы

Перекомпиляция в Delphi занимает секунды.
Загрузка новой версии в БД - аналогично.

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

Ноут - это для работы в отпуске :)
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630765
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksПравка с любого рабочего места - вероятно тут что-то не то в консерватории, если такое требуется и является краеугольны камнем.
Значит у вас работа сидячая и мало далекоудалённых объектов, плюс ноутбуки свободные в наличии.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630769
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrЗначит у вас работа сидячая и мало далекоудалённых объектов, плюс ноутбуки свободные в наличии.
Хм. То есть, архитектура "как не говнокодить" плавно приводит к необходимости высунув язык носиться по удалённым объектам и что-то там править на коленке?
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630777
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks...Перекомпиляция в Delphi занимает...

Ты просто одного клиента обслуживаешь.
А вот представь себе, что их десятки тысяч, локальные сети не связаны между собой, расположены от Калининграда до Владивостока. Кто-то использует стандартные конфигурации/пакеты отчетов, а кто-то желает "с перламутровыми пуговицами".
"Компиляция" - только с выпуском очередного релиза (или критического патча). После "компиляции" идет процесс тестирования, в совокупности со всеми программными компонентами; с поэтапным внедрением (сначала у небольшой группы клиентов, потом - группами по сходному функционалу и т.п.), иначе, если ёбнется ВСЁ СРАЗУ - никаких ресурсов на восстановление не хватит.
Правка скриптов (или заказных плагинов в тяжелых случаях) - относительно безболезненный способ кастомизации.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630779
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer...высунув язык носиться по удалённым объектам и что-то там править на коленке?
Зависит от толщины пуза клиента, не?
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630787
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
Перекомпиляция в Delphi занимает секунды.
Загрузка новой версии в БД - аналогично.



Дело не во времени, и не в том что дизайнер и компилятор дельфи лучше любых самописных. Это все кажется важным только на первый взгляд. Самое сложное в построении сложных ИС, это правильно разделить их на нужное число архитектурных слоев, и сделать так чтобы у этих слоев зависимость была минимальная и однонаправленная. Оставаясь в рамках только дельфи, в теории это осуществить можно, но на практике не получается почти никогда. Соблазн "малой кровью" решить какие-то конкретные затыки приводит к тому что возникает куча перекрестных связей, и система превращается в неуправляемого монстра, в котором даже смена минорной версии дельфи это огромная проблема. В то время, как в правильно построенной системе, даже полностью сменить один грид на другой (например Cx на Eh) не составляет большой сложности.
Собственно хранение форм в БД и вынос части логики в скрипты и позволяет создать еще один изолированный слой, разделив разработку, поддержку и.т.д.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630789
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>fraks, сегодня, 12:10 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1286601&msg=21342065][21342065]

>...Новый exe кладется в базу...
Понимаю, что влезаю в чужой монастырь.
Но задача стоит похожая - работа приложений в локальной сети и их централизованное обновление. Здесь попытался представить прототип, реализующий решение.
Приложения не инсталлируются.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630794
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДА вот представь себе, что их десятки тысяч, локальные сети не связаны между собой, расположены от Калининграда до Владивостока. Кто-то использует стандартные конфигурации/пакеты отчетов, а кто-то желает "с перламутровыми пуговицами".
"Компиляция" - только с выпуском очередного релиза (или критического патча). После "компиляции" идет процесс тестирования, в совокупности со всеми программными компонентами; с поэтапным внедрением (сначала у небольшой группы клиентов, потом - группами по сходному функционалу и т.п.), иначе, если ёбнется ВСЁ СРАЗУ - никаких ресурсов на восстановление не хватит.
Правка скриптов (или заказных плагинов в тяжелых случаях) - относительно безболезненный способ кастомизации.
Скрипты тоже надо тестировать, а если они хранятся в базе, есть большой соблазн пихнуть исправления на живую. Но в целом, если изменения бинарника проходят суровый цикл внедрения, выделение более динамично изменяемого слоя оправдано
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630801
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДsoftwarer...высунув язык носиться по удалённым объектам и что-то там править на коленке?
Зависит от толщины пуза клиента, не?
Однажды, лет пятнадцать назад, когда я впервые напоролся на привычку клиентов из Новосибирска, придя с утра на рабочее место, звонить с требованием немедленного исправления обнаруженных проблем в семь тридцать по местному - в моём лексиконе появилась поговорка "Программист, который хорошо поработал днём - спокойно спит по ночам". И от толщины пуза клиента это ну совершенно не зависит.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630812
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovСоблазн "малой кровью" решить какие-то конкретные затыки приводит к тому что возникает куча перекрестных связей, и система превращается в неуправляемого монстра
Есть такая проблема. И лично я предпочёл решать её разбиением приложения на плагины-дллки. Это практически убивает возможность внедрения непредусмотренных левых связей, но сохраняет плюсы визуальной разработки. Само собой, при этом также почти автоматически решаются вопросы кастомизации под клиента, под роли и права пользователей итп.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630819
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerasviridenkovСоблазн "малой кровью" решить какие-то конкретные затыки приводит к тому что возникает куча перекрестных связей, и система превращается в неуправляемого монстра
Есть такая проблема. И лично я предпочёл решать её разбиением приложения на плагины-дллки. Это практически убивает возможность внедрения непредусмотренных левых связей, но сохраняет плюсы визуальной разработки. Само собой, при этом также почти автоматически решаются вопросы кастомизации под клиента, под роли и права пользователей итп.

Тоже вариант, я же говорю что формы и скрипты в БД это только один из способов.
Но у этого способа есть ряд неочевидных на первый взгляд преимуществ, как например, прозрачный перенос выполнения части кода на сервер, возможность упрощенного перехода на web интерфейс, и.т.д.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39630878
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovНо у этого способа есть ряд неочевидных на первый взгляд преимуществ
Есть. Как есть и ряд более очевидных недостатков. Поэтому, выбирая архитектурное решение, имхо, следует тщательно оценить позиционирование и будущее развитие проекта. Если это 1С - разработка платформы полностью оправданна, если это что-либо в десять-сто-тысячу раз меньшее - соответственно...
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39631158
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrfraksПравка с любого рабочего места - вероятно тут что-то не то в консерватории, если такое требуется и является краеугольны камнем.
Значит у вас работа сидячая и мало далекоудалённых объектов, плюс ноутбуки свободные в наличии.

Работа да, в основном сидячая.
Ноутбук личный.
Нахожусь в Новосибирске.
Кемерово, Красноярск, Братск, Иркутск - это достаточно удаленные объекты?

По поводу "быстренько допилить каждому клиенту формочку"... Было раньше такое, запарился для каждого филиала формировать индивидуальный пакет обновленных отчетов.В принудительном порядке запретил любой индивидуализм. У всех одна программа, полностью одинаковые отчеты и шаблоны. Если нужно кому-то что-то - добавляется только централизованно и спускается всем. Если в конкретном месте это не нужно - делается какая-то опция что бы настройками можно было убрать лишнее.

Таким образом имеем единую кодовую базу и тестировать нужно только ее одну а не под каждого кролика.
Экономия времени и мозгов, которых с возрастом больше не становится.

Все изменения тестирую сначала сам.
Если есть сомнения что протестировал корректно - сначала ставлю этот exe только одному оператору, который эти изменения запросил. В базу этот exe не гружу что бы по остальным рабочим местам не разлетелось. Если в течение дня жалоб не поступило - загружаю в базу.

Если обновление сложное и есть некоторый риск при внедрении - запускаю в ту базу у которых клиентов поменьше и находится поближе. Протестировалось - внедряю дальше.

Исправления типа опечатки или что-то очевидное и несложное можно заливать сразу всем.

Главное - перед отпуском минимум с неделю ничего нового не внедрять :)
Не то что бы бывали случаи, но как-то ссыкотно бывает.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39631161
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, одна из причин отказа от скриптинга - это то что скрипты не проверяются. Их нужно прогнать по все веткам что бы найти опечатки. Компилятор Delphi большинство таких нескладух находит на этапе компиляции.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39631170
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksКстати, одна из причин отказа от скриптинга - это то что скрипты не проверяются. Их нужно прогнать по все веткам что бы найти опечатки. Компилятор Delphi большинство таких нескладух находит на этапе компиляции.
Когда я впервые смог внедрить в проекте масштабное автотестирование, я завёл оказавшуюся очень полезной практику: любые сообщения об ошибках принимал только в виде воспроизводящего тестового скрипта. Что находили тестировщики - они и писали. Что находил саппорт - писали с помощью тестировщиков. Что находили пользователи - теоретически так же, через саппорт и тестировщиков, практически же этого уже почти не случалось.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39631254
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksУ меня на эту идею выброшен был целый годЗа год - там, наверное, очень наворочено... На базе EControl ушел месяц, ещё около того - на простенький менеджер репозитория с поддержкой версий и выпиливание собственно дизайнера форм "обратно в Delphi" (в "самописке" остался только отладчик), чтобы можно было отлаживать и там, и компилировать тот же код и в обычные бинарники, по необходимости. В работу не пошло, т.к. не хотелось бодаться с возможными breaking changes, в пакете DevExpress, в основном, пока он поддерживался для семерки, ну и PaxScript хотелось понять получше, прежде чем "ура-работает-в-продакшн" или приобрести с поддержкой :-) А вот как сейчас его добыть...
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39631257
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1tusfraksУ меня на эту идею выброшен был целый годЗа год - там, наверное, очень наворочено...

Нет, не наворочено.
За год дошли до зачатков уровня Delphi1, не более.
Может конечно есть в природе крутые программеры которые выдают результат намного быстрее, но это не наш случай.
Под это дело был куплен FastScript.
бОльшая часть времени ушла на воспроизведение форм и контролов из скрипта, обвязка свойств и событий.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39631258
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksПод это дело был куплен FastScript. бОльшая часть времени ушла на воспроизведение форм и контролов из скрипта, обвязка свойств и событий.
Ну это вы как-то слишком. Я использовал FastScript, и точно помню, что на "воспроизведение форм, обвязку свойств и событий" вместе с экспериментами ушло немного времени. Сколько точно, не скажу - поскольку оно было размазано по проекту - но суммарно порядка недель. Единственно, я не стал воспроизводить всякие экзотические и практически неиспользуемые обработчики событий, сосредоточился только на типовых (условно, одна только реализация TNotifyEvent накрыла 90% требуемого функционала, а всякие OnBeginDrag итп были оставлены до того времени, когда потребуются в проекте). Честно говоря, я даже не представляю, что надо делать, чтобы потратить на это год... ну разве что делать обвязку для каждого свойства и каждого события отдельно.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39631588
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как только народ не извращается вместо того чтобы сделать веб приложение.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39631610
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatКак только народ не извращается вместо того чтобы сделать веб приложение.
В кругах, которым я близок, на это принято отвечать "Мы, конечно, панки, но мы же не юродивые!"
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39631659
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39631802
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatКак только народ не извращается вместо того чтобы сделать веб приложение.

точно, F5 и вот тебе актуальная версия приложения... и никаких проблем с говнокодом )
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39631853
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев ЕвгенийrgreatКак только народ не извращается вместо того чтобы сделать веб приложение.

точно, F5 и вот тебе актуальная версия приложения... и никаких проблем с говнокодом )

У вебприложений - свой, отдельный говнокод
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39631901
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Было бы интересно посмотреть на пример самописного бизнес-скрипта, а так де на то, как он отлаживается и синтаксически проверяется в процессе.. DimaBr, Softwarer -- можно ли примеры?
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39632086
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скрипт ничем не отличается от кода, построен то на Фасте
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39632146
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterДегтярев Евгенийпропущено...


точно, F5 и вот тебе актуальная версия приложения... и никаких проблем с говнокодом )

У вебприложений - свой, отдельный говнокод
да нее, там же все стильно модно молодежно )
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39632275
Фотография AndyMandy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧингисДД!. хотелось бы писать грамотно программу с бд, посмотреть пример и где скачать небольшую
Насчет скачать и примеры не подскажу, но можно начать с книги "чистая архитектура" Роберта Мартин, недавно свежий русский перевод вышел.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39632292
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDiDimaBr, Softwarer -- можно ли примеры?
От меня - нет. Тот мой проект строился на том, чтобы привести в сколько-нибудь приемлемый вид исполнение той груды бизнес-скриптов, которые были наструганы товарищами за предыдущие годы на предыдущем движке. Скрипты совершенно ужасные, как с точки зрения проектирования, так и реализации, и выкладывать их как нечто связанное с именем "Softwarer" я просто не буду. Собственно, тот проект ещё больше убедил меня в том, что скриптовые решения на недостаточно серьёзной платформе - ламерский выбор.
...
Рейтинг: 0 / 0
Грамотно написать программу а не говнокод
    #39632348
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хоть бинарь, хоть в базе скрипты храни (+ проблему репликации надо как-то решать), а всё одно - ошибки никуда не денутся. Все ищут серебряную пулю, а её нет, увы.
...
Рейтинг: 0 / 0
129 сообщений из 129, показаны все 6 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Грамотно написать программу а не говнокод
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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