Size: a a a

2020 August 08

OV

Oleg Volkov in Delphi & Lazarus
Miss Очепятка
А у вас что не ла-ла? Почитайте Фаулер Мартин  Рефакторинг - улучшение существующего кода там наглядно показано, что одну задачу можно решать разными методами и нет единого в качестве лучшего. Шаблоны это практики. А вот то что они лучшие Вы решили от фонаря.  В данной постановке написано куча воды. Хотя проблема известна как "тесное связывание" и решается уменьшением числом ссылок. Но зачем создавать кучу объектов когда все решается методами не понятно.
Правильно, вот меня в Go вообще этих ваших классов нет:-) и в C так же. И ничего :-)
источник

AS

Alexey Shumkin in Delphi & Lazarus
Miss Очепятка
А у вас что не ла-ла? Почитайте Фаулер Мартин  Рефакторинг - улучшение существующего кода там наглядно показано, что одну задачу можно решать разными методами и нет единого в качестве лучшего. Шаблоны это практики. А вот то что они лучшие Вы решили от фонаря.  В данной постановке написано куча воды. Хотя проблема известна как "тесное связывание" и решается уменьшением числом ссылок. Но зачем создавать кучу объектов когда все решается методами не понятно.
"-ла" - это было про глаголы )в женском роде, если можно так сказать :)
"Ля-ля" - это по-другому :)
источник

Miss Очепятка... in Delphi & Lazarus
Alexey Shumkin
Ну, если не пойми для чего, то покажь свой вариант :)
Вот так бы:  
THistoryItem=class(TInterfacedObject)
 public
   name:String;     // Имя груповой команды к примеру "backspace" или "refactoring.rename"
   Command:(hcInsert,hcDelete, hcAdd, hcMoveCaret, hcGroup);
   Chank:String;   // Порция вставленных либо добавленных данных
   pos:Integer;    // Позиция вставки или удаления, а так же для перемещения курсора
   Count:Integer;  // Колличесо удаленых элементов.
   //IsVisual:Boolean; // Для backspace требуется перемещенее курсора прежде чем сделать удаление
   // GoF предлогает делать признак визуализации, но я счиаю лучше сделать группировку
   Group: TListHistoryItem;
   procedure Redo
   procedure Undo;
   constructor Create; override;
   destructor Destroy; override;
 end;
источник

AS

Alexey Shumkin in Delphi & Lazarus
Miss Очепятка
А у вас что не ла-ла? Почитайте Фаулер Мартин  Рефакторинг - улучшение существующего кода там наглядно показано, что одну задачу можно решать разными методами и нет единого в качестве лучшего. Шаблоны это практики. А вот то что они лучшие Вы решили от фонаря.  В данной постановке написано куча воды. Хотя проблема известна как "тесное связывание" и решается уменьшением числом ссылок. Но зачем создавать кучу объектов когда все решается методами не понятно.
Я изначально ничего не говорил про "лучше". Я сказал, что это шаблон.
Потом ты сказаЛА, что это неудобно.я спросил "чем?". И попросил привести реализацию без этого паттерна :)))
источник

AS

Alexey Shumkin in Delphi & Lazarus
Miss Очепятка
Вот так бы:  
THistoryItem=class(TInterfacedObject)
 public
   name:String;     // Имя груповой команды к примеру "backspace" или "refactoring.rename"
   Command:(hcInsert,hcDelete, hcAdd, hcMoveCaret, hcGroup);
   Chank:String;   // Порция вставленных либо добавленных данных
   pos:Integer;    // Позиция вставки или удаления, а так же для перемещения курсора
   Count:Integer;  // Колличесо удаленых элементов.
   //IsVisual:Boolean; // Для backspace требуется перемещенее курсора прежде чем сделать удаление
   // GoF предлогает делать признак визуализации, но я счиаю лучше сделать группировку
   Group: TListHistoryItem;
   procedure Redo
   procedure Undo;
   constructor Create; override;
   destructor Destroy; override;
 end;
Как реализована отмена для команды? Case-ом.
При добавлении новой команды надо будет изменять существующий код ?
источник

AS

Alexey Shumkin in Delphi & Lazarus
Miss Очепятка
Вот так бы:  
THistoryItem=class(TInterfacedObject)
 public
   name:String;     // Имя груповой команды к примеру "backspace" или "refactoring.rename"
   Command:(hcInsert,hcDelete, hcAdd, hcMoveCaret, hcGroup);
   Chank:String;   // Порция вставленных либо добавленных данных
   pos:Integer;    // Позиция вставки или удаления, а так же для перемещения курсора
   Count:Integer;  // Колличесо удаленых элементов.
   //IsVisual:Boolean; // Для backspace требуется перемещенее курсора прежде чем сделать удаление
   // GoF предлогает делать признак визуализации, но я счиаю лучше сделать группировку
   Group: TListHistoryItem;
   procedure Redo
   procedure Undo;
   constructor Create; override;
   destructor Destroy; override;
 end;
Если у команды есть , например, два "атрибута": "имя команды" и её "функция"...
Это, как я понимаю, два списка/массива , так?
А мы захотим потом добавить ещё, например, признак "неотменяемая" или что-то вроде того, нам надо будет завести новый список/массив этого атрибута? Так?
источник

