|
|
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
ДД!. хотелось бы писать грамотно программу с бд, посмотреть пример и где скачать небольшую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 00:22 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Если за 10 лет грамотно не написалось, то пример вряд ли поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 00:35 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
ЧингисДД!. хотелось бы писать грамотно программу с бд, посмотреть пример и где скачать небольшую 1. Пиши грамотно программку с БД. 2. Смотри пример. 3. Скачай небольшую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 00:47 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
чччД, где скачать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 01:19 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 03:32 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 04:17 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
ЧингисДД!. хотелось бы писать грамотно программу с бд, посмотреть пример и где скачать небольшую Любите папку Demos, источник знаний. Там как раз примеры, в том числе и с базой данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 10:38 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
schi, в демках Дельфи классический говнокод. ... Мне книжка попадалась, там процесс говнокодинга от диаграмм в ER-win до инсталлятора был, с вариациями. Тоже не идеал, но хоть что-то. Сейчас поищу на полках, потом ссылку дам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 11:29 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Вот: 20674516 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 11:41 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 11:57 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
GallemarчччДВот: 20674516 А как же Фаронов? Фараонов не писал о процессе разработки, он про типы данных, циклы да как батон1 на форму кидать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 12:23 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
чччДв демках Дельфи классический говнокодВообще странный топик. Говнокод - это мэйнстрим в последние 20 лет. И прогрессирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 12:57 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
YuRockчччДв демках Дельфи классический говнокодВообще странный топик. Говнокод - это мэйнстрим в последние 20 лет. И прогрессирует. Странный вывод про 20 лет... Человек в принципе всё делает плохо. От "совсем плохо" (-2), до "сойдет" (0). И эту шкалу просто разметили (сместили) до от -1 до +1 для внутреннего спокойствия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 13:00 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
wadmanСтранный вывод про 20 лет... Человек в принципе всё делает плохо. От "совсем плохо" (-2), до "сойдет" (0). Да, но до определенного времени, пока компьютеры были сравнительно слабы, это лишь частично касалось программирования. А вот когда память начала на сотни мегабайт, гигабайты считаться - понеслось под лозунгом "сейчас это не размер". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 13:18 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
YuRockwadmanСтранный вывод про 20 лет... Человек в принципе всё делает плохо. От "совсем плохо" (-2), до "сойдет" (0). Да, но до определенного времени, пока компьютеры были сравнительно слабы, это лишь частично касалось программирования. А вот когда память начала на сотни мегабайт, гигабайты считаться - понеслось под лозунгом "сейчас это не размер". 640 килобайт хватит всем (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 15:08 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
ЧингисДД!. хотелось бы писать грамотно программу с бд, посмотреть пример и где скачать небольшуюВот тут есть глава с примером приложения с БД - с разбором как чего и почему. Не знаю, насколько он хорош, давно читал, сейчас чуть глянул, но книги а целом, оба тома, хорошая и авторы известные. https://www.for-stydents.ru/informatika/delphi/uchebniki/delphi-5-rukovodstvo-razrabotchika-tom-2-razrabotka-komponentov-i-rabota-s-bazami-dannyh.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 15:17 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
defecator640 килобайт хватит всем (с) Так ведь и хватало же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 15:40 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
YuRock, но не долго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 20:11 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
makhaonYuRock, но не долго.Ну, относительно. Десятилетиями хватало, и меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 20:37 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
YuRock, XT, насколько я помню, ну может лет 10 +- в ходу были: Выпущен 8 марта 1983 Выпускался по апрель 1987 286 уже обычно 1 мб и больше было. Хотя за весь мир не скажу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 23:46 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
ЧингисДД!. хотелось бы писать грамотно программу с бд, посмотреть пример и где скачать небольшую RAD Studio Delphi - это в первую очередь RAD (от англ. rapid application development — быстрая разработка приложений) — концепция создания средств разработки программных продуктов, уделяющая особое внимание быстроте и удобству программирования, созданию технологического процесса, позволяющего программисту максимально быстро создавать компьютерные программы. Быстро <> грамотно. Хотите грамотно но на Delphi - отказываетесь от невизуальных designtime компонентов. dfm используете только для построения UI/UX. Вся логика на сервисах работающих по контракту. Все нужные компоненты если таковые нужны - в runtime. Ах, да и свято следуете SOLID, ну и к сожалению в Delphi с буквой D не очень удобно работать.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2018, 00:26 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
X-CiteХотите грамотно но на Delphi - отказываетесь от невизуальных designtime компонентов. dfm используете только для построения UI/UX. Вся логика на сервисах работающих по контракту. Все нужные компоненты если таковые нужны - в runtime. Ах, да и свято следуете SOLID, ну и к сожалению в Delphi с буквой D не очень удобно работать.... Потом считаете во сколько вам обойдется разработка и поддержка такого монстра и делаете все как обычно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2018, 01:20 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
X-Cite, какие еще сервисы. В программе должны быть объекты Button1, Edit1 и DBGrid1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2018, 01:49 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
ЧингисДД!. хотелось бы писать грамотно программу с бд, посмотреть пример и где скачать небольшую может блог разработчика почитать? http://www.gunsmoker.ru/ г-код == неудачное архитектурное или программно-техническое решение - на маленькой программе не виден, не видно преимуществ от ==правильных== подходов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2018, 10:03 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
s62ЧингисДД!. хотелось бы писать грамотно программу с бд, посмотреть пример и где скачать небольшуюВот тут есть глава с примером приложения с БД - с разбором как чего и почему. Не знаю, насколько он хорош, давно читал, сейчас чуть глянул, но книги а целом, оба тома, хорошая и авторы известные. https://www.for-stydents.ru/informatika/delphi/uchebniki/delphi-5-rukovodstvo-razrabotchika-tom-2-razrabotka-komponentov-i-rabota-s-bazami-dannyh.html о, первая и любимая книжка по делфям. как сейчас помню (((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2018, 10:05 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
На всякий случай: есть такой (возможно, спорный) критерий "грамотности" программы, работающей с БД: каждое действие пользователя, могущее изменить данные в БД, оформляется как отдельная форма с кнопками "Ок (Сохранить)" и "Отмена" При этом "единицей" редактируемых данных является "бизнес-сущность" (как правило, отдельный класс, имеющий методы "загрузить из БД по Id" и "сохранить в БД"), которому в БД может соответствовать что-то большее, чем одна записи в одной таблице (например, бизнес-сущность "Счет" или "Накладная" может состоять из 1 записи в таблицах счетов или накладных плюс несколько записей в таблицах строк счетов или строк накладных, т.е. пара таблиц Master/Detail со связью Foreign Key -> Primary Key) То есть, вся эта бизнес-сущность в процессе её редактирования 1) загружается из БД 2) меняется пользователем и 3) сохраняется, при этом доступ к этой же самой сущности других пользователей должен либо а) блокироваться по пессимистическому принципу, то есть второму пользователю, попытавшемуся открыть форму её редактирования, выдается сообщение "эта бизнес-сущность уже редактируется пользователем 1!", либо б) по оптимистическому принципу - открыть и редактировать сущность смогут несколько пользователей сразу, но во время попытки сохранения любым из пользователей отредактированной им сущности должна происходить проверка на совпадение текущего состояния сущности в БД и того состояния, в котором сущность была считана из БД данным пользователем и в случае несовпадения выдается сообщение типа "эту сущность уже отредактировал и сохранил другой пользователь!" (и тут второму пользователю придется либо отменить сделанные им изменения и перечитать бизнес-объект снова, либо перезаписать измененный первым пользователем бизнес-объект, проигнорировав внесенные им изменения. Этот выбор может второму пользователю и не даваться - в зависимости от его прав - то есть может действовать только вариант "всё отменить и перечитать бизнес-сущность") Простая и легко реализуемая альтернатива этому варианту - нет никаких кнопок "Сохранить/Отменить" и даже нет отдельных форм для редактирования бизнес-сущностей, а момент сохранения сделанных пользователем изменений в БД определяют сами элементы пользовательского интерфейса (controls, data-bounded). Можно ли им эту ответственную задачу поручить - решаете вы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2018, 19:16 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Чингис, Просмотри темы по DDD (Domain Driven Design), паттерны (например Repository). Рекомендую так же статьи Nick Hodges для общего развития. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2018, 07:35 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Вот, еще из личного Как нельзя и как можно! 0. Нельзя черпать вдохновение на сайте http://govnokod.ru/pascal, но можно и нужно задуматься о своем месте в мироздании. Возможно в качестве дворника, или кондуктора Вы принесете больше пользы человечеству. 1. Не следует приступать к работе в бессознательном состоянии когда ваш мозг не может совершать элементарную мыслительную деятельность, лучше лечь и поспать еще. Вот характерный пример: Код: pascal 1. 2. 3. 4. 5. 6. Не нужно чистить только что созданный объект, а вот разрушать созданный локальный объект следует, при чем обязательно с использованием try finally. Помните сон разума рождает чудовищ. 2. Не забывайте, что парные процедуры BeginUpdate, EndUpdate, DisableControls, EnableControls и т. п. требуют try finally точно так же как и Create, Free Код: pascal 1. 2. 3. 4. 5. 6. Если не использовать EnableControls, в блоке finally, то любое исключение приведет к потере работоспособности формы и вероятно потребует перезагрузить приложение. Для простого пользователя это бóльшая проблема чем утечка памяти из-за того, что некоторый объект не был бы разрушен. 3. Не следует использовать оператор GOTO, откройте для себя такое понятие как структурное программирование . Требование может показаться очевидным, но тем не менее кто-то продолжает использовать этот оператор. 4.Не добавляйте и не оставляйте информацию, которая затрудняет анализ кода поиск нужной информации и массовое внесение изменений. Не оставляйте закомментированные участки кода, лишние пустые строки, неиспользуемые переменные, самоочевидные комментарии и пр. Если в рамках текущей задачи нет времени на более тщательную проверку, то хотя бы добавляйте понятный комментарий в формате DoTo. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Еще пример: Код: pascal 1. 2. Спасибо капитан Очевидность, мы знали, что если файл пустой, то в нем ни чего нет, хотелось бы знать какой файл, почему пустой, что в строке ниже удаляется... 5. Не смешивайте визуальное и не визуальное программирование. Например: если форма в файле dfm называется "Список клиентов", а где-то в коде оно меняется на "Список абонентов", то это несет дополнительные сложности, если нужно массово изменить все формы связанные с клиентами. Т.е. свойства которые необходимо изменять в коде должны меняться только в коде, а в dfm-файле должно быть установлено умолчательное значение. Тоже самое относится к тексту запросов и текстовым сообщениям. 6. Не используйте динамическое формирование запросов и макросы в запросах без крайней на то необходимости. Если запрос изменяется в коде, то невозможно его скопировать в сторонний редактор запросов и обратно. Требуется запускать приложение и мониторить все запросы. При этом нет гарантии, что вы пройдете по всем веткам программы и проверите все варианты запросов. Таким образом любое даже тривиальное изменение существенно усложняется. 7. Недопустимо чтобы после ваших изменений появлялись новые Hint`ы и Warning`и. Старые Hint`ы и Warning`и следует устранять, если они расположены около ваших изменений. 8. Нельзя бездумно обращаться к объектам внутри обработчика события. Что произойдет если это же событие будет присвоено другому объекту? Что будет если исходный объект кто-то скопипастит? Вот характерный пример: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Для грида gSearchResult был определен обработчик события по которому выполняется сортировка, в нем на прямую идет обращение к этому гриду и связанному с ним набору данных. Во-первых в будущем набор данных может поменяться, а в событии будет по прежнему сортироваться старый набор данных и ни кто этого не заметит. Во-вторых исходный грид вовсе не обязательно будет единственным. Он может быть скопирован вместе со всеми обработчиками событий (как и произошло в приведенном примере), но при клике по заголовку второго грида сортироваться будет набор данных из первого. Вариант исправления примерно такой: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Этот обработчик можно безопасно использовать в различных ситуациях. Можно было бы еще и переименовать его, чтобы было видно, что он не привязан к конкретному гриду. Такой подход не может рассматриваться как общее требование, потому, что в некоторых случаях логика работы требует обращения к какому-то конкретному объекту, таким образом требуется обдумывать решение в каждом конкретном случае. 9. Нельзя обращаться к объектам, которые могут быть пустыми. Нельзя выполнять приведение типов, если нет уверенности в совместимости типов. Проверяйте значения на допустимость в обработчиках событий! Например: Код: pascal 1. Очевидно, что DataSet может быть nil, DataSource может быть nil, Sender может быть не TBbsDBGridEh, т.е. в одной строке три потенциальных места для ошибки. Проверять можно как показано в предыдущем примере. В случае недопустимых, или пустых значений, в зависимости от логики работы можно либо ни чего не делать, либо поднимать исключение с человеческим текстом. 10. Не следует освобождать не инициализированные объекты. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Что будет, если ошибка возникнет в конструкторе? Clipboard будет содержать мусор, мы попытаемся обратится к этому объекту в разделе finaly, и получим другую ошибку, а информацию о первой ошибке потеряем. Что будет, если ошибка произойдет в ClipBoard.Close? Мы не уничтожим объект и получим утечку памяти. Вариант исправления: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Если в конструкторе произойдет ошибка, то в раздел finally мы не попадем. Общий шаблон использования объектов такой: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. или Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Не следует вызывать один пользовательский обработчик события из другого события. Например: Код: pascal 1. 2. 3. 4. 5. 6. Здесь по нажатию 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. 12. Ни когда не освобождайте объект внутри метода этого объекта в Delphi это недопустимо. Также недопустимо уничтожение объекта внутри обработчика события, объекта, т.к. обработчики событий вызываются из методов объекта. Например нельзя уничтожать форму в обработчике события OnClose этой формы: Код: pascal 1. 2. 3. 4. 5. Здесь можно присвоить параметру Action значение caFree, но лучше всегда использовать стандартный шаблон работы с модальной формой Create-ShowModal-Free. 13. Не используйте вложенные with, не используйте большие блоки кода внутри with. Например: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Надо сказать, что большие методы и блоки кода сами по себе затрудняют анализ кода и обычно являются дурным тоном а также признаком низкого профессионализма. Использование же 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. Здесь при первом вызове, объект frmEditPayDoc равен nil, затем он создается и разрушается. После Free переменная frmEditPayDoc содержит ссылку на разрушенный объект но не nil. Таким образом при повторном вызове будет обращение к разрушенному объекту и ошибка доступа к памяти. В исходном коде ошибка маскировалась большим количеством дублированного кода, который в примере не показан. Чтобы избежать таких ошибок используйте глобальный стандартный метод FreeAndNil, который разрушает объект и обнуляет значение переменной. 15. Избегайте дублирования кода, ибо "копипаст" — зло. См. пример из п. 14. Единственная разница в блоках if/else это создание объекта, если он был пустым. Таким образом очень легко переписать условие следующим образом: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Но гораздо быстрее сразу писать без дублирования кода, чем потом пытаться найти отличия в двух ветках условия. Вот еще характерный пример: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. За длиннющим текстом "qSomeFriendlyQueryName.FieldByName('Some_Friendly_Field_Name').Value" теряется ясность понимания кода и что вообще предполагается сделать. Хотя если была цель сломать мозг своему коллеге, то стиль выбран правильно. 16. Не оставляйте Hint и Warning. Warning рекомендуется интерпретировать как ошибки компиляции. Код: pascal 1. 2. 3. 4. 5. Здесь было предупреждение о том, что переменная SumByBalances может быть не инициализирована, но из-за того, что в проекте огромное количество предупреждений на это ни кто не обращал внимание. Код: pascal 1. 2. 3. 4. 5. 6. Ошибка довольно серьезная, перед выполнением цикла значение суммы может содержать любое значение, но с большой вероятностью оно будет содержать 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. Здесь видно, что обработчик события aAnnulPayUpdate использует то значение N9.Enabled, которое сам же меняет. Это происходит не явно, и ошибку трудно найти. Можно просто добавить свойство с удобочитаемым названием и использовать его. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Одна строчка написанного кода исключила бы ошибку и сделала бы код более ясным. 18. Не сравнивайте результат окна диалога с неумолчательным значением (обычно mrNo). Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Что будет, если кто-то добавит третью кнопку mbCancel? Что будет если пользователь нажмет крестик в верхнем правом углу? Действие будет выполнено, что неожиданно и не правильно. Можно конечно сделать крестик недоступным и надеяться, что ни кто не добавить кнопку Cancel, но лучше переписать условия так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Общий шаблон для создания условий выглядит так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 19. Не используйте преобразования в строку и обратно без необходимости (в особенности это относится к датам). Во-первых это долгая операция, во-вторых увеличивает вероятность ошибок связанных с различиями в региональных настройках. Код: pascal 1. 2. 3. 4. 5. 6. Тип TDateTime это обычное число с плавающей точкой (Double), в целой части хранятся сутки (количество дней прошедших с 30.12.1899), в дробной части хранится время. Для получения целой и дробной части числа можно использовать например функции Trunc и Frac. Код: pascal 1. 2. 3. 4. 5. 6. 7. Еще характерный пример. Код: pascal 1. 2. 3. 4. Здесь трудно с уверенностью сказать, какие мысли были в голове у автора, скорее всего см. п. 1, однако допустим, что автор хотел округлить дату и время до целых долей секунды. В реальности происходит преобразование даты и времени в строку в строго фиксированном формате, а обратно происходит преобразование из строки формат который указан в региональных настройках компьютера, что приводит к ошибке. Есть много вариантов округления, например такой: Код: pascal 1. 2. 3. 4. 5. 6. Полезными могут оказаться также функция Math.RoundTo и константы HoursPerDay, MinsPerDay, SecsPerDay, MSecsPerDay. 20. Ни когда не устанавливайте свойство формы Position в значение poDesktopCenter. Это означает, что форма будет расположена посередине рабочего стола, который представляет из себя прямоугольник охватывающий координаты всех имеющихся мониторов. При наличие двух мониторов форма будет расположена между ними, это неожиданно и не правильно, используйте значение Position = poScreenCenter. 21. Не следует забывать, что в выпадающем списке может быть выбрано недопустимое значение с ItemIndex = -1. Код: pascal 1. Здесь в некоторых случаях будет ошибка. Которую трудно обнаружить на этапе тестирования. 22. Если изменяемое свойство некоторого объекта это другой объект, то нельзя просто ограничиться присваиванием ссылки. Код: pascal 1. Представим себе, что сначала присвоили некоторое значение, а потом удалили экземпляр объекта 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. Теперь если экземпляр объекта будет удален, то поле FSession будет содержать значение nil. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2018, 11:42 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Скушно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2018, 12:13 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 11:13 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
скачать небольшуюНа всякий случай: есть такой (возможно, спорный) критерий "грамотности" программы, работающей с БД: каждое действие пользователя, могущее изменить данные в БД, оформляется как отдельная форма с кнопками "Ок (Сохранить)" и "Отмена" Это похоже на критерий грамотно решённой контрольной по математике: каждая задача оформлена на отдельном листочке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 12:15 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Василий 2Добавлю в тему: - Не хранить тексты запросов в свойствах компонентов .... задаю их константами внутри методов, .... Замечательный пример стратегии "в гамаке и стоя". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 12:16 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Марксизм не догма, а руководство к действию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 13:43 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
softwarerВасилий 2Добавлю в тему: - Не хранить тексты запросов в свойствах компонентов .... задаю их константами внутри методов, .... Замечательный пример стратегии "в гамаке и стоя". Обоснуй ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 14:26 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Хранить запросы к базе нужно в самой базе. Если нет механизма ХранимыхПроцедур, то выделите табличку для запросов. Причина ? Для изменения запроса не придётся компилять программу и раздавать всем пользователям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 14:50 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DimaBrХранить запросы к базе нужно в самой базе. Если нет механизма ХранимыхПроцедур, то выделите табличку для запросов. Причина ? Для изменения запроса не придётся компилять программу и раздавать всем пользователям. Для выполнения запроса тогда нужно будет сначала его достать из БД, потом выполнить и отдать пользователю результат - дополнительное действие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 15:06 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DimaBr, Нечастый случай: Запрос меняется, а самой программе изменения не требуются... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 15:06 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
zinpub Нечастый случай: Запрос меняется, а самой программе изменения не требуются... Ну это как раз не проблема - есть у меня проект, где почти весь интерфейс пользователя (ввод параметров, отображение и т.п.) строится в динамике, а бизнес-логика живет в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 15:10 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DarkMasterzinpubНечастый случай: Запрос меняется, а самой программе изменения не требуются... Ну это как раз не проблема - есть у меня проект, где почти весь интерфейс пользователя (ввод параметров, отображение и т.п.) строится в динамике, а бизнес-логика живет в БД. Согласен - если выносится в БД и интерфейс и логика. А вот что-то одно... Одна нога здесь, вторая в Чикаго. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 15:18 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Василий 2Обоснуй Подход подразумевает невозможность открыть датасет в дизайн-тайме. Следовательно, многие возможности отладки и настройки в дизайн-тайме тоже недоступны, плодится куча тупейшего кода, для отлова тривиальных ситуаций типа "поле на десять пикселей уже, чем значение" или там "опечатка в названии поля" требуется запуск программы, а для проверки исправления - ещё один запуск. Итого медленная неэффективная разработка и тупой код в результате. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 15:20 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
zinpubDarkMasterпропущено... Ну это как раз не проблема - есть у меня проект, где почти весь интерфейс пользователя (ввод параметров, отображение и т.п.) строится в динамике, а бизнес-логика живет в БД. Согласен - если выносится в БД и интерфейс и логика. А вот что-то одно... Одна нога здесь, вторая в Чикаго. :-) Если в базе хранится и интерфейс и логика, то зачем тогда приложение ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 15:23 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
schizinpubпропущено... Согласен - если выносится в БД и интерфейс и логика. А вот что-то одно... Одна нога здесь, вторая в Чикаго. :-) Если в базе хранится и интерфейс и логика, то зачем тогда приложение ? Чтобы с базой работать не на уровне sql запросов. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 15:25 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
schiЕсли в базе хранится и интерфейс и логика, то зачем тогда приложение ? Есть определённый набор методологий, которые я называю "однозвенное мышление". Они объединены тем, что практически вся логика проекта вынесена на какое-либо одно звено, а остальные выполняют чисто декоративные и технические функции. Как правило, так происходит потому, что человек, выполнявший роль архитектора, по своему профессиональному опыту и компетенциям тяготел именно к этому звену, ну а там... если в руках молоток, все проблемы выглядят похожими на гвозди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 15:26 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
schi, Не "хранится", а "строится" :) Разницу чувствуешь?-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 15:27 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DarkMasterДля выполнения запроса тогда нужно будет сначала его достать из БД, потом выполнить и отдать пользователю результат - дополнительное действие. Запросы читаются пакетом при старте программы. Это очень быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 15:39 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DimaBrDarkMasterДля выполнения запроса тогда нужно будет сначала его достать из БД, потом выполнить и отдать пользователю результат - дополнительное действие. Запросы читаются пакетом при старте программы. Это очень быстро. Потом запрос в БД меняется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 15:44 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Запрос для бд - хранить в БД. А запрос на запрос - тоже в БД. ;) Рекурсия! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 15:51 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DimaBr, авторДля изменения запроса не придётся компилять программу и раздавать всем пользователям. База, конечно же, чудесным образом поменяется :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 15:52 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
rgreatЗапрос для бд - хранить в БД. А запрос на запрос - тоже в БД. ;) Рекурсия! Запрос на Запросы - это select * from ТаблицаЗапросов. Что тут менять ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 15:54 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
makhaonБаза, конечно же, чудесным образом поменяется :) Разве кто-то говорил что не нужно ничего менять ? Поменять запрос в базе и перекомпилять программу это несоизмеримо. В первом случае для пользователя ничего не измениться, он даже этого не заметит, во втором случае неизбежное обновление программы у всех пользовалелей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 15:56 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DimaBr, авторВ первом случае для пользователя ничего не измениться То есть база всё таки чудесным образом обновится? Ясно, понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 16:37 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
makhaonТо есть база всё таки чудесным образом обновится? Ясно, понятно. Обновится запрос в базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 18:26 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Василий 2- Не хранить тексты запросов в свойствах компонентов - dfm файлы часто исключены из фильтра поиска, и в случае чего искать текст придется долго. Я в одном проекте (всё на ХП, запросов немного) выделил все тексты в секцию констант одного юнита, а в другом (клиентский софт для БД с кучей таблиц) задаю их константами внутри методов, но обязательно добавляю к имени суффикс SQL, чтобы облегчить поиск в случае чего. Т.е. не любите Вы визуальное программирование. Ну, это дело вкуса. Я так наоборот считаю, что надо максимально использовать db-aware компоненты и DataSet`ы на DataModu`лях. Открывать тут холивары на тему лениво, но вот что бесспорно так это то, что по возможности надо придерживаться одного подхода. Потому, что когда исправляешь что-то в dfm-ке, а потом где-то глубоко в коде пара символов исправляется на нечто иное, то это печаль, особенно в большихстарыхчужих проектах. Так же и про GOTO, выходом из цикла с большим уровнем вложенности или входом внутрь ассемблерной вставки... в нормально написанном коде просто не должно быть мест, где этот оператор может оказаться полезным. В целом написано по реальным багам которые вызывали наибольшее чувство ненависти нравственное страдание при сравнительно простом описании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 18:50 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DimaBrmakhaonТо есть база всё таки чудесным образом обновится? Ясно, понятно. Обновится запрос в базе. Чудесным образом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 20:28 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
makhaonDimaBrпропущено... Обновится запрос в базе. Чудесным образом? Тю, ну по репликации двусторонней придет, что не понятного :) Другой вопрос, когда у запроса изменится список полей и параметров - что с этим делать необновленной программе, что выводить и главное - чем заполнять новые параметры, но это другой вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 21:39 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
YuRockДругой вопрос, когда у запроса изменится список полей и параметров - что с этим делать необновленной программе, что выводить и главное - чем заполнять новые параметры, но это другой вопрос. Вот это уже следующий уровень абстракции. Сначала запросы в базе (в большенства базах они там уже есть изначально в виде ХранимыхПроцедур) Второй этап - отчёты в базе. Изменились поля запроса, изменили отчёт, а дабы он изменился у всех пользователей, то хранить не в файликах а в базе. Следующий этап - формы в базу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 22:29 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DimaBrСледующий этап - формы в базу. Не-а, формы - в dll, а лишь потом - в базу ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 22:51 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
ДокНе-а, формы - в dll, а лишь потом - в базу ;) ДЛЛ- это компиляция и обновления. Это ничем не отличается от EXE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 22:58 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
А потом приходит веб-программист и говорит что вы больные на голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 23:47 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DimaBrИзменились поля запроса, изменили отчёт, а дабы он изменился у всех пользователей, то хранить не в файликах а в базе. Следующий этап - формы в базу.Основной вопрос остается открытым - чем заполнять новые параметры запросов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 23:53 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
YuRockDimaBrИзменились поля запроса, изменили отчёт, а дабы он изменился у всех пользователей, то хранить не в файликах а в базе. Следующий этап - формы в базу.Основной вопрос остается открытым - чем заполнять новые параметры запросов?Предвосхищая ответ "значением контрола из формы в базе"... Не бывает логики, в которой только макеты форм и запросы. Нужны таки какие-то вычисления, расчеты, нетривиальные фильтры и интерфейсы... Даже в 1С приходится код писать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 23:59 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DimaBrДокНе-а, формы - в dll, а лишь потом - в базу ;) ДЛЛ- это компиляция и обновления. Это ничем не отличается от EXEВ данном случае принципиальной разницы, кстати, может и не быть - бинарники репликацией на клиентов рассылать, или запросы. Или и запросы, и бинарники ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 00:02 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
В правильной архитектуре, параметры заполнятся автоматически на основе контекста и имени параметров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 00:06 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
asviridenkovВ правильной архитектуре, параметры заполнятся автоматически на основе контекста и имени параметров.Ага, вопрос, чем, если это какая-то новая сущность расчетная или получаемая с железа (тоже нового, которое старые бинарники еще не знают). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 00:20 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
YuRockasviridenkovВ правильной архитектуре, параметры заполнятся автоматически на основе контекста и имени параметров.Ага, вопрос, чем, если это какая-то новая сущность расчетная или получаемая с железа (тоже нового, которое старые бинарники еще не знают). Бинарники и не должны знать о новых сущностях. Должны быть настройки позволяющие добавить новые сущности и указать куда и под какими имена, в какие контексты, она должна попадать. А новые запросы соответственно возьмут параметры из этих контекстов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 01:00 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
asviridenkovДолжны быть настройки позволяющие добавить новые сущности и указать куда и под какими имена, в какие контексты, она должна попадатьОбъясни, как можно с помощью настроек добавить сущность "новый драйвер кассового аппарата" (например). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 01:17 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Новая сущность - компиляция проекта (модуля). От этого никуда не деться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 01:47 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
YuRockasviridenkovДолжны быть настройки позволяющие добавить новые сущности и указать куда и под какими имена, в какие контексты, она должна попадатьОбъясни, как можно с помощью настроек добавить сущность "новый драйвер кассового аппарата" (например). По драйвером что имеется в виду? Системный драйвер, класс в приложении, еще что-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 01:48 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
asviridenkovПо драйвером что имеется в виду? Системный драйвер, класс в приложении, еще что-то?Ппограмма, умеющая работать с железякой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 01:54 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
YuRockasviridenkovПо драйвером что имеется в виду? Системный драйвер, класс в приложении, еще что-то?Ппограмма, умеющая работать с железякой.Лично у меня это - "класс в приложении" с прекрытыми виртуальными методами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 01:56 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
YuRockYuRockпропущено... Ппограмма, умеющая работать с железякой.Лично у меня это - "класс в приложении" с прекрытыми виртуальными методами. В таком случае может сработать универсальный класс, в котором детали обмена с конкретной моделью задаются в виде конфигурации, скажем в XML. Ну, или, если разница слишком велика, в виде скриптов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 02:04 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DimaBrНовая сущность - компиляция проекта (модуля). От этого никуда не деться.Да, а часто этот новый (измененный) модуль требует и измененных запросов. И/или наоборот - новые/измененные запросы требуют изменения модулей. Всё не задекларируешь, я к этому веду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 02:05 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
asviridenkovВ таком случае может сработать универсальный класс, в котором детали обмена с конкретной моделью задаются в виде конфигурацииДа нету конкретной модели. Есть новая модель, с новыми деталями, свойствами и поведениями. Нужен новый, только написанный бинарник (новый наследник в моем случае). И вот эта новая модель требует изменить параметры. Методов класса. И запросов в базе. И добавления новых. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 02:11 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
YuRockDimaBrНовая сущность - компиляция проекта (модуля). От этого никуда не деться.Да, а часто этот новый (измененный) модуль требует и измененных запросов. И/или наоборот - новые/измененные запросы требуют изменения модулей. Всё не задекларируешь, я к этому веду. Ну одно дело, когда вы обновляете приложение на клиенте при смене кассового аппарата, и совсем другое - когда вы его обновляете из-за того, что в одном запросе запятую пропустили или новый параметр в фильтр добавили. ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 09:53 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
В любом случае это к теме топика не относится. Это методика разработки, а говнокодить можно и БатоноКидательстве ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 10:31 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
asviridenkovYuRockпропущено... Лично у меня это - "класс в приложении" с прекрытыми виртуальными методами. В таком случае может сработать универсальный класс, в котором детали обмена с конкретной моделью задаются в виде конфигурации, скажем в XML. Ну, или, если разница слишком велика, в виде скриптов. Опять универсальный решатель всего и вся ? C XML и блютусом ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 10:36 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Используйте плагины и интерфейсы и проблемы расширяемости практически решены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 10:59 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
ДокDimaBrСледующий этап - формы в базу. Не-а, формы - в dll, а лишь потом - в базу ;) Не, сначала в OLE-объект Товарищи, вроде серьезный вопрос поднят, не каждый поймет искрометное чувство юмора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 11:01 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
roschinspbДокпропущено... Не-а, формы - в dll, а лишь потом - в базу ;) Не, сначала в OLE-объект Товарищи, вроде серьезный вопрос поднят, не каждый поймет искрометное чувство юмора И это слабенько... Пыталась родиться идея - Хранить исходники(pas) в базе, а исполнять в paxScript'е... Хорошо придушили вовремя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 11:21 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
ziv-2014Используйте плагины и интерфейсы и проблемы расширяемости практически решены. Да чё там практически - полностью. За исключением тех "редких" случаев, когда меняется интерфейс этих плагинов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 12:36 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
zinpubПыталась родиться идея - Хранить исходники(pas) в базе, а исполнять в paxScript'е... Зачем вообще исполнять на клиенте? Надо исполнять все на сервере, а клиенту кидать видео интерфейса )))) ну и мышку-клаву от него ловить и на сервер передавать. softwarerВасилий 2Обоснуй Подход подразумевает невозможность открыть датасет в дизайн-тайме. Следовательно, многие возможности отладки и настройки в дизайн-тайме тоже недоступны, плодится куча тупейшего кода, для отлова тривиальных ситуаций типа "поле на десять пикселей уже, чем значение" или там "опечатка в названии поля" требуется запуск программы, а для проверки исправления - ещё один запуск. Итого медленная неэффективная разработка и тупой код в результате. Я тоже в юношестве таким баловался. Когда задолбался переключать DB.Connected, сохраняющийся в True после развлечений в дизайнере и пытающийся восстановиться при запуске программы у клиента, как-то остыл. К тому же не все запросы отображаются визуально, бывает и внутренняя кухня, которую надо генерить динамически. У меня в проекте штук двадцать разных внутренних запросов - что же, на каждый добавлять TQuery? А если необходимо юзать несколько разных db-логинов (к примеру, интерфейс у них различается), то дизайнер тоже в пролете. Опять же при изменении схемы БД я быстро найду старые запросы поиском по проекту, а тебе придется ворошить компоненты. В общем, все зависит от структуры и задач программы. roschinspbВасилий 2- Не хранить тексты запросов в свойствах компонентов - dfm файлы часто исключены из фильтра поиска, и в случае чего искать текст придется долго. Я в одном проекте (всё на ХП, запросов немного) выделил все тексты в секцию констант одного юнита, а в другом (клиентский софт для БД с кучей таблиц) задаю их константами внутри методов, но обязательно добавляю к имени суффикс SQL, чтобы облегчить поиск в случае чего. Т.е. не любите Вы визуальное программирование. Ну, это дело вкуса. Я так наоборот считаю, что надо максимально использовать db-aware компоненты и DataSet`ы на DataModu`лях. Открывать тут холивары на тему лениво, но вот что бесспорно так это то, что по возможности надо придерживаться одного подхода. Потому, что когда исправляешь что-то в dfm-ке, а потом где-то глубоко в коде пара символов исправляется на нечто иное, то это печаль, особенно в большихстарыхчужих проектах. Я к нему спокойно отношусь. Кидать контролы удобно, но вот копошиться с пикселами, выравниванием и прочим меня задалбывает. Насчет свойств компонентов как раз тоже из опыта. Неоднократно бывало, что по полчаса ищу некоторую опцию, которую нужно добавить в другой компонент или наоборот изъять. Особенно весело, когда это нечто монструозное типа грида или virtualtreeview. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 19:30 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Василий 2Я тоже в юношестве таким баловался. Когда задолбался переключать DB.Connected, сохраняющийся в True после развлечений в дизайнере и пытающийся восстановиться при запуске программы у клиента, как-то остыл. Угу. Это как раз иллюстрирует разницу в наших подходах. Ты идёшь наиболее очевидным путём: попробовал, увидел проблему, решил, что надо переключать. Переключал, переключал, переключал, переключал, переключал, переключал, переключал, переключал, переключал, переключал... задолбался и ушёл целиком в рантайм. Я же, попробовав и увидев проблему, чуть-чуть пораскинул мозгами и сделал так, чтобы дизайн-таймовый DB.Connected не мешал. Он у меня годами остаётся в true, просто не пытается восстанавливаться в ран-тайме, вот и все :) Василий 2К тому же не все запросы отображаются визуально, бывает и внутренняя кухня, которую надо генерить динамически. Бывает. И мой подход никак не мешает делать это там, где оно оправданно. Твой же подход означает, что динамика используется даже там, где она существенно хуже, этим и вызвана моя реплика. Василий 2У меня в проекте штук двадцать разных внутренних запросов - что же, на каждый добавлять TQuery? Знаешь, проект на двадцать запросов, в общем, может быть написан вообще как угодно, это совершенно неважно для всех, кроме разве что автора. Но сама по себе постановка вопроса катастрофически нелепа. За экономию чего именно ты воюешь? Ну вот добавишь ты двадцать TQuery - назови хоть один измеримый показатель, которому от этого станет заметно хуже. А то, что у тебя в проекте несколько форм, тебя не смущает? Не возникает желания обойтись одной, подменяя содержимое? Василий 2А если необходимо юзать несколько разных db-логинов (к примеру, интерфейс у них различается), то дизайнер тоже в пролете. Не понимаю, в чём ты видишь проблему. Это вообще перпендикулярные вещи. Разумеется, дизайнер ускоряет работу в этом режиме так же, как и в любом другом. Василий 2Опять же при изменении схемы БД я быстро найду старые запросы поиском по проекту, а тебе придется ворошить компоненты. Знаешь, даже смешно. Для тебя поиск по маске *.pas чем-то принципиально отличается от поиска по маске *.dfm? Василий 2В общем, все зависит от структуры и задач программы. Теоретически - да. Практически чаще всего зависит от программиста, у которого в руках молоток и который поэтому решил, что все задачи похожи на гвозди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 19:58 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Василий 2Зачем вообще исполнять на клиенте? Надо исполнять все на сервере, а клиенту кидать видео интерфейса )))) ну и мышку-клаву от него ловить и на сервер передавать. Ты не поверишь, так и работаем. Это называется Терминал !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 20:53 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DimaBrВасилий 2Зачем вообще исполнять на клиенте? Надо исполнять все на сервере, а клиенту кидать видео интерфейса )))) ну и мышку-клаву от него ловить и на сервер передавать. Ты не поверишь, так и работаем. Это называется Терминал !!!Браузер, в принципе, для этого предназначался. Пока это понятие скриптами не завоняли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 21:15 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
К советам стоит скептически относиться и не воспринимать всё буквально. Ситуации бывают разные, причем настолько, что превращают вроде бы полезный совет во вредный. Особенно это касается таких вещей типа где что хранить и какую архитектуру выбрать (на sql.ru, вроде, даже когда-то мемы ходили про очередные холивары про трехзвенки). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 22:16 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
softwarerУгу. Это как раз иллюстрирует разницу в наших подходах. Ты идёшь наиболее очевидным путём: попробовал, увидел проблему, решил, что надо переключать. Переключал, переключал, переключал, переключал, переключал, переключал, переключал, переключал, переключал, переключал... задолбался и ушёл целиком в рантайм. Я же, попробовав и увидев проблему, чуть-чуть пораскинул мозгами и сделал так, чтобы дизайн-таймовый DB.Connected не мешал. Он у меня годами остаётся в true, просто не пытается восстанавливаться в ран-тайме, вот и все :) Я тоже сделал, но это было мне неудобно. Сейчас я сделал так, как удобно. На самом деле я бы мог сейчас задвинуть про модели и контроллеры, про отделение гуя от бизнес-логики и прочее, но не вижу смысла. Данный аспект не аксиома, пусть каждый делает так, как ему привычно и удобно. Ну а лично тебе желаю делать поменьше категоричных выводов, ибо когда они уходят в молоко, ты выглядишь очень бледно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2018, 14:04 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Архитектурные предпочтения несколько из другой темы. во-первых изговнокодить можно любую архитектуру, т.е. это более общая тема. во-вторых спорить о предпочтительности того, или иного подхода можно только применительно к конкретной задаче. Для одного случая уместно одно, для другого случая уместно другое. И кстати говоря, для больших коммерческих проектов хорошо бы по-реже упоминать местоимение Я и по чаще использовать местоимение ОНИ (кто будет править твой код). Приложение пишут несколько лет, несколько людей (иных уже нет, а те далече). У каждого свой уровень познаний, свои предпочтения, свои девиации сознания наконец. Кто-то скажет "нафига мне db-компоненты, я сам умею добавлять итемы в комбобоксы", кто-то скажет "да я привык использовать отличную библиотеку XXX, 20 лет пользуюсь ни разу не подводила", кто-то начнет всё переписывать и уйдет в запой... в итоге каждый оставляет свой неповторимый след в истории. Так что лучше уж использовать стандартные подходы, ограниченный набор библиотек пусть он даже в каком-то частном случае хуже чем можно было бы написать самому, чтобы твои последователи меньше тратили времени и сил на осознание твоей гениальной задумки, а больше уделяли времени на исправление логики в соответствии с новыми задачами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2018, 15:05 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
roschinspbспорить о предпочтительности того, или иного подхода можно только применительно к конкретной задаче. Для одного случая уместно одно, для другого случая уместно другое. Именно! У меня коллега вообще отказался от сторонних компонент, потому что не хочет морочиться с установкой :). Но для его целей хватает. Мне же, например, без VTV было бы очень тоскливо. roschinspbИ кстати говоря, для больших коммерческих проектов хорошо бы по-реже упоминать местоимение Я и по чаще использовать местоимение ОНИ (кто будет править твой код). Приложение пишут несколько лет, несколько людей (иных уже нет, а те далече). У каждого свой уровень познаний, свои предпочтения, свои девиации сознания наконец. Кто-то скажет "нафига мне db-компоненты, я сам умею добавлять итемы в комбобоксы", кто-то скажет "да я привык использовать отличную библиотеку XXX, 20 лет пользуюсь ни разу не подводила", кто-то начнет всё переписывать и уйдет в запой... в итоге каждый оставляет свой неповторимый след в истории. Так что лучше уж использовать стандартные подходы, ограниченный набор библиотек пусть он даже в каком-то частном случае хуже чем можно было бы написать самому, чтобы твои последователи меньше тратили времени и сил на осознание твоей гениальной задумки, а больше уделяли времени на исправление логики в соответствии с новыми задачами. Большие проекты, как правило, не начинаются в одиночку. И кодинг стиль у компании должен быть устоявшийся и закрепленный в мануалах, также как и любое привлечение сторонней библиотеки не может быть решением рандомного джуниора Пети. Ну а если речь о проектах одиночек, то нет смысла ужиматься - либо он так и останется собственным проектом, либо перейдет в категорию крупных и по-любому придется все переписывать и подгонять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2018, 16:19 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Василий 2Большие проекты, как правило, не начинаются в одиночку. И кодинг стиль у компании должен быть устоявшийся и закрепленный Лично видел исходный код программы, которая под дулом пистолета навязывалась бизнесу по директиве сверху - я плакаль :( В коде коментарии типа "что делает этот кусок кода мы не знаем, но лучше не трогать" - в порядке вещей. А ты тут про крупные проекты :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2018, 17:08 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Василий 2... кодинг стиль у компании должен быть устоявшийся и закрепленный в мануалах, также как... Да, конечно, конечно, все люди должны быть здоровыми и богатыми. Только так уж вышло, что во всех крупных компаниях где я работал везде картина примерно одинаковая (зверинец компонентов, подходов, стилей форматирования). И почти все крупные проекты начинались либо одиночкой, либо небольшой группой единомышленников. Полагаю, что это скорее правило нежели исключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2018, 17:11 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
zinpubroschinspbпропущено... Не, сначала в OLE-объект Товарищи, вроде серьезный вопрос поднят, не каждый поймет искрометное чувство юмора И это слабенько... Пыталась родиться идея - Хранить исходники(pas) в базе, а исполнять в paxScript'е... Хорошо придушили вовремя. У меня на эту идею выброшен был целый год. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 03:27 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Keep It Simple, Stupid. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 03:32 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
fraks zinpub Пыталась родиться идея - Хранить исходники(pas) в базе, а исполнять в paxScript'е... Хорошо придушили вовремя. У меня на эту идею выброшен был целый год. :( У нас тоже был потрачен ГОД. И не в пустую, теперь Delphi открываем по праздникам. И обновление раз в пол года, хотя правки почти ежедневно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 07:38 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DimaBrfraksУ меня на эту идею выброшен был целый год. :( У нас тоже был потрачен ГОД. И не в пустую, теперь Delphi открываем по праздникам. И обновление раз в пол года, хотя правки почти ежедневно. Ну, я как-то пришел к мысли что странно переписывать Delphi заново, причем на Delphi же, причем получив из компилятора интерпретатор. Какие-то наработки от всего этого конечно остались, но к интерпретатору Delphi не имеет никакого отношения. Обновление у меня бывает по нескольку раз на дню. Полученный exe загружаю в базу. Приложение при старте проверяет есть ли в базе версия новее чем оно само, если есть - выгружает и самообновляется. exe размером в 10мб не составляет проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 10:09 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
fraksexe размером в 10мб не составляет проблем. У каждого пользователя (компьютера) своя версия программы или это из тех "замечательных" приложений, которые запускаются только под elevated-привилегиями? Или всё как у взрослых и установлена своя системная служба-обновлятор? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 10:12 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
alekcvpИли всё как у взрослых и установлена своя системная служба-обновлятор? :) Ох уж эти "взрослые" со своими службами-обновляторами... придушил бы. Каждая сволочь норовит в сервисы пролезть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 10:43 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Василий 2alekcvpИли всё как у взрослых и установлена своя системная служба-обновлятор? :) Ох уж эти "взрослые" со своими службами-обновляторами... придушил бы. Каждая сволочь норовит в сервисы пролезть. Вставь обновлятор в клиент и не парься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 11:30 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
alekcvpfraksexe размером в 10мб не составляет проблем. У каждого пользователя (компьютера) своя версия программы или это из тех "замечательных" приложений, которые запускаются только под elevated-привилегиями? Или всё как у взрослых и установлена своя системная служба-обновлятор? :) Это замечательное приложение для внутрикорпоративного использования. Вне фирмы не распространяется. Инсталлятора не имеет (за отсутствием надобности). Никакие службы не использует и не ставит. Нужен только клиент Firebird. Привилегии должны быть достаточными что бы заместить собственный exe. Программа-обновлятор лежит в этой же папке. Основная программа, когда определяет что ей нужно обновиться, запускает обновлятор (если он есть) со словами - обнови вот меня, вот оттуда. И закрывается. Обновлятор скачивает, замещает старый exe новым, запускает обновленную программу, сам завершается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:07 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
alekcvpfraksexe размером в 10мб не составляет проблем. У каждого пользователя (компьютера) своя версия программы или это из тех "замечательных" приложений, которые запускаются только под elevated-привилегиями? Или всё как у взрослых и установлена своя системная служба-обновлятор? :) И еще забыл. Новый exe кладется в базу. Соответственно, какие программы с этой базой работают, такие и обновляются. Если проходит такое обновление структуры БД что требует однозначного обновления всех клиентов - то клиентов завершаем принудительно (если на слова не реагируют). Если такой необходимости нет (в 50-90% случаев) - просто сообщаю тому кто заинтересован в новой версии что нужно перезапуститься. Остальные самообновляются утром, при очередном запуске. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:10 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Программа обновляется из базы - это само собой разумеющееся, но ради мелких правок (там формочку новую слепить, отчётик подрисовать, даже орфографию подправить) нет смысла перекомпилировать. Плюс, я правку могу сделать с любого рабочего места, а компиляция - увы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:12 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DimaBrПрограмма обновляется из базы - это само собой разумеющееся, но ради мелких правок (там формочку новую слепить, отчётик подрисовать, даже орфографию подправить) нет смысла перекомпилировать. Плюс, я правку могу сделать с любого рабочего места, а компиляция - увы Перекомпиляция в Delphi занимает секунды. Загрузка новой версии в БД - аналогично. Правка с любого рабочего места - вероятно тут что-то не то в консерватории, если такое требуется и является краеугольны камнем. Но собственно, я могу зайти удаленно на свое рабочее место и там скомпилять любую правку. Либо с ноута, на котором тоже развернута среда с нужными компонентами и исходниками. Ноут - это для работы в отпуске :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:26 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
fraksПравка с любого рабочего места - вероятно тут что-то не то в консерватории, если такое требуется и является краеугольны камнем. Значит у вас работа сидячая и мало далекоудалённых объектов, плюс ноутбуки свободные в наличии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 13:00 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DimaBrЗначит у вас работа сидячая и мало далекоудалённых объектов, плюс ноутбуки свободные в наличии. Хм. То есть, архитектура "как не говнокодить" плавно приводит к необходимости высунув язык носиться по удалённым объектам и что-то там править на коленке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 13:09 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
fraks...Перекомпиляция в Delphi занимает... Ты просто одного клиента обслуживаешь. А вот представь себе, что их десятки тысяч, локальные сети не связаны между собой, расположены от Калининграда до Владивостока. Кто-то использует стандартные конфигурации/пакеты отчетов, а кто-то желает "с перламутровыми пуговицами". "Компиляция" - только с выпуском очередного релиза (или критического патча). После "компиляции" идет процесс тестирования, в совокупности со всеми программными компонентами; с поэтапным внедрением (сначала у небольшой группы клиентов, потом - группами по сходному функционалу и т.п.), иначе, если ёбнется ВСЁ СРАЗУ - никаких ресурсов на восстановление не хватит. Правка скриптов (или заказных плагинов в тяжелых случаях) - относительно безболезненный способ кастомизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 13:19 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
softwarer...высунув язык носиться по удалённым объектам и что-то там править на коленке? Зависит от толщины пуза клиента, не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 13:22 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
fraks Перекомпиляция в Delphi занимает секунды. Загрузка новой версии в БД - аналогично. Дело не во времени, и не в том что дизайнер и компилятор дельфи лучше любых самописных. Это все кажется важным только на первый взгляд. Самое сложное в построении сложных ИС, это правильно разделить их на нужное число архитектурных слоев, и сделать так чтобы у этих слоев зависимость была минимальная и однонаправленная. Оставаясь в рамках только дельфи, в теории это осуществить можно, но на практике не получается почти никогда. Соблазн "малой кровью" решить какие-то конкретные затыки приводит к тому что возникает куча перекрестных связей, и система превращается в неуправляемого монстра, в котором даже смена минорной версии дельфи это огромная проблема. В то время, как в правильно построенной системе, даже полностью сменить один грид на другой (например Cx на Eh) не составляет большой сложности. Собственно хранение форм в БД и вынос части логики в скрипты и позволяет создать еще один изолированный слой, разделив разработку, поддержку и.т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 13:33 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
>fraks, сегодня, 12:10 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1286601&msg=21342065][21342065] >...Новый exe кладется в базу... Понимаю, что влезаю в чужой монастырь. Но задача стоит похожая - работа приложений в локальной сети и их централизованное обновление. Здесь попытался представить прототип, реализующий решение. Приложения не инсталлируются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 13:35 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
чччДА вот представь себе, что их десятки тысяч, локальные сети не связаны между собой, расположены от Калининграда до Владивостока. Кто-то использует стандартные конфигурации/пакеты отчетов, а кто-то желает "с перламутровыми пуговицами". "Компиляция" - только с выпуском очередного релиза (или критического патча). После "компиляции" идет процесс тестирования, в совокупности со всеми программными компонентами; с поэтапным внедрением (сначала у небольшой группы клиентов, потом - группами по сходному функционалу и т.п.), иначе, если ёбнется ВСЁ СРАЗУ - никаких ресурсов на восстановление не хватит. Правка скриптов (или заказных плагинов в тяжелых случаях) - относительно безболезненный способ кастомизации. Скрипты тоже надо тестировать, а если они хранятся в базе, есть большой соблазн пихнуть исправления на живую. Но в целом, если изменения бинарника проходят суровый цикл внедрения, выделение более динамично изменяемого слоя оправдано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 13:44 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
чччДsoftwarer...высунув язык носиться по удалённым объектам и что-то там править на коленке? Зависит от толщины пуза клиента, не? Однажды, лет пятнадцать назад, когда я впервые напоролся на привычку клиентов из Новосибирска, придя с утра на рабочее место, звонить с требованием немедленного исправления обнаруженных проблем в семь тридцать по местному - в моём лексиконе появилась поговорка "Программист, который хорошо поработал днём - спокойно спит по ночам". И от толщины пуза клиента это ну совершенно не зависит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 13:55 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
asviridenkovСоблазн "малой кровью" решить какие-то конкретные затыки приводит к тому что возникает куча перекрестных связей, и система превращается в неуправляемого монстра Есть такая проблема. И лично я предпочёл решать её разбиением приложения на плагины-дллки. Это практически убивает возможность внедрения непредусмотренных левых связей, но сохраняет плюсы визуальной разработки. Само собой, при этом также почти автоматически решаются вопросы кастомизации под клиента, под роли и права пользователей итп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 14:06 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
softwarerasviridenkovСоблазн "малой кровью" решить какие-то конкретные затыки приводит к тому что возникает куча перекрестных связей, и система превращается в неуправляемого монстра Есть такая проблема. И лично я предпочёл решать её разбиением приложения на плагины-дллки. Это практически убивает возможность внедрения непредусмотренных левых связей, но сохраняет плюсы визуальной разработки. Само собой, при этом также почти автоматически решаются вопросы кастомизации под клиента, под роли и права пользователей итп. Тоже вариант, я же говорю что формы и скрипты в БД это только один из способов. Но у этого способа есть ряд неочевидных на первый взгляд преимуществ, как например, прозрачный перенос выполнения части кода на сервер, возможность упрощенного перехода на web интерфейс, и.т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 14:20 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
asviridenkovНо у этого способа есть ряд неочевидных на первый взгляд преимуществ Есть. Как есть и ряд более очевидных недостатков. Поэтому, выбирая архитектурное решение, имхо, следует тщательно оценить позиционирование и будущее развитие проекта. Если это 1С - разработка платформы полностью оправданна, если это что-либо в десять-сто-тысячу раз меньшее - соответственно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 15:16 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DimaBrfraksПравка с любого рабочего места - вероятно тут что-то не то в консерватории, если такое требуется и является краеугольны камнем. Значит у вас работа сидячая и мало далекоудалённых объектов, плюс ноутбуки свободные в наличии. Работа да, в основном сидячая. Ноутбук личный. Нахожусь в Новосибирске. Кемерово, Красноярск, Братск, Иркутск - это достаточно удаленные объекты? По поводу "быстренько допилить каждому клиенту формочку"... Было раньше такое, запарился для каждого филиала формировать индивидуальный пакет обновленных отчетов.В принудительном порядке запретил любой индивидуализм. У всех одна программа, полностью одинаковые отчеты и шаблоны. Если нужно кому-то что-то - добавляется только централизованно и спускается всем. Если в конкретном месте это не нужно - делается какая-то опция что бы настройками можно было убрать лишнее. Таким образом имеем единую кодовую базу и тестировать нужно только ее одну а не под каждого кролика. Экономия времени и мозгов, которых с возрастом больше не становится. Все изменения тестирую сначала сам. Если есть сомнения что протестировал корректно - сначала ставлю этот exe только одному оператору, который эти изменения запросил. В базу этот exe не гружу что бы по остальным рабочим местам не разлетелось. Если в течение дня жалоб не поступило - загружаю в базу. Если обновление сложное и есть некоторый риск при внедрении - запускаю в ту базу у которых клиентов поменьше и находится поближе. Протестировалось - внедряю дальше. Исправления типа опечатки или что-то очевидное и несложное можно заливать сразу всем. Главное - перед отпуском минимум с неделю ничего нового не внедрять :) Не то что бы бывали случаи, но как-то ссыкотно бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 21:26 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Кстати, одна из причин отказа от скриптинга - это то что скрипты не проверяются. Их нужно прогнать по все веткам что бы найти опечатки. Компилятор Delphi большинство таких нескладух находит на этапе компиляции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 21:30 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
fraksКстати, одна из причин отказа от скриптинга - это то что скрипты не проверяются. Их нужно прогнать по все веткам что бы найти опечатки. Компилятор Delphi большинство таких нескладух находит на этапе компиляции. Когда я впервые смог внедрить в проекте масштабное автотестирование, я завёл оказавшуюся очень полезной практику: любые сообщения об ошибках принимал только в виде воспроизводящего тестового скрипта. Что находили тестировщики - они и писали. Что находил саппорт - писали с помощью тестировщиков. Что находили пользователи - теоретически так же, через саппорт и тестировщиков, практически же этого уже почти не случалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 22:01 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
fraksУ меня на эту идею выброшен был целый годЗа год - там, наверное, очень наворочено... На базе EControl ушел месяц, ещё около того - на простенький менеджер репозитория с поддержкой версий и выпиливание собственно дизайнера форм "обратно в Delphi" (в "самописке" остался только отладчик), чтобы можно было отлаживать и там, и компилировать тот же код и в обычные бинарники, по необходимости. В работу не пошло, т.к. не хотелось бодаться с возможными breaking changes, в пакете DevExpress, в основном, пока он поддерживался для семерки, ну и PaxScript хотелось понять получше, прежде чем "ура-работает-в-продакшн" или приобрести с поддержкой :-) А вот как сейчас его добыть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 05:12 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
ma1tusfraksУ меня на эту идею выброшен был целый годЗа год - там, наверное, очень наворочено... Нет, не наворочено. За год дошли до зачатков уровня Delphi1, не более. Может конечно есть в природе крутые программеры которые выдают результат намного быстрее, но это не наш случай. Под это дело был куплен FastScript. бОльшая часть времени ушла на воспроизведение форм и контролов из скрипта, обвязка свойств и событий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 05:44 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
fraksПод это дело был куплен FastScript. бОльшая часть времени ушла на воспроизведение форм и контролов из скрипта, обвязка свойств и событий. Ну это вы как-то слишком. Я использовал FastScript, и точно помню, что на "воспроизведение форм, обвязку свойств и событий" вместе с экспериментами ушло немного времени. Сколько точно, не скажу - поскольку оно было размазано по проекту - но суммарно порядка недель. Единственно, я не стал воспроизводить всякие экзотические и практически неиспользуемые обработчики событий, сосредоточился только на типовых (условно, одна только реализация TNotifyEvent накрыла 90% требуемого функционала, а всякие OnBeginDrag итп были оставлены до того времени, когда потребуются в проекте). Честно говоря, я даже не представляю, что надо делать, чтобы потратить на это год... ну разве что делать обвязку для каждого свойства и каждого события отдельно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 06:00 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Как только народ не извращается вместо того чтобы сделать веб приложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 13:47 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
rgreatКак только народ не извращается вместо того чтобы сделать веб приложение. В кругах, которым я близок, на это принято отвечать "Мы, конечно, панки, но мы же не юродивые!" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 14:06 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 14:46 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
rgreatКак только народ не извращается вместо того чтобы сделать веб приложение. точно, F5 и вот тебе актуальная версия приложения... и никаких проблем с говнокодом ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 16:54 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Дегтярев ЕвгенийrgreatКак только народ не извращается вместо того чтобы сделать веб приложение. точно, F5 и вот тебе актуальная версия приложения... и никаких проблем с говнокодом ) У вебприложений - свой, отдельный говнокод ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 17:28 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Было бы интересно посмотреть на пример самописного бизнес-скрипта, а так де на то, как он отлаживается и синтаксически проверяется в процессе.. DimaBr, Softwarer -- можно ли примеры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 18:13 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
Скрипт ничем не отличается от кода, построен то на Фасте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 22:19 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
DarkMasterДегтярев Евгенийпропущено... точно, F5 и вот тебе актуальная версия приложения... и никаких проблем с говнокодом ) У вебприложений - свой, отдельный говнокод да нее, там же все стильно модно молодежно ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 05:54 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
ЧингисДД!. хотелось бы писать грамотно программу с бд, посмотреть пример и где скачать небольшую Насчет скачать и примеры не подскажу, но можно начать с книги "чистая архитектура" Роберта Мартин, недавно свежий русский перевод вышел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 11:18 |
|
||
|
Грамотно написать программу а не говнокод
|
|||
|---|---|---|---|
|
#18+
JaDiDimaBr, Softwarer -- можно ли примеры? От меня - нет. Тот мой проект строился на том, чтобы привести в сколько-нибудь приемлемый вид исполнение той груды бизнес-скриптов, которые были наструганы товарищами за предыдущие годы на предыдущем движке. Скрипты совершенно ужасные, как с точки зрения проектирования, так и реализации, и выкладывать их как нечто связанное с именем "Softwarer" я просто не буду. Собственно, тот проект ещё больше убедил меня в том, что скриптовые решения на недостаточно серьёзной платформе - ламерский выбор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 11:28 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2040998]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
175ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
163ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 578ms |

| 0 / 0 |
