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

Оптимизация кода: сокращение дублирования при создании диалоговых окон в Delphi и C++Builder

Delphi , Программа и Интерфейс , Модальные формы

Оптимизация кода: сокращение дублирования при создании диалоговых окон в Delphi и C++Builder

При разработке приложений на Delphi и C++Builder часто возникает необходимость создавать диалоговые окна для редактирования различных свойств объектов. В этом случае код может содержать много повторяющегося кода, подобного приведенному ниже:

Dialog.Edit1.Text := MyObject.Username;
Dialog.Edit2.Text := MyObject.Password;
// ... много подобных строк

if (Dialog.ShowModal = mrOk) then
begin
  MyObject.Username := Dialog.Edit1.Text;
  MyObject.Password := Dialog.Edit2.Text;
  // ... снова много подобных строк
end;

Также часто встречается подобный код при преобразовании объектов в формат XML, INI или другой формат хранения данных.

В данной статье мы рассмотрим несколько техник и приемов, которые помогут сократить или полностью устранить дублирование кода в таких ситуациях.

  1. Использование свойств диалога

Одним из способов сокращения дублирующегося кода является использование свойств диалога. Вместо доступа к контролам диалога напрямую можно добавить соответствующие свойства в сам диалог. Это не только сокращает код, но и повышает гибкость и читаемость кода.

Пример:

TMyDialog = class(TForm)
  // ...
  private
    FMyObject: TMyObject;
  public
    property MyObject: TMyObject read FMyObject write FMyObject;
end;

procedure TMyDialog.FormCreate(Sender: TObject);
begin
  MyObject := TMyObject.Create;
end;

procedure TMyDialog.FormDestroy(Sender: TObject);
begin
  FreeAndNil(MyObject);
end;

procedure TMyDialog.btnOKClick(Sender: TObject);
begin
  if ShowModal = mrOk then
  begin
    MyObject.Username := edtUsername.Text;
    MyObject.Password := edtPassword.Text;
    // ... и так далее
  end;
end;
  1. Использование оператора "with"

Оператор "with" в Delphi позволяет сократить количество повторяющихся ссылок на объекты. Однако, стоит отметить, что он не полностью решает проблему дублирования кода в приведенном примере.

Пример:

if (Dialog.ShowModal = mrOk) then
begin
  with MyObject do
  begin
    Username := Dialog.Edit1.Text;
    Password := Dialog.Edit2.Text;
    // ... и так далее
  end;
end;
  1. Использование паттерна "Медиатор"

Паттерн "Медиатор" из GoF (Гарант и другие) предлагает центральный объект (медиатор), через который все компоненты диалога общаются друг с другом. Это позволяет сократить дублирование кода и повысить гибкость и модульность кода.

Пример:

TMyDialogMediator = class
  private
    FDialog: TMyDialog;
    FMyObject: TMyObject;
  public
    constructor Create(Dialog: TMyDialog; MyObject: TMyObject);
    procedure UpdateUsername;
    procedure UpdatePassword;
end;

constructor TMyDialogMediator.Create(Dialog: TMyDialog; MyObject: TMyObject);
begin
  FDialog := Dialog;
  FMyObject := MyObject;
  FDialog.edtUsername.OnChange := UpdateUsername;
  FDialog.edtPassword.OnChange := UpdatePassword;
end;

procedure TMyDialogMediator.UpdateUsername;
begin
  FMyObject.Username := FDialog.edtUsername.Text;
end;

procedure TMyDialogMediator.UpdatePassword;
begin
  FMyObject.Password := FDialog.edtPassword.Text;
end;

При использовании паттерна "Медиатор" диалоговое окно не знает ничего о своих компонентах, а медиатор управляет всем процессом обмена данными между диалогом и объектом.

  1. Использование плагина GExperts "Reverse Statement"

Плагин GExperts "Reverse Statement" (Смена местами выражений) позволяет автоматически поменять местами стороны присваивания в выбранном блоке кода. Это может существенно сократить количество дублирующегося кода.

Пример:

edit1.text := dbfield.asString;

после применения плагина станет:

dbField.asString := edit1.text;
  1. Использование привязки данных

В Delphi существует возможность привязывать данные к компонентам, что позволяет автоматически синхронизировать данные между объектом и формой. Однако, этот подход работает только с объектами, унаследованными от TDataSet.

  1. Использование паттерна "Снимок объекта"

Паттерн "Снимок объекта" предлагает использовать TDataSet-подобный объект для хранения данных в виде снимка объекта. Это позволяет использовать привязку данных для работы с объектами, не являющимися TDataSet.

  1. Передача объекта в диалог

Еще одним подходом является передача объекта в диалог в качестве параметра, как показано в следующем примере:

procedure TForm1.ShowMyObjectDialog(MyObject: TMyObject);
var
  Dialog: TMyDialog;
begin
  Dialog := TMyDialog.Create(nil);
  try
    Dialog.MyObject := MyObject;
    if Dialog.ShowModal = mrOk then
      // ... использовать MyObject здесь ...
    finally
      Dialog.Free;
    end;
  end;
end;

В заключение, оптимизация кода при создании диалоговых окон в Delphi и C++Builder может быть достигнута путем использования различных техник и приемов, таких как использование свойств диалога, оператора "with", паттерна "Медиатор", плагина GExperts "Reverse Statement", привязки данных, паттерна "Снимок объекта" и передачи объекта в диалог. Каждый из этих подходов имеет свои преимущества и может быть использован в зависимости от конкретной ситуации.

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

В данном контексте рассматриваются техники и приемы для сокращения дублирования кода при создании диалоговых окон в Delphi и C++Builder, таких как использование свойств диалога, оператора "with", паттерна "Медиатор", плагина GExperts "Reverse Statement",


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

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




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


:: Главная :: Модальные формы ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:08:55/0.0041108131408691/0