Miss Очепятка... in Delphi & Lazarus
Alexey Shumkin
Как реализована отмена для команды? Case-ом.
При добавлении новой команды надо будет изменять существующий код ?
Кейсом. Код менять не нужно. Сложные команды набираете из простых  в список.
источник

Miss Очепятка... in Delphi & Lazarus
Alexey Shumkin
Если у команды есть , например, два "атрибута": "имя команды" и её "функция"...
Это, как я понимаю, два списка/массива , так?
А мы захотим потом добавить ещё, например, признак "неотменяемая" или что-то вроде того, нам надо будет завести новый список/массив этого атрибута? Так?
А зачем потом добавлять? Программа должна делать только, то за что заплатили.  А так  это избыточное планирование, из-за которой программисты не успевают в срок сдать проект.  В текстовом редакторе нет "неотменяемых".  Если Вам так нужно то просто удалите из списка все до неотменяемой команды.  
Массив один. Это же история команд, а не меню настройки быстрых клавиш. Как такового "имя команды" - тут не нужны и оставлены для отладки. Вместо массива set of и case.  Если делать меню настройки быстрых клавиш, то там нет смыла делать два массива. Все равно код он по своей природы "жёсткий".  Вы его не заставить за счет файла с данными эволюционировать во время работы.  У вас по любому будет инициализация этого массива конкретными функциями и именами.  Вот если делать эволюцию плагинами тогда, упростить не выйдет. Но это уже совсем другая история.
источник

AS

Alexey Shumkin in Delphi & Lazarus
Miss Очепятка
А зачем потом добавлять? Программа должна делать только, то за что заплатили.  А так  это избыточное планирование, из-за которой программисты не успевают в срок сдать проект.  В текстовом редакторе нет "неотменяемых".  Если Вам так нужно то просто удалите из списка все до неотменяемой команды.  
Массив один. Это же история команд, а не меню настройки быстрых клавиш. Как такового "имя команды" - тут не нужны и оставлены для отладки. Вместо массива set of и case.  Если делать меню настройки быстрых клавиш, то там нет смыла делать два массива. Все равно код он по своей природы "жёсткий".  Вы его не заставить за счет файла с данными эволюционировать во время работы.  У вас по любому будет инициализация этого массива конкретными функциями и именами.  Вот если делать эволюцию плагинами тогда, упростить не выйдет. Но это уже совсем другая история.
Удачи в командной разработке над долгоиграющим проектом
источник

Ш

Шляпник in Delphi & Lazarus
Alexey Shumkin
Удачи в командной разработке над долгоиграющим проектом
мне попалась такая команда - там тоже превалирующей была логика : делаем только то, что сказал аналитик/заказал клиент - шаг вправо, шаг влево = расстрел :) Приходилось выкручиваться и сглаживать откровенно косячные места, которые потом боком могли выйти.
источник

АВ

Александр В... in Delphi & Lazarus
Помнится, как-то раз....чувствуя что предстоит как-то изменять со временем, я просто вынес логику в скрипты, пробросив объекты в скриптовый движок. Сперва PAscalScript. когда перестало хватать - взял Lape. Вот уже много лет софтина обрабатывает данные в реальном времени от станции Siemens HiPath 4000, полет нормальный-))
источник

АВ

Александр В... in Delphi & Lazarus
Если кому интересно кстати: https://yadi.sk/d/n97vZnY_h1iO1A , последняя ревизия от прошлого года. Вообще задумывалось как универсальное средство захвата данных со всяких девайсов. Хотел со временем OpenSource зарелизить, но как обычно - то времени нет, то желания. Исходники под Lazarus старше 1.8.0
источник

RS

Renat Suleymanov in Delphi & Lazarus
Александр В
Если кому интересно кстати: https://yadi.sk/d/n97vZnY_h1iO1A , последняя ревизия от прошлого года. Вообще задумывалось как универсальное средство захвата данных со всяких девайсов. Хотел со временем OpenSource зарелизить, но как обычно - то времени нет, то желания. Исходники под Lazarus старше 1.8.0
На github можно не только OpenSOurce выкладывать
источник

АВ

Александр В... in Delphi & Lazarus
Ну я когда нибудь закину на гит, когда вдруг перестанет быть лень:D
источник

АВ

Александр В... in Delphi & Lazarus
Потому что...коллаборация паскалистов там унылая. Ну а тогда какой смысл? Нет мотивации-))
источник

AS

Alexey Shumkin in Delphi & Lazarus
Александр В
Ну я когда нибудь закину на гит, когда вдруг перестанет быть лень:D
т.е. в работе ты Git  не используешь? )
источник

RS

Renat Suleymanov in Delphi & Lazarus
Александр В
Потому что...коллаборация паскалистов там унылая. Ну а тогда какой смысл? Нет мотивации-))
А в чем унылость заключается?
источник

АВ

Александр В... in Delphi & Lazarus
Alexey Shumkin
т.е. в работе ты Git  не используешь? )
Я вообще ИТ директор в отеле:D:D:D
источник

RS

Renat Suleymanov in Delphi & Lazarus
Если на git уже аккаунт есть, то просто залить на него. Ну раза в 3 дольше, чем заливать на яндекс диск. То есть минуты 3 максимум (включая, придумывание алиаса для репозитария с деволтнми настройками)
источник

AS

Alexey Shumkin in Delphi & Lazarus
Александр В
Я вообще ИТ директор в отеле:D:D:D
"в работе" с проектами (раз уж ты в этом чатике - ты программируешь ))
источник