Mágikus gomb

A Wikipédiából, a szabad enciklopédiából

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.