Butonul magic
Un buton magic este un model anti - care apare atunci când există o lipsă de abstractizare, când multe acțiuni diferite sunt adunate în locul greșit, de exemplu, într-un handler de clic pe buton, în loc să fie distribuite între clasele și funcțiile corespunzătoare. De obicei, problema apare în mediile de dezvoltare vizuală [1] [2] când programatorul desenează mai întâi interfața cu utilizatorul și apoi scrie logica de afaceri în metode generate automat , de obicei o metodă de gestionare a clicurilor pe buton, cum ar fi „OK” [3] .
Probleme cu acest antimodel:
- Codul de gestionare a elementelor UI crește necontrolat [3]
- Schimbarea interfeței de utilizare (sau adăugarea unei noi interfețe de utilizare) devine dificilă, de exemplu, eliminarea unui buton poate implica eliminarea metodelor asociate acestuia [4]
- Testarea codului devine mai dificilă
- Reutilizarea codului nu este posibilă
Uneori, anti-modele similare apar și în codul de pe partea serverului, cum ar fi în ASP.NET Web Forms [5] .
Exemplu prost (Borland Delphi)
procedura TForm1 . Button1Click ( Expeditor : TObject ) ;
varreg
: TRegistry ; _ începe reg := TRegistry . a crea ; încercați reg . RootKey := HKey_Current_User ; dacă reg . OpenKey ( 'SoftwareMyCompany' , true ) apoi începe reg . WriteString ( 'Filename' , Edit1 . Text ) ; sfârşitul ; in sfarsit reg . Gratuit ; sfârşitul ; sfârşitul ;
Exemplu bun (Borland Delphi)
În acest caz, ar fi mai bine să refactorizezi logica de afaceri (în acest exemplu, stocarea numelui fișierului în registry) într-o clasă separată.
tip
TPreferences = class
private
FFilename : String ;
procedura SetFilename ( const Value : String ) ;
proprietate publică
Nume Fișier : șir citire NumeFișier scrie NumeFișier Set ; procedura Încărcare ; procedura Salvare ; sfârşitul ;
Și utilizați metoda „Salvare” a acestei clase din handlerul de clic pe buton:
procedura TForm1 . Button1Click ( Expeditor : TObject ) ;
începe
Preferințe . salvare ;
sfârşitul ;
procedura TForm1 . Edit1Change ( Expeditor : TObject ) ;
începe
Preferințe . Nume fișier := Editare1 . text ;
sfârşitul ;
Acum această problemă a devenit relevantă în Visual C# ( Microsoft Visual Studio ) [4] .
Note
- ↑ AntiPattern (de Indranil Nandy, IIT Kharagpur ) . Preluat la 2 octombrie 2017. Arhivat din original la 5 martie 2016.
- ↑ Anders Toxboe. Interfață utilizator Anti- Patterns . UI Patterns (5 februarie 2009). Preluat la 11 septembrie 2013. Arhivat din original la 18 august 2013.
- ↑ 1 2 George Stepanek. Secrete de programare software: de ce proiectele eșuează 14. Arhivat din original pe 12 martie 2016.
- ↑ 1 2 Ce să nu faci: Anti-Patterns and the Solutions ( 26 aprilie 2011). Arhivat din original pe 6 septembrie 2013.
- ↑ Enterprise Integration Anti-Patterns #2 - Ansambluri partajate (link inaccesibil)
Literatură
- Bruce A. Tate, Bitter Java. ISBN 193011043X , 2002. „Un antimodel timpuriu: butonul magic” pagina 54