Последнее время я не программирую, а рaзгpебаю зaвалы которые оставили до меня покoления программистов. Чтобы внести минимальное декоративное изменение требуется исправить несколько модулей и потратить несопоставимую по сложности работу по выискиванию всех мест, в которые надо внести изменения.
Дело в том, что тем методы, которые допустимы в примерах, олимпиадах и лабах по программированию, совершенно неприемлемы при создании крупных и долгоживущих прикладных программ.
Предлагаю в этой теме публиковать примеры, как не надо программировать на Delphi, что бы потом не было мучительно больно от встречи с теми, кто исправлял твой код.
Всего в теме 421 сообщение
Добавить свое сообщение
Отслеживать это обсуждение
№ 361 22-08-2009 12:10 | |
Ответ на »сообщение 359« (Сергей Осколков)
___________________________
Сергей, это бесполезно. Например, я не очень хорошо владею английским, но постоянно поправляю людей, которые прекрасно владеют языком, но не в состоянии писать вразумительные идентификаторы.
№ 360 21-08-2009 06:41 | |
Ответ на »сообщение 359« (Сергей Осколков)
___________________________
Для правильного владения языком, нет нужды запоминать правила, если можно просто запомнить каждое слово, как пишется.
№ 359 21-08-2009 05:57 | |
Не совсем по теме, но:
При использовании функции ReadFile один из параметров задает, сколько байт нужно считать из файла. Нередко в коде встречается название этой переменной Readed.
NB! Глагол to read - неправильный. Его форма инфинитива, прошедшего времени и причастия прошедшего времени пишутся read - read -read, а читаются риид-рэд-рэд. Нет такой формы readed.
Аналогично для WriteFile: write-wrote-written (райт-роут-риттен).
Так что если кто хочет назвать по-английски, то в соответствии с правилами языка будет что-нибудь вроде BytesRead (байтсрэд, прочитано байт) и BytesWritten (записано байт).
Спасибо за внимание. )
№ 358 27-04-2009 07:23 | |
Смотрел как была написана чужая программа учета. Писалось на C++Builder, но сути не меняет:
struct TAgent{
int agent_id;
AnsiString name;
};
...
Query1->Sql->Text = AnsiString("")+"select agent_id, name from agent order by name, agent_id";
....
vector<TAgent> agents;
TAgent agent;
while (!(Query1->Eof))
{
agent.agent_id = Query1->FieldValues["agent_id"];
agent.name = Query1->FieldValues["name"];
agents.push_back(agent);
Query1->Next();
}
Кром того потом эта "шняга" выгружалась в StringGrid))). Как вам? Проект мы решили переписать заново. Странно почему почти всюду мы получили прирост быстродействия минимум в 3 раза.)))
№ 357 17-04-2009 08:32 | |
Ответ на »сообщение 355« (Geo)
___________________________
Ответ на »сообщение 354« (Сергей Перовский)
___________________________
>>> Кто может понять модель на полторы тысячи сущностей?
А где сказано, что модель обязательно должна быть плоской? ;-)
О, это волшебное слово "декомпозиция" ;-)
Да, в принципе так оно и есть. В этой модели хорошо выделяются сравнительно небольшие подмодели: модель именования, модель физических единиц измерения, модель графических примитивов и визуализации, топологическая и пространственная модель, модель документа, модель организационной структуры предприятия, модель причинно-следственных связей и т.д. Есть абстрактная высокоуровневая модель, в которой скрыты конкретные детали, и которая очень невелика. Большое количество сущностей частично обусловлено тем, что многие свойства (например: телефонный номер, сторона света, давление) также наречены сущностями.
По спецификации модель не обязана быть реализована целиком, можно взять ту её часть, которая нужна, и реализовать только её.
Вот, если кто интересуется, ссылка:
http://www.posc.org/Specifications/Epicentre_V30/
№ 356 16-04-2009 11:32 | |
Ответ на »сообщение 353« (Сергей Перовский)
___________________________
В примерах, которые я разбирал, все равно приходится описывать все соответствия между свойствами объекта и полями таблиц. Писать все это в Паскале нисколько не дольше.
У вас неправильный ORM :-)
Посмотрите как соответствия между атрибутами объекта и полями таблиц задаются на django - http://docs.djangoproject.com/en/dev/intro/tutorial01/ - на Delphi с библиотеками только от CodeGear такого, разумеется, не получится.
№ 355 16-04-2009 11:00 | |
Ответ на »сообщение 354« (Сергей Перовский)
___________________________
>>> Кто может понять модель на полторы тысячи сущностей?
А где сказано, что модель обязательно должна быть плоской? ;-)
О, это волшебное слово "декомпозиция" ;-)
№ 354 16-04-2009 10:59 | |
Ответ на »сообщение 352« (Денис Зайцев)
___________________________
Полезную модельку, не надуманную, на полторы тысячи сущностей.
Ужос! Кто может понять модель на полторы тысячи сущностей? И что делать с моделью, которую никто не может понять?
№ 353 16-04-2009 10:57 | |
Ответ на »сообщение 351« (panda)
___________________________
Но приходится руками писать кучу кода, который по идее уже написан разработчиками ORM.
В примерах, которые я разбирал, все равно приходится описывать все соответствия между свойствами объекта и полями таблиц. Писать все это в Паскале нисколько не дольше.
№ 352 15-04-2009 11:15 | |
Ответ на »сообщение 349« (Сергей Перовский)
___________________________
Ответ на »сообщение 343« (panda)
___________________________
>> Но что делать, если CodeGear не предоставляет механизма ORM/OP?
А оно надо? Очень надо? Тогда расскажите, зачем.
Мне никак не удается понять. Все примеры, которые приводят сторонники ORM мне кажутся надумаными - в них объектная и реляционнная модель спроектированы по разным принципам и возникает искусственная задача описания соответствия.
Кстати, были же штатные средства MDA (Bold/Together/ECO I..IV), которые Borland сильно продвигал в своё время (правда, вроде только в Architect Edition). Там и реляционная БД и исходные тексты могли создаваться из объектной модели автоматически (и далее автоматически эволюционировать вслед за эволюцией объектной модели). Правда, потом концепция MDA была тихо [спущена на тормозах] отдана на аутсорс.
Помню, пытался я как-то в D2006 загрузить модельку из Rational Rose. Полезную модельку, не надуманную, на полторы тысячи сущностей. Сожрало это чудо все 2 гига памяти, тормозило жутко, но что-то сгенерировало. Как выяснилось - с глюками и не полностью :'(
А я... так хотел... одним кликом мыши... :))))
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|