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

Улучшение Кода Delphi: Применение DRY для Уменьшения Дублирования Компонентов и Кода

Delphi , Программа и Интерфейс , Интерфейс

При разработке программного обеспечения на Delphi часто возникают ситуации, когда один и тот же код или логика повторяются в разных частях программы. Это может привести к неэффективности и усложнению поддержки кода. Принцип DRY (Don't Repeat Yourself) предлагает избегать дублирования кода, что позволяет упростить поддержку и обновление программы, а также уменьшить вероятность ошибок.

Проблема дублирования кода

Вопрос пользователя касается интерфейса IComm, который объявляет процедуру SetMonitorLogLevel. Этот интерфейс реализован в двух формах frmBarComm и frmFooComm, которые имеют общие компоненты, такие как cboDebugLevel, но также могут содержать уникальные компоненты. Обе формы реализуют IComm.SetMonitorLogLevel одинаковым образом, что приводит к дублированию кода.

Пример кода

unit IFaceComm;
interface
type
  TMonitorLogLevel = (mllOnlyImportant, mllAll);
  IComm = Interface(IInterface)
    procedure SetMonitorLogLevel(LogLevel: TMonitorLogLevel);
  end;
end.

type
  TfrmBarComm = class(TForm, IFaceComm.IComm)
  private
    cboDebugLevel: TComboBox;
    procedure SetMonitorLogLevel(LogLevel: IFaceComm.TMonitorLogLevel);
  end;

procedure TfrmBarComm.SetMonitorLogLevel(LogLevel: IFaceComm.TMonitorLogLevel);
begin
  case LogLevel of
    IFaceComm.TMonitorLogLevel.mllOnlyImportant:
      Self.cboDebugLevel.ItemIndex := 0;
    IFaceComm.TMonitorLogLevel.mllAll:
      Self.cboDebugLevel.ItemIndex := 1;
  end;
end;

Решение проблемы

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

Пример реализации класса

type
  TComboBoxCommImplementor = class(TInterfacedObject, IFaceComm.IComm)
  private
    FDebugLevel: TComboBox;
  public
    constructor Create(ADebugLevel: TComboBox);
    procedure SetMonitorLogLevel(LogLevel: TMonitorLogLevel);
  end;

constructor TComboBoxCommImplementor.Create(ADebugLevel: TComboBox);
begin
  inherited Create;
  FDebugLevel := ADebugLevel;
end;

procedure TComboBoxCommImplementor.SetMonitorLogLevel(LogLevel: TMonitorLogLevel);
begin
  case LogLevel of
    IFaceComm.TMonitorLogLevel.mllOnlyImportant:
      FDebugLevel.ItemIndex := 0;
    IFaceComm.TMonitorLogLevel.mllAll:
      FDebugLevel.ItemIndex := 1;
  end;
end;

Интеграция класса в форму

Теперь, чтобы использовать TComboBoxCommImplementor в форме, необходимо создать свойство, которое будет делегировать реализацию интерфейса IComm.

type
  TfrmBarComm = class(TForm)
  private
    FCustomComm: TComboBoxCommImplementor;
  public
    property CustomComm: TComboBoxCommImplementor read FCustomComm implements IFaceComm.IComm;
  end;

constructor TfrmBarComm.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FCustomComm := TComboBoxCommImplementor.Create(cboDebugLevel);
end;

Или, как альтернативный подход, можно создать базовый класс, который реализует интерфейс и наследовать от него формы, использующие этот интерфейс.

Выводы

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

Следуя этим рекомендациям, разработчики могут значительно улучшить качество и эффективность кода, а также упростить процесс его модификации и обновления.

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

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


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

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




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


:: Главная :: Интерфейс ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 15:02:27/0.0037579536437988/0