Mágikus gomb

A mágikus gomb a grafikus felhasználói felületek gyakori antimintája.[1][2] Az antiminta elkülöníti egymástól a felhasználói interfészt és az üzleti logikát. Ezek csak egy ponton érintkeznek: egy gombnál, ami elküldi a tartalmat.

Egypontos interfészként a mágikus gomb megvalósítása bonyolult. További probléma, hogy a felhasználói felületen végzett interakciók nem követhetnek olyan akciókat, amelyek az üzleti logikában mennek végbe. Különböző, össze nem tartozó funkciók kerülnek egy helyre, mivel nincs olyan szerkezet, ami befogadná őket.

Hátrányai szerkesztés

Habár a programozó számára érthető a logika, a felhasználók számára bosszantó az a felület, ami ez alapján készült. Mivel az üzleti logika elérhetetlen az adatok elküldése előtt, a felület kitöltése olyan, mintha papír alapú kérdőívet töltenének ki. A mezők tartalmát nem lehet ellenőrizni, nem lehet szűréseket végezni a már kitöltött mezők alapján, nem állnak rendelkezésre a lehetséges érvényes válaszok lenyíló menü formában, nem segíti súgó a kitöltést, nem kapnak figyelmeztetést az érvénytelen adatokról, és ami a legrosszabb, ha van közte érvénytelen adat vagy kimaradt kötelező mező, a hibásan kitöltött felület elküldés után üresen töltődik vissza. Még ha ez utóbbi probléma nem is fordul elő, a felhasználók számára frusztráló lehet visszatérni egy olyan mezőre, amiről úgy gondolták, hogy helyesen volt kitöltve.

A felhasználók nem tekinthetők a felület gyakori használóinak, és gyakran hibásan töltik ki. Az Internet elterjedésével már nem olyan alkalmazottakra kell számítani, akiknek az a munkájuk, hogy sok ember adatait vigyék be a rendszerbe ugyanannak a kérdőívnek a kitöltésével. Ha egy fejlesztő jól tudja használni, az még nem jelenti azt, hogy a rendszert nem ismerő felhasználók is fogják tudni.

A megvalósításban a mágikus gomb jelzi a következő problémákat: a korai szakaszban gyenge volt a tervezési folyamat ellenőrzése, és a projekt befejezése fontosabb, mint a felhasználói élmény. A mágikus gomb azért is vonzó, mert kevés felhasználói modult igényel, és kapcsolataik is egyszerűek. Ez a nézőpont elrejti a modulok belső bonyolultságát, és a költséghez képest túlzottan leértékeli az interfészt.

Alternatíva szerkesztés

A mágikus gomb alternatívájának lehetővé kell tennie, hogy a kérdőív a kitöltés közben is reagáljon a felhasználó által adott válaszokra, és ellenőrizze őket. Ez megvalósítható eseményvezérelt interfésszel, ami reagál egy-egy mező kitöltésére, a mező melletti gomb lenyomására, lenyíló lista kinyitására, és a többire. A kérdőív egyes részei a már megadott adatok alapján eltűnhetnek, kiszürkülhetnek, vagy éppen ellenkezőleg, megjelenhetnek. Ha az adatok kitöltésének sorrendje kötött, akkor a kurzor a következő helyre ugorhat. A javításra szoruló mezőket kiemeli a program.

A megvalósítás sorrendje: először a felületet kell megadni, és utána lehet megírni az üzleti logikát az automatikusan generált metódusokhoz.

Példa szerkesztés

Az alábbi példa a mágikus gomb tipikus megvalósítása Borland Delphiben:

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;

Egy javítási lehetőség az üzleti logika kiszervezése egy külön osztályba:

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

és ezt az osztályt meghívni a Click kezelőből:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Preferences.Save;
end;

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

Jegyzetek szerkesztés

Fordítás szerkesztés

Ez a szócikk részben vagy egészben a Magic pushbutton című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.