Deklarativní přístup

Z FI WIKI
Přejít na: navigace, hledání

Deklarativní přístup je způsob vývoje aplikací, při němž se určité aspekty chování programu nedefinují prostřednictvím tradičního imperativního kódu (tj. posloupnosti příkazů, jak požadovaného cíle dosáhnout), ale specifikací cíle (tj. čeho dosáhnout). Tento přístup obvykle zpřehledňuje zdrojový kód, který je jednodušší díky absenci částí řešících problémy, které jsou ošetřeny deklarativním způsobem.

Tento přístup se například důsledně uplatňuje v Java EE, kde se celá řada vlastností Java EE komponent (např. řízení transakcí, řízení přístupu k jednotlivým metodám apod.) specifikuje právě deklarativním způsobem, díky čemuž se jejich vývojář může soustředit na problémovou doménu a nemusí komplikovat kód konstrukcemi pro zajištění těchto vlastností.

Příklad kódu metody komponenty typu Session EJB, která pracuje s transakcemi programovým způsobem prostřednictvím JTA:

public void someMethod() {
 
   UserTransaction transaction = context.getUserTransaction();
 
   try {
      transaction.begin();
      doSomething();
      transaction.commit();
   } catch (Exception ex) {
       try {
          transaction.rollback();
       } catch (SystemException syex) {
           throw new EJBException
              ("Rollback failed: " + syex.getMessage());
       }
       throw new EJBException 
          ("Transaction failed: " + ex.getMessage());
    }
}

Stejná metoda s deklarativním přístupem k transakcím (vlastní transakce v tomto případě řídí kontejner a my pouze prostřednictvím anotace specifikujeme, jakým způsobem mají být transakce řízeny), v případě EJB:

 
    @TransactionAttribute(javax.ejb.TransactionAttributeType.RequiresNew)
    public void someMethod() {
        doSomething();
    }

nebo v případě Springu:

 
    @Transactional
    public void someMethod() {
        doSomething();   
    }

Je nutné si uvědomit, že přenechání řízení transakcí kontejneru neznamená, že by je nebylo třeba řešit; je nutné správně nastavit správné transakční atributy. Přenecháním zodpovědnosti za transakce kontejneru však zjednodušíme a zpřehledníme kód.