Магическая кнопка: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
викификация
мНет описания правки
Строка 1: Строка 1:
'''Магическая кнопка''' — это [[анти-паттерн]], очень распространённый в [[среда визуальной разработки|средах визуальной разработки]]. В этом случае, программист сначала рисует [[пользовательский_интерфейс]], а затем пишет [[бизнес-логика|бизнес-логику]] в автоматичестки созданных [[метод_(языки_программирования)|методах]].
'''Магическая кнопка''' — это [[анти-паттерн]], очень распространённый в [[среда визуальной разработки|средах визуальной разработки]]. В этом случае, программист сначала рисует [[пользовательский интерфейс]], а затем пишет [[бизнес-логика|бизнес-логику]] в автоматичестки созданных [[метод_(языки_программирования)|методах]].


Проблемы этого анти-паттерна:
Проблемы этого анти-паттерна:

Версия от 10:57, 5 июля 2008

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

Проблемы этого анти-паттерна:

  • Код обработчиков элементов интерфейса неконтролируемо растёт
  • Изменение пользовательского интерфейса (или добавление нового интерфейса) становится сложным
  • Усложняется тестирование кода

Плохой пример (Borland Delphi)

procedure TForm1.Button1Click(Sender: TObject);
var
  reg: TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKey_Current_User;
    if reg.OpenKey('\Software\MyCompany', true) then
    begin
      reg.WriteString('Filename', Edit1.Text);
    end;
  finally
    reg.Free;
  end;
end;

Хороший пример (Borland Delphi)

В этом случае лучше будет произвести рефакторинг бизнес-логики (в этом примере — хранение имени файла в реестре) в отдельный класс.

type
  TPreferences = class
  private
    FFilename: String;
    procedure SetFilename(const Value: String);
  public
    property Filename: String read FFilename write SetFilename;
    procedure Load;
    procedure Save;
  end;

И воспользоваться методом этого класса "Сохранить" из обработчика нажатия кнопки:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Preferences.Save;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
  Preferences.Filename := Edit1.Text;
end;

Ссылки