Estou aceitando dicas / sugestoes em relacao a refatoracao de codigo. O problema basicamente o seguinte: atualmente, no JForum, o codigo que lida com a logica de listar / inserir / editar etc esta nas Actions, depedente de um request. O que eu quero eh separar o maximo de codigo que for possivel, afim de torna-lo facil de usar em outros ambientes, que nao precisam necessariamente ser HTTP.
A primeira coisa que me vem a cabeca eh colocar o codigo de logica em uma classe comum, e passar os dados que ela vai precisar via metodo / setter / construtor. Mas o meu medo eh que, como pode haver n parametros (10 eh um numero comum), a chamada ao metodo ficaria um tanto… hmm… fora do comum.
Exemplificando, eis o metodo atual que atualiza uma entrada do Favoritos:
public void updateSave() throws Exception
{
int id = this.request.getIntParameter("bookmark_id");
BookmarkModel bm = DataAccessDriver.getInstance().newBookmarkModel();
Bookmark b = bm.selectById(id);
if (!this.sanityCheck(b)) {
return;
}
b.setTitle(this.request.getParameter("title"));
b.setDescription(this.request.getParameter("description"));
String visible = this.request.getParameter("visible");
b.setPublicVisible(visible != null && !"".equals(visible) ? true : false);
bm.update(b);
this.setTemplateName(TemplateKeys.BOOKMARKS_UPDATE_SAVE);
}
Nesse simples codigo, ha 4 parametros que vem do request: bookmark_id, title, description e visible. Desacoplando usando a abordagem citada anteriormente, o novo codigo seria algo como
// BookmarkLogic.java
...
public int updateSave(int bookmarkId, String title, String description, boolean visible)
{
BookmarkModel bm = DataAccessDriver.getInstance().newBookmarkModel();
Bookmark b = bm.selectById(bookmarkId);
if (!this.sanityCheck(b)) {
return SANITY_FAILED;
}
b.setTitle(title);
b.setDescription(description);
b.setPublicVisible(visible);
bm.update(b);
return UPDATE_OK;
}
// BookmarkAction.java - classe do codigo original
...
public void updateSave()
{
BookmarkLogic logic = new BookmarkLogic();
int status = logic.updateSave(this.request.getIntParameter("bookmark_id"),
this.request.getParameter("title"),
this.request.getParameter("description"),
this.request.getParameter("visible") != null);
if (status == BookmarkLogic.SANITY_FAILED) {
this.error("Bookmarks.notFound");
return;
}
}
Ficaria algo assim… O que acham? sugestoes sao mais do que bem vindas!
Rafael

)