jPALIO MVC vs jPALIO Classic

Poniżej przedstawiono dwie implementacje obiektu podpiętego pod stronę jPALIO implementującego wzorzec MVC. Jedna steruje wykonaniem strony z użyciem standardowych instrukcji sterujących jPALIO, druga zaś z wykorzystaniem wsparcia jPALIO MVC. Obie wersje obsługują dokładnie te same funkcjonalności. Przykłady te mogą sugerować, że zastosowanie jPALIO MVC wprowadza niepotrzebne utrudnienia. Należy pamiętać jednak o tym, że używając jPALIO MVC wprowadzamy pewną konwencję programowania, która jest z góry narzucona i ciężko jest (nawet największemu bałaganiarzowi) od niej odstąpić. W przypadku implementacji bez użycia jPALIO MVC (drugi przykład) z dużym prawdopodobieństwem można stwierdzić, że każdy z programistów będzie programował wg swojej własnej konwencji, a co gorsza może programować bez żadnej konwencji.

Implementacja z użyciem wsparcia jPALIO MVC

import palio.*
import palio.modules.*
import jpalio.mvc.*
import jpalio.mvc.annotations.*

public class SampleController extends Controller {

// Method is matched only when "requestHandler" parameter has "listObject" value
@RequestHandler(view="palio.mvc.objectsList")
public void listObjects() {
setParam("objectsList", Groovy.module("sql").read("palio", "select id, code from p_objects order by code"))
}

// Method is matched only when "requestHandler" parameter has "listPages" value and user has required privileges
@RequestHandler(view="palio.mvc.pagesList", privs=["palio.mvc.pagesList"])
public void listPages() {
setParam("pagesList", Groovy.module("sql").read("palio", "select id, code from p_pages order by code"))
}

// Method is matched only when "requestHandler" parameter has "objectContent" value and "_RowID" parameter is not empty
@RequestHandler(view="palio.mvc.objectContent")
public void objectContent(
@RequestParam(name="_RowID") Long objectId
) {
Object[] row = Groovy.module("sql").readLine("palio", "select tag from p_objects where id=?", [objectId] as Object[])
setParam("objectContent", row[0])
}

// Default handler
@RequestHandler(defaultHandler=true, view="palio.mvc.page")
public void defaultHandler() {
// Nothing to do. Display only given view
}

// Handling unhandled exceptions
protected void handleException(Exception ex) {
// Do some exception handling
println "An exception occured: ${ex.getClass().getName()}"
}
}

 

Implementacja bez użycia wsparcia MVC (jPALIO Classic)

$try({
$// Execute only when "requestHandler" parameter has "listObject"
$if($==("listObjects", $requestHandler), {
$=(objectsList, $sql.read("palio", "select id, code from p_objects order by code"))
$*palio.mvc.objectsList
$return()
})

$// Executed only when "requestHandler" parameter has "listPages" value and user has required privileges
$if($==("listPages", $requestHandler), {
$ifNot($user.hasPriv("palio.mvc.pagesList", (Long) null), {
$error.throwError("Insufficient privileges to execute this operation")
})
$=("pagesList", $sql.read("palio", "select id, code from p_pages order by code"))
$*palio.mvc.pagesList
$return()
})

$// Executed only when "requestHandler" parameter has "objectContent" value and "_RowID" parameter is not empty
$if($&&($==("objectContent", $requestHandler), $isNotNull($_RowID)), {
$=(@row, $sql.readLine("palio", "select tag from p_objects where id=?", [$toLong((String) $_RowID)]))
$=(objectContent, $@row[0])
$*palio.mvc.objectContent
$return()
})

$// Default handler
$*palio.mvc.page


}, {
$// Handling unhandled exceptions
An exception occured: $error.getMessage()
})