Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

"Оптимизация повторяющегося кода в Delphi с использованием общих предков: техники и подходы"

Delphi , Технологии , Объектно-ориентированное программирование

Оптимизация повторяющегося кода в Delphi с использованием общих предков

Если вы сталкиваетесь с необходимостью многократного использования одних и тех же участков кода для классов, имеющих общего предка, это может привести к нарушению одного из ключевых принципов программирования — DRY (Don't Repeat Yourself). В контексте языка Object Pascal и среды разработки Delphi такой ситуацией является использование общих операций над объектами TTntMemo, TTntEdit и TEdit, которые все наследуются от TCustomEdit. Однако, поскольку свойства Color и ShowHint в TCustomEdit объявлены как защищенные (protected), они не могут быть использованы напрямую.

Проблема

Код для обработки различных типов элементов управления повторяется три раза:

class procedure TCommon.ValidateEdit(edit: TCustomEdit; condition: Boolean; failHint: WideString);
var
  m: TTntMemo;
  te: TTntEdit;
  e: TEdit;
begin
  // ... код обработки для каждого типа ...
end;

Это приводит к нежелательному дублированию и усложнению поддержки кода.

Решение

Использование хакнутых классов или RTTI может помочь оптимизировать код. Например, можно создать новый класс THackedCustomEdit, который наследуется от TCustomEdit и делает свойства Color и ShowHint публичными:

type
  THackedCustomEdit = class( TCustomEdit )
  published
    property ShowHint;
    property Color;
  end;

class procedure TCommon.ValidateEdit(AEdit: TCustomEdit; ACondition: Boolean; AFailHint: string);
var
  LEdit: THackedCustomEdit;
begin
  // ... код обработки с использованием LEdit ...
end;

Также можно использовать единицу TypInfo для работы со свойствами через RTTI:

uses
  TypInfo;

class procedure TCommon.ValidateEdit(AEdit: TCustomEdit; ACondition: Boolean; AFailHint: string);
var
  SetPublishedPropValue: TProc;
begin
  // ... код обработки с использованием SetPublishedPropValue ...
end;

Обновление

Так как все свойства объявлены в TControl, можно использовать его в качестве базового класса вместо TCustomEdit.

Дополнительное предложение для максимальной DRY-сти

Для достижения большей сухости (DRY) кода, рекомендуется использовать функцию, которая будет возвращать результат проверки условия:

class function TCommon.ValidateControl(AControl: TControl; ACondition: Boolean; AFailHint: string): Boolean;
begin
  // ... код обработки с возможностью использования результата ...
end;

И затем в форме использовать эту функцию для валидации нескольких элементов:

procedure TForm1.Validate;
begin
  SaveButton.Enabled := BoolAnd([
    TCommon.ValidateControl(Edit1, Edit1.Text <> '', 'must not be empty'),
    // ... другие проверки ...
  ]);
end;

Заключение

Применение описанных техник позволит уменьшить количество повторяющегося кода и упростить его поддержку, а также повысить читаемость и maintainability вашего проекта на Delphi.

Создано по материалам из источника по ссылке.

Необходимость оптимизации повторяющегося кода в программе на языке Delphi путем использования общих предков класса для уменьшения дублирования и упрощения поддержки программы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Объектно-ориентированное программирование ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 06:49:46/0.0033950805664062/0