Interested Article - Магическая кнопка
- 2020-08-15
- 2
Магическая кнопка ( англ. magic pushbutton ) — антипаттерн , появляющийся при недостатке абстракции, когда множество различных действий сваливается в кучу в неподходящем месте, например в обработчике нажатия на кнопку, вместо того чтобы быть распределёнными по подходящим классам и функциям. Обычно проблема возникает в , когда программист сначала рисует пользовательский интерфейс , а затем пишет бизнес-логику в автоматически созданных методах , обычно — в методе обработки нажатия на кнопку, например «OK» .
Проблемы этого антипаттерна:
- Код обработчиков элементов интерфейса неконтролируемо растёт
- Изменение пользовательского интерфейса (или добавление нового интерфейса) становится сложным, например удаление кнопки может повлечь за собой удаление связанных с ней методов
- Усложняется тестирование кода
- Повторное использование кода невозможно
Иногда сходные антипаттерны возникают и в серверном коде, например в ASP.NET Web Forms .
Плохой пример (Borland Delphi)
procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
try
reg.RootKey := HKey_Current_User;
if reg.OpenKey('SoftwareMyCompany', 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;
Сейчас эта проблема стала актуальной и в Visual C# ( Microsoft Visual Studio ) .
Примечания
- (англ.) . Дата обращения: 2 октября 2017. 5 марта 2016 года.
- Anders Toxboe. (англ.) . UI Patterns (5 февраля 2009). Дата обращения: 11 сентября 2013. 18 августа 2013 года.
- ↑ George Stepanek. (англ.) 14. 12 марта 2016 года.
- ↑ (англ.) (26 апреля 2011). 6 сентября 2013 года.
- (недоступная ссылка)
Литература
- Bruce A. Tate, Bitter Java. ISBN 193011043X , 2002. «An early antipattern: The Magic Pushbutton» page 54
- 2020-08-15
- 2