Mi is az a CRUD?
A CRUD egy mozaikszó az alapvető adattárolási műveletekre: Create, Retrieve (vagy Read), Update és Delete. Azaz létrehozás, lekérdezés, módosítás és törlés.
Hol tartunk most?
A legutóbbi plugin fejlesztés posztban (JIRA Active Objects) létrehoztam egy rekordot, majd a plugin megjelenítette a többivel együtt egy listában, mindezt egy oldalon. Így a CRUD műveletekből a C-t és az R-t már megnéztük. A JIRA dokumentációk közül egy CRUD tutor leírás és egy elérhető SVN plugin kód együttese jól mutatja az adatbázis, a megjelenítés és a háttérműveletek kapcsolatát. Ezek ötvözetével folytatom a ToDo entitásra épülő miniprojektet.
CRUD Action
A JIRA által létrehozott CRUD példa jól mutatja a lehetőségeket, de szervletet használ, így a felelősségi szintek nem válnak szét teljesen. A két példa összefésülésével a következő csomagszintű bontást használom: action (request-ek kezelése), model (adatszerkezet), service (DAO műveletek összefogása). A megjelenítéshez szükséges velocity fájlok továbbra is a templates alatt vannak.
Az Action-ök a TodoAction-ből származnak, ahol a TodoService-en keresztül mentjük és kapjuk vissza az adatokat. A TodoAction végzi az alapvető és ismétlődő validálási folyamatokat is.
TodoAction.java részlet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | public class TodoAction extends JiraWebActionSupport { protected final static String VIEW_PAGE = "ViewTodoAction.jspa" ; protected final TodoService todoService; public TodoAction(TodoService todoService) { this .todoService = checkNotNull(todoService); } protected void doKeyValidation() { log.debug( "Entering doKeyValidation" ); final String id = request.getParameter( "key" ); if (id == null || id.isEmpty()) { //?key= addErrorMessage(getText( "todo.form.id.missing" )); } else { try { todo = this .todoService.findById(Integer.valueOf(id)); todo.getDescription(); } catch (NumberFormatException e) { //?key=aaa addErrorMessage(getText( "todo.form.id.wrong.format" )); } catch (NullPointerException e) { //?key=111 addErrorMessage(getText( "todo.form.not.found" )); } } } protected void doFieldValidation() { final String description = request.getParameter( "description" ); if (description == null || description.isEmpty()) { addErrorMessage(getText( "todo.form.description.missing" )); } int maxLength = 50 ; if (description != null && description.length() > maxLength) { addErrorMessage(getText( "todo.form.description.too.long" )); } } protected Todo todo; public Todo getTodo() { return todo; } } |
TodoService.java részlet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | @Transactional public interface TodoService { Todo create(String description); List<todo> findAll(); List<todo> find(String description); Todo findById( int id); void delete( int id); void addComment(Todo todo, String text); } |
A végeredmény
A fejlesztés eredménye egy kiindulási oldal (lista), ahonnan indíthatunk egy keresést a description mező teljes egyezésére (R), törölhetjük (D) vagy szerkeszthetjük (U) az eddig felvitt rekordokat vagy újat hozhatunk létre (C).
A fenti módosítások letölthetők SVN-en keresztül és becsomagolva a blog GoogleCode oldaláról a JiraDevTutor projektből.