Магическая кнопка: различия между версиями
Перейти к навигации
Перейти к поиску
[непроверенная версия] | [непроверенная версия] |
Содержимое удалено Содержимое добавлено
Vald (обсуждение | вклад) викификация |
Upliner (обсуждение | вклад) мНет описания правки |
||
Строка 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;