CRUD

De BIS Wiki
Ir para navegação Ir para pesquisar

O CRUD (acrônimo de Create, Read, Update e Delete na língua Inglesa) é a camada lógica do sistema. Nela está toda a definição do que o sistema se propõe a fazer.

O CRUD é orientado a serviço, isto é, cada método tem a sua função clara e específica, recebe os dados de entrada e tenta cumprir sua função. Em caso de sucesso retorna o esperado, em caso de falha lança uma exceção. Não mantém estados (stateless). Em outras palavras, todos os seus métodos são estáticos e devem lançar apenas exceções do próprio framework: BISException. Qualquer outra exceção deve ser tratada e substituída por uma do BISCore como manda o Uso das Exceções.

É recomendável que seja feita uma classe de CRUD para cada elemento do módulo. Isso porque cada classe de CRUD tende a ser extensa por ter os métodos de lógica, e muito código em uma classe torna-se confuso e de difícil manutenção. Além disso, é recomendável que métodos de validação e pré-processo muito longos sejam separados em outras classes, facilitando o a localização do código.

CRUD Modelo

O modelo abaixo é uma classe genérica que implementa todos os métodos fornecidos pela persistência. Os de 'find' já ficam prontos, enquanto que os de insert, update e delete precisam ser melhor observados ganham apenas o 'TODO' em seu corpo. Para usa-lo faça as seguintes substituições com a ferramenta 'replace all':

  • <beanname> - Substitua esta tag pelo nome do bean a ser persistido. Ex: 'Balance' para o 'BalanceVO', 'ItemCode' para o 'ItemCodeVO'.
  • <modulename> - Substitua esta tag pelo nome do módulo. Ex: 'Fiscal', 'Item', 'ECF', etc.
Exemplo de Código de uma Classe do CRUD
import java.util.Collection;
import java.util.List;

import br.com.biserp.bis.core.mo.BISOrderBy;
import br.com.biserp.bis.exceptions.BISException;

public class <beanname>Crud {
  public static <beanname>VO insert<beanname>(<beanname>VO vo) throws BISException {
    <beanname>Validation.insert<beanname>(vo);
    <beanname>DAO dao = <modulename>DAOFactory.get<beanname>DAO();
    vo = dao.insert(vo);
    return vo;
  }

  public static <beanname>VO update<beanname>(<beanname>VO vo) throws BISException {
    <beanname>Validation.update<beanname>(vo);
    <beanname>DAO dao = <modulename>DAOFactory.get<beanname>DAO();
    dao.update(vo);
  }

  public static void delete<beanname>(Long id) throws BISException {
    <beanname>Validation.delete<beanname>(id);
    <beanname>DAO dao = <modulename>DAOFactory.get<beanname>DAO();
    dao.delete(id);
  }

  public static void delete<beanname>(Collection<Long> ids) throws BISException {
    if (ids != null) {
      for (Long id : ids) {
        delete<beanname>(id);
      }
    }
  }
  
  public static Long count<beanname>(<beanname>MO mo) throws BISException {
    <beanname>DAO dao = <modulename>DAOFactory.get<beanname>DAO();
    return dao.count(mo);
  }

  public static List<Long> find<beanname>IDs(<beanname>MO mo, BISOrderBy orderby) throws BISException {
    <beanname>DAO dao = <modulename>DAOFactory.get<beanname>DAO();
    return dao.findIDs(mo, orderby);
  }

  public static <beanname>VO find<beanname>(Long id, String[] attributes) throws BISException {
    <beanname>DAO dao = <modulename>DAOFactory.get<beanname>DAO();
    return dao.findById(id, attributes);
  }

  public static List<<beanname>VO> find<beanname>List(<beanname>MO mo, BISOrderBy orderby, String[] attributes) throws BISException {
    <beanname>DAO dao = <modulename>DAOFactory.get<beanname>DAO();
    return dao.findList(mo, orderby, attributes);
  }

  public static <beanname>VO find<beanname>UniqueMatch(<beanname>MO mo, String[] attributes) throws BISException {
    <beanname>DAO dao = <modulename>DAOFactory.get<beanname>DAO();
    return dao.findUniqueMatch(mo, attributes);
  }
}